kdadgd 2022-03-22 20:35 采纳率: 0%
浏览 87

vtk加载点云,通过vtkLight设置灯,但是灯不起作用

我用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);

}

  • 写回答

3条回答 默认 最新

  • 大米粥哥哥 2022-03-23 00:53
    关注

    不太明白 可以尝试一下:
    1.灯光调节为场景灯 聚光灯试试有没用?
    2.把添加灯光的代码往前放?

    评论

报告相同问题?

问题事件

  • 修改了问题 3月23日
  • 修改了问题 3月23日
  • 修改了问题 3月23日
  • 修改了问题 3月23日
  • 展开全部

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?