У меня есть сетчатая модель, и, используя VTK, отобрал ее из данного положения камеры (x, y, z). Я могу сохранить это на изображение RGB (640x480), но я также хочу сохранить карту глубины, где каждый пиксель хранит значение глубины от камеры. < /p>
Я пытался использовать значения zbuffer < /code>, заданные окном рендеринга, следуя этому примеру. Проблема заключается в том, что Zbufer сохраняет только значения в диапазоне [0,1]. Вместо этого я пытаюсь создать изображение синтетического диапазона, где я храню глубину/расстояние каждого пикселя от камеры. Аналогично изображению, создаваемому Kinect, я пытаюсь создать один с определенной точки зрения модели сетки.string mesh_filename = "mesh.ply";
vtkSmartPointer mesh_reader = read_mesh_ply(mesh_filename);
vtkSmartPointer mapper = vtkSmartPointer::New();
mapper->SetInputConnection(mesh_reader->GetOutputPort());
vtkSmartPointer actor = vtkSmartPointer::New();
actor->SetMapper(mapper);
vtkSmartPointer renderer = vtkSmartPointer::New();
vtkSmartPointer renderWindow = vtkSmartPointer::New();
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(640, 480);
vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
//Add the actors to the scene
renderer->AddActor(actor);
renderer->SetBackground(1, 1, 1);
< /code>
Создайте камеру и поместите ее где -нибудь < /strong> < /p>
vtkSmartPointer camera = vtkSmartPointer::New();
renderer->SetActiveCamera(camera);
camera->SetPosition(0,0,650);
//Render and interact
renderWindow->Render();
< /code>
получить результат из z -буфера < /strong> < /p>
double b = renderer->GetZ(320, 240);
< /code>
В этом примере это дает 0,999995. Поскольку значения находятся между [0,1], я не знаю, как это интерпретировать, так как вы видите, что я установил камеру на 650 единиц на оси Z, поэтому я предполагаю, что Z-расстояние в этом пикселе (который находится на объекте в рендерированном RGB) должно быть близко к 650.
Подробнее здесь: https://stackoverflow.com/questions/176 ... each-pixel