2017-12-02 45 views
0

현재 VTK Z 버퍼 예제를 기반으로 3D 모델을 반복적으로 회전시키고 깊이 맵을 캡처합니다. 문제는 모델이 회전해도 출력 이미지에 모든 첫 번째 깊이지도가 포함되어 있다는 것입니다.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