OSG 渲染(3) 动态剖切的实现方法

在CAD工程软件里,很多时候需要动态剖切模型来查看模型截面情况。我们知道OpenGL 固定管线支持用户自定义剖面,且最多支持6个剖平面,OpenGL3.0 以后的版本虽然已经逐步废弃固定管线,但我们可以使用shader,并传递截平面方程参数给shader,使用discard 语句实现类似固定管线用户自定义截面的效果。


下面将介绍如何实现上图动态剖切且加盖的效果,也将说明存在哪些技术难点。

一般方法:

    原理:开启模版测试,并将模版缓存清零操作,然后禁用深度测试,禁用剔除,绘制整个场景,同时模版缓存中的值取反操作,最终在模版非零处填充颜色,就这么简单。

  • 存在的问题    

    该方法依赖于原实体闭合性,如果场景中有开放实体(也就是未封闭的实体),这种方法就没有用武之地了,得到的是错误结果。所以在场景渲染初始化模版缓冲区时,先要过滤掉自由曲面和开放实体。    

   这种方法虽然简单有效,但如果我们要求剖面用被剖对象颜色填充,而不是全部由一种颜色填充,这种方法就无能为力,因为它是与视口和观察方向相关的。

改进方法:

  • 观察方向无关的剖切

    先在剖面方向上使用正交投影使用RTT用上述方法生成截面纹理;

    将截面纹理应用到剖切平面上;

    问题?

    生成截面纹理时,深度测试如何配合剖面应用才能得到正确结果?

    你应该可以想得到,如果在shader中丢弃截面背面片元,深度测试设置为GL_GREATER,就可以得到正确结果。





  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值