【可视化】VTK的图层结构与置顶显示

  我在折腾VTK之前,使用OpenGL进行体绘制。为了让面模型始终显示,而不被体绘制模型遮挡,我用的策略是:取消z-buffer,不启用深度功能,先绘制体模型,再绘制面模型,这样面模型始终覆盖显示体模型。
  相比OpenGL,VTK能更好地更方便地绘制复杂模型,有助于我扩展可视化功能。我用VTK遇到的一个问题是:面模型始终埋没在体绘制模型中,绘制效果类似于Blend模式。虽然这样子是符合客观真实的绘制结果,但是我就是需要优先显示面模型。如果VTK断然取消深度功能,那么会出现很诡异的绘制结果。
  为了实现我想要的功能,我琢磨了VTK的绘制层次。在VTK-QT版本中,VTK顶层是qvtkwidget类,然后内部包含一个vtkRenderWindow,vtkRenderWindow需要添加vtkRenderer来控制实际的绘制渲染工作。所有需要绘制的对象数据和属性都放在vtkActor和其同一级别的衍生对象里面,然给赋给vtkRenderer绘制;vtkCamera赋给vtkRenderer,用于用户交互。
  一个vtkRenderWindow可以有多个vtkRenderer是问题的突破口。大部分例子vtkRenderWindow只添加了一个vtkRenderer。我看到添加vtkRenderer的函数前缀是add,而不是set,这说明我可以添加控制多个vtkRenderer。既然能够添加多个vtkRenderer,那么vtkRenderWindow应该有个管理机制,我摸索出了解决方案:
  
(c++)
volumeRenderer_->SetLayer(0);
tagRenderer_->SetLayer(1);
GetRenderWindow()->SetNumberOfLayers(2);
GetRenderWindow()->AddRenderer(tagRenderer_);
GetRenderWindow()->AddRenderer(volumeRenderer_);

  绘制体绘制的vtkRenderer在第0层,绘制面模型的在第1层,那么面模型就会覆盖显示下一层的体绘制。问题解决

你可能感兴趣的:(C++,图像处理)