Derzeit, basierend auf dem Beispiel VTK ZBuffer, rotiere ich iterativ das 3D-Modell und erfasse jedes Mal die Tiefenkarte. Das Problem besteht darin, dass die Ausgabebilder zwar das Modell rotieren, jedoch die gesamte erste Tiefenkarte enthalten.VTK: ein 3D-Modell drehen und seine Tiefenkarte erfassen
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
}
Die Ausgangstiefenkarten sind alle identisch . 0_depth.bmp, 1_depth.bmp & 2_depth.bmp
Hat jemand das gleiche Problem festgestellt? Wenn ja, was könnte eine mögliche Lösung sein?
musste der Akteur nach dem Drehanruf aktualisiert werden? –
Ich habe versucht, Actor, Mapper, RenWin, Scale, Filter und ImageWriter zu aktualisieren/zu aktualisieren. Es hat nicht funktioniert. Offensichtlich gibt es einen direkteren Weg. Ich habe alle Rotation innerhalb einer Funktion platziert und auch die renWin innerhalb der Funktion gerendert. Der Funktionsaufruf: WriteDepthMap (i, actor, renderer, renWin); – ionas