我使用一些简单的代码在循环中渲染网格物体。在每次迭代的实践中,我将改变视点并保存渲染的图像。我把它减少到下面一个小的可编辑的例子:
int main(int argc, char **argv) {
vtkSmartPointer<vtkPLYReader> fileReader = vtkSmartPointer<vtkPLYReader>::New();
fileReader->SetFileName("benchvise_mesh.ply");
fileReader->Update();
vtkSmartPointer<vtkPolyData> polydata_ = fileReader->GetOutput();
vtkSmartPointer<vtkRenderWindow> render_win = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkActor> actor_view = vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
for (int i = 0; i < 100; i++) {
mapper->SetInput(polydata_);
mapper->Update();
cam->SetViewAngle(58);
cam->SetClippingRange(0.00001, 10000);
//Invert view Up
cam->SetViewUp(0, -1, 0);
cam->SetPosition(0, 0, -500);
cam->SetFocalPoint(0, 0, 1);
cam->Modified();
actor_view->SetMapper(mapper);
actor_view->Modified();
renderer->SetActiveCamera(cam);
renderer->AddActor(actor_view);
renderer->SetBackground(1.0, 1.0, 1.0);
renderer->Modified();
render_win->AddRenderer(renderer);
render_win->SetSize(640, 480);
//white
render_win->Modified();
render_win->Start();
render_win->Render();
render_win->Finalize();
}
}
问题是,当我运行时,我的任务栏上出现了许多vtkWindow图标,并最终导致电脑停止运行。看起来好像在每个循环上渲染窗口都保持活动状态。但是,当我点击图标时,窗口实际上不会出现。
是否有我遗漏的东西会在每次迭代时清理渲染窗口。
顺便说一下,我在Ubntu下运行vtk 5.8答案 0 :(得分:0)
你在那里做了几件“错误”的事情。删除所有错误的循环,最重要的是render_win->Start()
,在开始时进行初始化,并在完成对观看的理解修改后调用每个循环中的render_win->Render()
(调用映射器或摄像机SetPosition
和类似物影响您的视图而不重新连接,重新连接被调用Add????()
- 方法)。 Modified()
调用应该是隐式的,不需要手动调用。