在VTK中设置相机和截头台参数

Setting camera and frustum parameters in VTK

本文关键字:参数 相机 VTK 设置      更新时间:2023-10-16

我正在VTK中渲染网格模型,如下所示:

string mesh_filename = "mesh.ply";
vtkSmartPointer<vtkPLYReader> mesh_reader = read_mesh_ply(mesh_filename);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(mesh_reader->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(640, 480);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
//Add the actors to the scene
renderer->AddActor(actor);
renderer->SetBackground(1, 1, 1);

我正试图通过呼叫来设置相机

vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
renderer->SetActiveCamera(camera);
camera->SetPosition(0, 650, 0);

然后通过调用渲染场景

renderWindow->Render();
renderWindowInteractor->Start();

问题是,在这种透视投影下,模型并没有在这个视点上显示出来。我可以通过调用来获取和设置截头体的远近值

double near, far;
camera->GetClippingRange(near, far);
near = 0.001;
far = 1000000;
camera->GetClippingRange(near, far);

但模型仍然没有显示出来。我需要更改顶部、底部、左侧和右侧吗?如果是,我该怎么做?

编辑:

我已经设置了相机的焦点、视角和位置,并使剪辑范围巨大,仍然看不到物体:

camera->SetFocalPoint(0,0,0);
camera->SetViewUp(0,1,0);
camera->SetPosition(0,650,0);
renderer->ResetCameraClippingRange(-10000,100000,-100000,100000,100000,0.0001);

相机的位置由其焦点、位置和上方向向量定义。要查看模型,您需要将焦点放在模型附近,以便相机观察它。如果其他一切都正常,则相机可能只是指向错误的方向。

您可以使用vtkCamera方法SetFocalPoint的过载来设置相机焦点。

您可能还想尝试vtkRenderer方法ResetCamera(),该方法将修改相机以查看所有可见的演员。