[vtk-developers] Volume won't show on Win7/Intel HD4600 with QVTKOpenGLWidget in 8.0.0.rc1
Elvis Stansvik
elvis.stansvik at orexplore.com
Tue May 23 05:10:54 EDT 2017
2017-05-23 11:04 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:
> Hi all,
>
> In porting to QVTKOpenGLWidget, I can't get volumes rendered using
> vtkGPUVolumeRayCastMapper to show up on Windows 7, Intel graphics (HD
> 4600). They show up fine on Linux. They also show up fine on Windows 7
> if using a plain VTK render window. I've tried turning off
> multisampling with setSamples(0) on the default QSurfaceFormat.
>
> The below test case illustrates the issue. See the attached
> screenshots from running "TestCase" (left) and "TestCase 1" (right).
> The former uses a plain render window while the latter uses the new
> QVTKOpenGLWidget. Notice how in the Windows 7 screenshot, the plain
> VTK rendering works fine, but the QVTKOpenGLWidget one is not showing
> the volume.
>
> Versions used:
>
> Kubuntu Linux 16.04
> VTK 8.0.0.rc1, OpenGL2
> Qt 5.5.1
>
> Windows 7
> VTK 8.0.0.rc1, OpenGL2
> Qt 5.6.2
I forgot to say: On the Windows 7 machine, it's an Intel HD4600, on
the Linux machine it's an Intel HD4400.
Elvis
>
> Any ideas what the problem might be?
>
> I can provide a standalone .zip distribution of my build of the test
> case if you want.
>
> Note that this issue is orthogonal to the alpha issue I reported and
> got solved in my other thread.
>
> Many thanks in advance,
> Elvis
>
>
> main.cpp:
>
> #include <algorithm>
>
> #include <vtkColorTransferFunction.h>
> #include <vtkGenericOpenGLRenderWindow.h>
> #include <vtkGPUVolumeRayCastMapper.h>
> #include <vtkImageData.h>
> #include <vtkNew.h>
> #include <vtkPiecewiseFunction.h>
> #include <vtkProperty.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkVolume.h>
> #include <vtkVolumeProperty.h>
>
> #include <QVTKOpenGLWidget.h>
>
> #include <QApplication>
>
> int main(int argc, char *argv[])
> {
> auto defaultFormat = QVTKOpenGLWidget::defaultFormat();
> defaultFormat.setSamples(0);
> QSurfaceFormat::setDefaultFormat(defaultFormat);
>
> QApplication app(argc, argv);
>
> // Set up volume rendering
> vtkNew<vtkColorTransferFunction> colorFunction;
> colorFunction->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
> colorFunction->AddRGBPoint(1.0, 0.0, 0.0, 0.0);
>
> vtkNew<vtkPiecewiseFunction> opacityFunction;
> opacityFunction->AddPoint(0.0, 0.0);
> opacityFunction->AddPoint(1.0, 1.0);
>
> vtkNew<vtkImageData> imageData;
> imageData->SetExtent(0, 200, 0, 200, 0, 200);
> imageData->AllocateScalars(VTK_FLOAT, 1);
> std::fill_n(static_cast<float *>(imageData->GetScalarPointer()),
> 8000000, 0.01);
>
> vtkNew<vtkGPUVolumeRayCastMapper> volumeMapper;
> volumeMapper->SetInputData(imageData.Get());
>
> vtkNew<vtkVolumeProperty> volumeProperty;
> volumeProperty->SetScalarOpacity(opacityFunction.Get());
> volumeProperty->SetColor(colorFunction.Get());
> volumeProperty->ShadeOff();
>
> vtkNew<vtkVolume> volume;
> volume->SetMapper(volumeMapper.Get());
> volume->SetProperty(volumeProperty.Get());
>
> vtkNew<vtkRenderer> renderer;
> renderer->AddVolume(volume.Get());
> renderer->SetBackground(1.0, 1.0, 1.0);
>
> if (argc > 1) {
> // Render with QVTKOpenGLWidget
> vtkNew<vtkGenericOpenGLRenderWindow> window;
> window->AddRenderer(renderer.Get());
>
> auto widget = new QVTKOpenGLWidget();
> widget->SetRenderWindow(window.Get());
> widget->show();
>
> return app.exec();
> } else {
> // Render with "plain" render window / interactor
> vtkNew<vtkRenderWindow> window;
> window->AddRenderer(renderer.Get());
>
> vtkNew<vtkRenderWindowInteractor> interactor;
> interactor->SetRenderWindow(window.Get());
> interactor->Start();
>
> return 0;
> }
> }
>
>
> CMakeLists.txt:
>
> cmake_minimum_required(VERSION 3.1)
>
> project(TestCase)
>
> find_package(VTK 8.0 COMPONENTS
> vtkCommonCore
> vtkCommonDataModel
> vtkCommonExecutionModel
> vtkCommonMath
> vtkFiltersSources
> vtkGUISupportQt
> vtkInteractionStyle
> vtkRenderingCore
> vtkRenderingOpenGL2
> vtkRenderingVolume
> vtkRenderingVolumeOpenGL2
> REQUIRED
> )
>
> find_package(Qt5Widgets REQUIRED)
>
> add_executable(TestCase main.cpp)
>
> target_link_libraries(TestCase PUBLIC
> vtkCommonCore
> vtkCommonDataModel
> vtkCommonExecutionModel
> vtkCommonMath
> vtkFiltersSources
> vtkGUISupportQt
> vtkInteractionStyle
> vtkRenderingCore
> vtkRenderingOpenGL2
> vtkRenderingVolume
> vtkRenderingVolumeOpenGL2
> Qt5::Widgets
> )
>
> target_include_directories(TestCase PUBLIC
> ${VTK_INCLUDE_DIRS}
> )
>
> target_compile_definitions(TestCase PUBLIC
> ${VTK_DEFINITIONS}
> )
>
> set_target_properties(TestCase PROPERTIES
> CXX_STANDARD 14
> CXX_STANDARD_REQUIRED ON
> )
More information about the vtk-developers
mailing list