メッシュ モデルがあり、VTK を使用して、特定のカメラ位置 (x、y、z) からのビューをレンダリングしました。これを RGB 画像 (640x480) に保存できますが、各ピクセルがカメラからの深度の値を格納する深度マップも保存したいと考えています。
この例Zbuffer
に従って、レンダー ウィンドウで指定された値を使用してみました。問題は、範囲 [0,1] の値のみが格納されることです。代わりに、カメラからの各ピクセルの深度/距離を保存する合成距離画像を作成しようとしています。Kinect で生成された画像と同様に、メッシュ モデルの特定の視点からの画像を作成しようとしています。Zbufer
編集- いくつかのコードを追加する
私の現在のコード:
メッシュをロードする
string mesh_filename = "mesh.ply";
vtkSmartPointer<vtkPLYReader> mesh_reader = read_mesh_ply(mesh_filename);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(mesh_reader->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(640, 480);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
//Add the actors to the scene
renderer->AddActor(actor);
renderer->SetBackground(1, 1, 1);
カメラを作成してどこかに配置する
vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
renderer->SetActiveCamera(camera);
camera->SetPosition(0,0,650);
//Render and interact
renderWindow->Render();
z バッファから結果を取得する
double b = renderer->GetZ(320, 240);
この例では、これにより 0.999995 が得られます。値が [0,1] の間であるため、これを解釈する方法がわかりません。ご覧のとおり、カメラを z 軸上で 650 単位離れた位置に設定したため、このピクセルでの z 距離を想定しています (レンダリングされた RGB のオブジェクト上にあります) は 650 に近いはずです。