【可视化】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层,那么面模型就会覆盖显示下一层的体绘制。问题解决

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值