深入了解OpenGL——模板测试

自己总结:1个比较(参考值和mask的&操作结果  和  当前模版值和mask的&操作结果 的 比较)

  1个规则(比较成功则片段保留,失败则丢弃)

          2个函数(glStencilFunc,glStencilOp),

  6个参数(比较类型,参考值,掩码值,模版失败的模版值处理,模版成功深度失败,模版成功深度成功),

  


我们在用OpenGL绘图时往往想制作一些复合图形以及凹凸多边形,像五角星、大的矩形里再画一个小的矩形;另外有时还想做些镂空图或类似的效果。

这时我们可以开启模板测试功能来完成这些需求。
由于OpenGL的一个绘制流水线特征以及GPU着色特征,像对于大矩形里画小矩形这种不能通过先绘制大矩形,然后再在其中绘制小矩形的方式进行绘制,否则当此复合图形在做一些旋转时,我们会发现小矩形部分会有非常严重的抖动。


模板测试的一个基本的特性是:它基于在某个坐标位置的模板缓存值与一个参考值相比较的结果,有条件地废弃一个片断。这里要注意的是,这个判定是基于当前被测试的片断(而不是已在帧缓存的像素),并且当前片断的每个像素都会进行模板测试,并且如果某些像素测试失败的话,这些像素就会被废弃。
下面介绍一下如何开启模板测试。
对于Mac OS X下,对你的OpenGL视图的属性中选择模板缓存的位数即可,模板缓存只有8位这一个选项。在iOS的OpenGL ES下,则需要建立一个模板缓存,建立方法与建立深度缓存类似。
然后,我们在代码中用glEnable(GL_STENCIL_TEST);来开启模板测试。


图解:



下面谈谈模板测试是如何工作的。一开始,我们用glClear(GL_STENCIL_BUFFER_BIT);来清除模板缓存的值,使这些值均为0(默认设置,也无须修改)。当我们用类似glDrawArrays这些函数来绘制某个图形后,被绘制的图形先被光栅化,然后得到相应的片断。我们指定一个参考值,一个
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值