如何自动关闭VTKRenderWindow

时间:2013-11-26 14:06:15

标签: c++ opengl vtk

我使用一些简单的代码在循环中渲染网格物体。在每次迭代的实践中,我将改变视点并保存渲染的图像。我把它减少到下面一个小的可编辑的例子:

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

1 个答案:

答案 0 :(得分:0)

你在那里做了几件“错误”的事情。删除所有错误的循环,最重要的是render_win->Start(),在开始时进行初始化,并在完成对观看的理解修改后调用每个循环中的render_win->Render()(调用映射器或摄像机SetPosition和类似物影响您的视图而不重新连接,重新连接被调用Add????() - 方法)。 Modified()调用应该是隐式的,不需要手动调用。