VTK:旋转3D模型并捕获其深度图

时间:2017-12-02 08:48:12

标签: c++ vtk

目前,基于VTK ZBuffer示例,我迭代地旋转3D模型并每次捕获深度图。问题是虽然模型旋转,但输出图像包含所有第一个深度图。

int main(int argc, char *argv[]){

...variable declaration/initialization

//read off file
offReader->SetFileName(argv[1]);
offReader->Update(); 

int step = 30; std::string out;
for (int i = 0; i < 3; i++) { 
    mapper->NewInstance();
    actor->NewInstance();
    renWin->NewInstance();
    renderer->NewInstance();

    mapper->SetInputData(polyData);
    actor->SetMapper(mapper);

    out = std::to_string(i);

    actor->RotateZ(step*i);

    renWin->AddRenderer(renderer);

    renderer->AddActor(actor);
    renderer->SetBackground(1, 1, 1);
    renWin->Render(); 

    // Create Depth Map
    filter->NewInstance();
    scale->NewInstance();
    imageWriter->NewInstance();

    filter->SetInput(renWin);
    filter->SetMagnification(3);
    filter->SetInputBufferTypeToZBuffer();        //Extract z buffer value
    filter->Update();

    scale->SetOutputScalarTypeToUnsignedChar();     
    scale->SetInputConnection(filter->GetOutputPort());     
    scale->SetShift(0);
    scale->SetScale(-255);
    scale->Update();

    std::string out1 = out + "_depth.bmp";
    std::cout << " " << out1 << std::endl;

    // Write surface map as a .bmp image
    imageWriter->SetFileName(out1.c_str());
    imageWriter->SetInputConnection(scale->GetOutputPort());
    imageWriter->Update();
    imageWriter->Write();

    filter->RemoveAllInputs();
    scale->RemoveAllInputs();
    imageWriter->RemoveAllInputs();
    renderer->RemoveActor(actor);
    renWin->RemoveRenderer(renderer); 

    .... remaining script

} 

输出深度图全部相同0_depth.bmp, 1_depth.bmp & 2_depth.bmp

有没有人遇到同样的问题?如果是,那可能是一个潜在的解决方案。

1 个答案:

答案 0 :(得分:0)

通过在旋转中引入函数解决了问题。显然,这是一个可变内容更新问题,可以更直接的方式解决。