gpt4 book ai didi

c++ - VTK:可视化深度缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:47 26 4
gpt4 key购买 nike

我正在尝试按照此处的示例进行操作:http://www.vtk.org/Wiki/VTK/Examples/Cxx/Utilities/ZBuffer可视化 zbuffer。在我尝试更改相机视点之前,这一切正常。

我的代码如下:除粗体部分外与示例相同:

// 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;
}

现在整个深度可视化完全是黑色的。然而,在这个相机位置,网格渲染得很好,所以我不认为这是因为相机距离太远。知道我做错了什么吗?

最佳答案

这可能是因为您的远平面靠近正在渲染的对象。尝试在相机创建后放置一个更好的裁剪平面,例如:

camera->SetClippingRange(640, 1000);

关于c++ - VTK:可视化深度缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com