При доступе к zbuffer в VTK чёрное изображение

В настоящее время я пишу приложение на C++, которое будет читать в файле.obj и отображать буфер z как изображение глубины в изображение.png.

Тем не менее, изображение черное. Я попробовал это на машине с GTX 1050 и GTX 1080, оба раза полученное изображение, и окно рендеринга черное.

Я использую MinGW для компиляции, а также попробовал его с компилятором MSCV без удачи.

Код выглядит следующим образом:

#include <QtCore>
#include <QtMath>
#include <vtkSmartPointer.h>

#include <vtkCamera.h>
#include <vtkOBJReader.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkBMPWriter.h>
#include <vtkPNGWriter.h>
#include <vtkWindowToImageFilter.h>
#include <vtkImageShiftScale.h>
#include <vtkTransformFilter.h>
#include <vtkTransform.h>
#include <vtkWindowLevelLookupTable.h>
#include <vtkImageMapToColors.h>
#include <vtkImageHistogramStatistics.h>
#include <vtkImageExport.h>
#include <vtkImageCast.h>


int main(int argc, char* argv[])
{
    QCoreApplication app(argc, argv);
    QCoreApplication::setApplicationName("ModelToDepthGenerator");
    QCoreApplication::setApplicationVersion("1.0");
    double nearClippingPlane = 1;
    double farClippingPlane = 5000;
    double clippingDistance = farClippingPlane-nearClippingPlane;
    // Read file
    vtkSmartPointer<vtkOBJReader> fileReader = vtkSmartPointer<vtkOBJReader>::New();
    fileReader->SetFileName("..\\modeltodepthgenerator\\ManMesh.obj");


    //Build visualization enviroment
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(fileReader->GetOutputPort());
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
    transform->Identity();
    transform->Translate(0,0,2500);
    actor->SetUserTransform(transform);
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);


    //change camera viewpoint
    vtkSmartPointer<vtkCamera> camera = vtkSmartPointer<vtkCamera>::New();
    camera->SetPosition(0, 0, 0);
    camera->SetFocalPoint(0, 0, nearClippingPlane);
    camera->SetViewUp(0, 1, 0);
    camera->SetClippingRange(nearClippingPlane, farClippingPlane);
    renderer->SetActiveCamera(camera);
    vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
    renWin->SetSize(512, 424);
    renWin->AddRenderer(renderer);
    renWin->Render();
    renWin->WaitForCompletion();


    // Create Depth Map
    vtkSmartPointer<vtkWindowToImageFilter> zFilter = vtkSmartPointer<vtkWindowToImageFilter>::New();
    zFilter->SetInput(renWin);
    zFilter->SetMagnification(1);
    zFilter->SetShouldRerender(1);
    zFilter->SetInputBufferTypeToZBuffer();


    vtkSmartPointer<vtkImageShiftScale> scale = vtkSmartPointer<vtkImageShiftScale>::New();
    scale->SetOutputScalarTypeToUnsignedShort();
    scale->SetInputConnection(zFilter->GetOutputPort());
    scale->SetShift(nearClippingPlane/clippingDistance);
    scale->SetScale(clippingDistance);


    // Write depth map as a image
    vtkSmartPointer<vtkPNGWriter> imageWriter = vtkSmartPointer<vtkPNGWriter>::New();
    imageWriter->SetFileName("outdepth.png");
    imageWriter->SetInputConnection(scale->GetOutputPort());
    imageWriter->Write();

    vtkSmartPointer<vtkWindowToImageFilter> rgbFilter = vtkSmartPointer<vtkWindowToImageFilter>::New();
    rgbFilter->SetInput(renWin);
    rgbFilter->SetMagnification(1);
    rgbFilter->SetShouldRerender(1);
    rgbFilter->SetInputBufferTypeToRGBA();

    //Write out render
    vtkSmartPointer<vtkPNGWriter> imageRenderWriter = vtkSmartPointer<vtkPNGWriter>::New();
    imageRenderWriter->SetFileName("outrender.png");
    imageRenderWriter->SetInputConnection(rgbFilter->GetOutputPort());
    imageRenderWriter->Write();

    return 0;
}

Файл.obj можно загрузить с https://free3d.com/download-page.php?url=male-base-mesh-6682.

Объект находится между диапазонами отсечения объекта, поэтому я не знаю, что вызывает эту ошибку.

0 ответов

Другие вопросы по тегам