# Render window output is black when I use vtkGPUVolumeRayCastMapper python

**URL:** https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938
**Category:** Support
**Created:** [October 16, 2019, 4:57pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938 "2019-10-16T16:57:37Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 4:57pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/1 "2019-10-16T16:57:37Z")

</div>

Hi  
I use vtkGPUVolumeRayCastMapper to render a DICOM volume. The output window is black but when I use vtkFixedPointVolumeRayCastMapper it works and volume will be displayed.  
I also use QVTKRenderWindowInteractor widget to display it ( pyqt5 ).  
I want to use GPUVolumeRayCast or OpenGLGPUVolumeRayCast mapper for rendering.  
would you please help me with that.🙏

Here is my code :

```
    self.ren = vtk.vtkRenderer()
    self.vtkWidget = QVTKRenderWindowInteractor()

    self.reader = vtk.vtkDICOMImageReader()
    self.reader.SetDirectoryName(folder)
    self.reader.Update()

    interactor = self.vtkWidget.GetRenderWindow().GetInteractor()

    volume = vtk.vtkVolume()
    # Ray cast function know how to render the data
    # volumeMapper = vtk.vtkOpenGLGPUVolumeRayCastMapper()
    volumeMapper = vtk.vtkGPUVolumeRayCastMapper()

    volumeMapper.SetInputConnection(self.reader.GetOutputPort())
    volumeMapper.SetBlendModeToMaximumIntensity()

    # 2. Filter --&gt; Setting the color mapper, Opacity for VolumeProperty
    s0, sf = self.reader.GetOutput().GetScalarRange()
    colorFunc = vtk.vtkColorTransferFunction()
    colorFunc.AddRGBPoint(s0, 1, 0, 0)
    colorFunc.AddRGBPoint(sf, 0, 1, 0)

    volumeProperty = vtk.vtkVolumeProperty()

    # The opacity transfer function is used to control the opacity
    # of different tissue types.
    # Create transfer mapping scalar value to opacity
    volumeScalarOpacity = vtk.vtkPiecewiseFunction()
    volumeScalarOpacity.AddPoint(0, 0.00)
    volumeScalarOpacity.AddPoint(500, 0.55)
    volumeScalarOpacity.AddPoint(800, 0.75)
    volumeScalarOpacity.AddPoint(1000, 0.75)
    volumeScalarOpacity.AddPoint(1150, 0.85)

    # set the color for volumes
    volumeProperty.SetColor(colorFunc)
    # To add black as background of Volume
    volumeProperty.SetScalarOpacity(volumeScalarOpacity)
    volumeProperty.SetInterpolationTypeToLinear()
    volumeProperty.SetIndependentComponents(2)

    volumeProperty.ShadeOn()
    volumeProperty.SetAmbient(0.4)
    volumeProperty.SetDiffuse(0.6)
    volumeProperty.SetSpecular(0.2)

    volume.SetMapper(volumeMapper)

    self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)

    self.ren.SetBackground(0., 0, 0)

    self.ren.AddActor(volume)
    # interactor.Initialize()
    self.ren.ResetCamera()
    self.vtkWidget.GetRenderWindow().Render()

    interactor.Start()
```

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 16, 2019, 4:59pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/2 "2019-10-16T16:59:34Z")

</div>

Probably your hardware does not meet GPU volume raycast mapper minimum requirements. What CPU and graphics card do you have?

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 5:04pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/3 "2019-10-16T17:04:12Z")

</div>

I can display the volume with “vtkGPUVolumeRayCastMapper” in vtk’s own vtkRenderWindow and vtkRenderWindowInteractor .it means my hardware support it but I cannot display it in “QVTKRenderWindowInteractor” of qt widget.

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 5:09pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/4 "2019-10-16T17:09:06Z")

</div>

Core i7 NVIDIA GTX

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 16, 2019, 5:21pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/5 "2019-10-16T17:21:04Z")

</div>

Which CPU generation? Which NVidia GTX model? What operating system?

