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
誰も同じ問題が発生しましたか?はいの場合、潜在的な解決策になる可能性があります。
これで、俳優はローテーションコールを更新する必要がありましたか? –
私はactor、mapper、renWin、scale、filter、imageWriterを更新/リフレッシュしようとしました。うまく行かなかった。 明らかにもっと簡単な方法があります。 私はすべての回転を関数内に置き、関数内ではrenWinもレンダリングしました。関数呼び出し: WriteDepthMap(i、actor、renderer、renWin); – ionas