У меня есть модель сетки, и, используя VTK, я отрисовал ее с заданной позиции камеры (x, y, z). Я могу сохранить это в изображение RGB (640×480), но я также хочу сохранить карту глубины, где каждый пиксель хранит значение глубины от камеры.
Я пытался использовать Zbuffer
значения, заданные окном рендеринга, следуя этот пример. Проблема в том, что Zbufer
хранит только значения в диапазоне [0,1]. Вместо этого я пытаюсь создать синтетическое изображение диапазона, где я храню глубину / расстояние каждого пикселя от камеры. По аналогии с изображением, созданным Kinect, я пытаюсь создать его с определенной точки зрения модели меша.
РЕДАКТИРОВАТЬ — добавив немного кода
Мой текущий код:
Загрузите сетку
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], я не знаю, как это интерпретировать, как вы можете видеть, я установил камеру на расстоянии 650 единиц по оси Z, поэтому я предполагаю расстояние z в этом пикселе (что находится на объекте в визуализированном RGB) должно быть около 650.
Задача ещё не решена.
Других решений пока нет …