Default Qt surface format of VTK needs modifications depending on your hardware and operating system. See for example how it is set up in 3D Slicer: [Intel UHD 620 + VTK + Qt bug with new drivers on windows](https://discourse.vtk.org/t/intel-uhd-620-vtk-qt-bug-with-new-drivers-on-windows/1694/2)

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 6:43pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/7 "2019-10-16T18:43:04Z")

</div>

Here is my HW detail :  
Intel® Core™ i7-6700HQ CPU @ 2.60GHz × 8  
Intel® HD Graphics 530 (Skylake GT2) 64bit

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 16, 2019, 7:27pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/8 "2019-10-16T19:27:11Z")

</div>

CPU chipset is recent enough. Intel graphics cards require using `QSurfaceFormat::CompatibilityProfile` when you set up your surface format.

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 7:36pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/10 "2019-10-16T19:36:57Z")

</div>

could you please help me with that?  
I don’t know really what should I do.  
as I understand I have to add “QSurfaceFormat.setDefaultFormat(QSurfaceFormat.CompatibilityProfile)” in to my code but ,I got this error :  
TypeError: setDefaultFormat(QSurfaceFormat): argument 1 has unexpected type ‘OpenGLContextProfile’

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 16, 2019, 7:52pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/11 "2019-10-16T19:52:57Z")

</div>

I also add this " QSurfaceFormat.defaultFormat().setProfile(QSurfaceFormat.CompatibilityProfile)" and run with out error but nothing changed and is still black scene.

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 17, 2019, 1:23pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/12 "2019-10-17T13:23:49Z")

</div>

Do views in 3D Slicer show volume rendering correctly on your computer? If they do, then you may consider using CTK library’s Qt VTK render window ([ctkVTKRenderView](http://www.commontk.org/docs/html/classctkVTKRenderView.html)). If you use it from Python then you can use the Python interpreter embedded in 3D Slicer (which by the way provides many other features for visualizing DICOM volumes).

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 18, 2019, 1:31pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/14 "2019-10-18T13:31:42Z")

</div>

Is there another solution without using ctk?  
I want to render with vtk library.  
one thing is better to know is when i execute “volumeMapper.IsRenderSupported(self.vtkWidget.GetRenderWindow(), volumeProperty)” command the output is 1 means it supports the gpu ray cast mapper.

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 18, 2019, 1:52pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/15 "2019-10-18T13:52:48Z")

</div>

> [@kimia.af1998](#):
>
> Is there another solution without using ctk?  
> I want to render with vtk library.

CTK just adds many features to VTK (DICOM browser, GUI widgets for medical image visualization, helper classes for Qt-VTK integration, etc) does not replace VTK. So, if rendering works in 3D Slicer then you can surely make things work by using CTK only or even just using VTK. You just need to figure out what pieces you need to port from there. Or, you can take ideas from how Paraview creates its rendering widgets.

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 18, 2019, 4:59pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/16 "2019-10-18T16:59:42Z")

</div>

beside ctk I have to use slicer library?

---

<div class="post-metadata">

### Author: ![lassoan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/lassoan/32/50_2.png) [@lassoan](https://discourse.vtk.org/u/lassoan)
#### Post date: [October 18, 2019, 5:15pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/17 "2019-10-18T17:15:18Z")

</div>

CTK does not use or require 3D Slicer.

Instead, a number of image computing applications, such as 3D Slicer and MITK, use CTK.

---

<div class="post-metadata">

### Author: ![kimia.af1998](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/k/7ab992/32.png) [@kimia.af1998](https://discourse.vtk.org/u/kimia.af1998)
#### Post date: [October 18, 2019, 7:06pm UTC](https://discourse.vtk.org/t/render-window-output-is-black-when-i-use-vtkgpuvolumeraycastmapper-python/1938/18 "2019-10-18T19:06:28Z")

</div>

My problem just solved by set QVTKRWIBase to “QGLWidget” :

```auto
vtk.qt.QVTKRWIBase = "QGLWidget"

```
