我用vtk加载点云,通过vtkLight设置灯,但是设置的灯不起作用。我的代码如下:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
#include
#include
#include <string.h>
#include
#include <io.h>
#include <pcl/filters/project_inliers.h>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/range_image/range_image.h>
#include <vtkImageViewer.h>
#include "vtkJPEGReader.h"
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>
#include "vtkActor2D.h"
#include"vtkImageShiftScale.h"
#include"vtkBMPReader.h"
#include"vtkMetaImageReader.h"
#include"vtkImageViewer2.h"
#include"vtkImageImport.h"
#include <vtkPolyDataReader.h>
#include <vtkLinearSubdivisionFilter.h>
#include <vtkLoopSubdivisionFilter.h>
#include <vtkButterflySubdivisionFilter.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkCamera.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkStructuredPointsReader.h>
#include <vtkFixedPointVolumeRayCastMapper.h>
#include <vtkColorTransferFunction.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkImageCast.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/range_image_visualizer.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/common/float_image_utils.h>
#include <pcl/range_image/range_image_planar.h>
#include <pcl/registration/icp.h>
#include <pcl/common/io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/io/vtk_lib_io.h>
#include<vtkInteractorStyleTrackballCamera.h>
#include "vtkPoints.h"
#include "vtkLight.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include "vtkDataSetMapper.h"
#include <vtkContourFilter.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkOutlineFilter.h>
#include<vtkProperty.h>
#include<vtkPolyDataNormals.h>
#include <vtkSurfaceReconstructionFilter.h>
int main(int argc, char** argv)
{
pcl::PointCloudpcl::PointXYZRGB::Ptr cloud_projected(new pcl::PointCloudpcl::PointXYZRGB);
//加载点云
if (pcl::io::loadPCDFile<pcl::PointXYZRGB>("d:/pointcloud/1.pcd", *cloud_projected) == -1)
{
PCL_ERROR("Couldn't read file test_pcd.pcd \n");
return (-1);
}
vtkPoints* points = vtkPoints::New();
vtkPolyData* polyData = vtkPolyData::New();
pcl::io::pointCloudTovtkPolyData(*cloud_projected, polyData);
vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper> ::New();
cylinderMapper->SetInputData(polyData);
vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor> ::New();
cylinderActor->SetMapper(cylinderMapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cylinderActor);
renderer->SetBackground(0,0,0);
vtkSmartPointer<vtkRenderWindow> renwin = vtkSmartPointer<vtkRenderWindow> ::New();
renwin->AddRenderer(renderer);
renwin->SetSize(300, 300);
renwin->Render();
renwin->SetWindowName("RenderCylinder-Lights");
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renwin);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(style);
//设置灯光
vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();
myLight->SetColor(1, 0, 0);
myLight->SetPosition(0,0,1);
myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight);
vtkSmartPointer<vtkLight> myLight1 = vtkSmartPointer<vtkLight>::New();
myLight1->SetColor(0, 0,1);
myLight1->SetPosition(0, 0, -1);
myLight1->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight1);
vtkSmartPointer<vtkCamera> mycamera = vtkSmartPointer<vtkCamera>::New();
mycamera->SetFocalPoint(0, 0, 0);
mycamera->SetPosition(-10, 0, 0);
mycamera->SetClippingRange(10.5, 11.5);
mycamera->ComputeViewPlaneNormal();
mycamera->SetViewUp(0, 1, 0);
renderer->SetActiveCamera(mycamera);
iren->Initialize();
iren->Start();
return (0);
}