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
누구에게도 동일한 문제가 발생 했습니까? 그렇다면 잠재적 해결책 일 수 있습니다.
그래서 배우가 로테이션 호출을 업데이트해야합니까? –
나는 actor, mapper, renWin, scale, filter 및 imageWriter를 업데이트/새로 고침하려고 시도했다. 그것은 작동하지 않았다. 분명히 더 간단한 방법이 있습니다. 모든 회전을 함수 안에 배치하고 함수 내에서 renWin을 렌더링했습니다. 함수 호출 : WriteDepthMap (i, actor, renderer, renWin); – ionas