VTK:设置透明渲染器背景

VTK: setting transparent renderer background

我可以通过调用

来定义渲染器的背景颜色
renderer = vtk.vtkRenderer()
renderer.SetBackground(0,255,0)

[![在此处输入图片描述][1]][1]

我的问题:

是否可以设置背景的不透明度?

您可以在我的示例图像中看到我的问题(具有多个视口)。我可以通过简单地使用透明背景来摆脱这个 "cutting"...

提前致谢!

我终于找到了解决办法:

您可以为每个渲染器设置一个图层。默认为第 0 层(不透明)。大于第 0 层的所有内容都是透明的。但请记住,在第 0 层上至少设置一个带有 background-color 的空渲染器(无体积或对象)以避免难看的反射。

renderer.SetBackground(255,255,255)
renderer.SetLayer(0)

# transparency layer
renderer.SetLayer(1)
renderer.addVolume(....)

结果:

对于那些想在屏幕截图中使用透明度的人。

render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
render_window.SetAlphaBitPlanes(1)  # Enable usage of alpha channel
...
w2if = vtk.vtkWindowToImageFilter()
w2if.SetInput(render_win)
w2if.SetInputBufferTypeToRGBA()  # Also record the alpha (transparency) channel
...

更多详细信息在此 official vtk example


编辑:此外,如果上述方法不起作用(例如背景是透明的但演员 white/not 渲染正确),您可以尝试启用深度剥离。

在上面的代码片段之前你应该添加

# the renderer, as in the question
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(0,255,0)
renderer.SetBackgroundAlpha(0.2)  # add background opacity value
renderer.SetUseDepthPeeling(1)  # only works with current GPUs
renderer.SetOcclusionRatio(0.2)  # 0. is better, but much slower

您可能还需要增加最大剥离数(默认为 4)。检查 this VTK Wiki page for more details.

用于在 vtkFullScreenRenderWindow 函数上设置背景, 您可以使用 File 找到您理想的颜色。