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

标签 c++ opengl graphics rendering vtk

我尝试按照这里的示例: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/

相关文章:

c++ - 在 CMake 项目中解耦应用程序和库

c - 从opengl中的glRotatef()获得旋转矩阵

c++ - Blit 队列优化算法

c++ - 如何为我的自定义 C++ 类实现复制构造函数

c# - 在 Windows CE 的托管 C# 代码中加载 native DLL 作为调试模块

c++ - 关于函数调用中的异常安全

OpenGL如何从平截头体对齐向量计算世界空间坐标?

c++ - GLSL - 无法访问多个灯光的 SSBO 数组的第二个索引

delphi - 简单的 Delphi 3d 函数

c++ - 在没有桌面环境 C++ 的情况下绘制图形?