2013-07-17 4 views
2

Я пытаюсь следовать примеру здесь: http://www.vtk.org/Wiki/VTK/Examples/Cxx/Utilities/ZBuffer для визуализации zbuffer. Это отлично работает, пока я не попытаюсь изменить точку обзора камеры.VTK: визуализировать буфер глубины

Мой код выглядит следующим образом: что то же самое, как, например, для бита выделены жирным шрифтом, кроме:

// This demo creates depth map for a polydata instance by extracting 
// exact ZBuffer values. 
#include <vtkSmartPointer.h> 

#include <vtkPolyDataMapper.h> 
#include <vtkActor.h> 
#include <vtkRenderer.h> 
#include <vtkRenderWindow.h> 
#include <vtkRenderWindowInteractor.h> 
#include <vtkBMPWriter.h> 
#include <vtkWindowToImageFilter.h> 
#include <vtkImageShiftScale.h> 

int main(int argc, char *argv[]) { 
     vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 
     vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); 
     vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); 
     vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New(); 
     vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); 

     vtkSmartPointer<vtkPLYReader> fileReader = vtkSmartPointer<vtkPLYReader>::New(); 
     vtkSmartPointer<vtkWindowToImageFilter> filter = vtkSmartPointer<vtkWindowToImageFilter>::New(); 
     vtkSmartPointer<vtkBMPWriter> imageWriter = vtkSmartPointer<vtkBMPWriter>::New(); 
     vtkSmartPointer<vtkImageShiftScale> scale = vtkSmartPointer<vtkImageShiftScale>::New(); 

     // Read .vtp file 
     fileReader->SetFileName("mesh.ply"); 

     //Build visualization enviroment 
     mapper->SetInputConnection(fileReader->GetOutputPort()); 
     actor->SetMapper(mapper); 
     renderer->AddActor(actor); 

     //change camera viewpoint 
     vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New(); 
     camera->SetPosition(0, 0, 650); 
     renderer->SetActiveCamera(camera); 


     renWin->AddRenderer(renderer); 
     interactor->SetRenderWindow(renWin); 
     renWin->Render(); 

     // Create Depth Map 
     filter->SetInput(renWin); 
     filter->SetMagnification(1); 
     filter->SetInputBufferTypeToZBuffer();  //Extract z buffer value 

     scale->SetOutputScalarTypeToUnsignedChar(); 
     scale->SetInputConnection(filter->GetOutputPort()); 
     scale->SetShift(0); 
     scale->SetScale(-255); 

     // Write depth map as a .bmp image 
     imageWriter->SetFileName("out2.bmp"); 
     imageWriter->SetInputConnection(scale->GetOutputPort()); 
     imageWriter->Write(); 

     return EXIT_SUCCESS; 
} 

Теперь вся визуализация глубины полностью черного цвета. Тем не менее, на этой позиции камеры сетка выглядит просто прекрасно, поэтому я не думаю, что это связано с тем, что камера находится слишком далеко. Любые идеи, что я делаю неправильно?

ответ

1

Возможно, это связано с тем, что ваш дальний самолет находится рядом с объектом, который визуализируется. Попробуйте установить после создания камеры лучшую плоскость клипа, например:

camera->SetClippingRange(640, 1000); 
Смежные вопросы