2017-12-02 9 views
0

現在、VTK ZBufferの例に基づいて、3Dモデルを繰り返し回転させ、奥行きマップを毎回キャプチャします。問題は、モデルが回転するにもかかわらず、出力画像にすべての第1の奥行きマップが含まれていることです。VTK: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

誰も同じ問題が発生しましたか?はいの場合、潜在的な解決策になる可能性があります。

答えて

0

回転内で関数を導入することによって解決された問題が発生しました。どうやら、それはより直接的な方法で解決できる、変化するコンテンツ更新の問題の問題であった。

+0

これで、俳優はローテーションコールを更新する必要がありましたか? –

+0

私はactor、mapper、renWin、scale、filter、imageWriterを更新/リフレッシュしようとしました。うまく行かなかった。 明らかにもっと簡単な方法があります。 私はすべての回転を関数内に置き、関数内ではrenWinもレンダリングしました。関数呼び出し: WriteDepthMap(i、actor、renderer、renWin); – ionas

関連する問題