关于模板测试几个问题

1.模板测试的直接结果是什么?

  答:通过模板测试的像素会进入到下一步的深度测试,以期被绘制到color buffer上,没有通过的话,直接丢掉它。

2.stencil buffer的值如何更新?

  答:1.glClearStencil(指定值); 重置stencil buffer里的值为指定值。
    2.glClear(GL_STENCIL_BUFFER_BIT); 重置stencil buffer里的值为0.
       3.通过glStencilOp来指定测试(模板测试或深度测试)通过或未通过时,如何修改stencil buffer里的值,有这些修改方式
            :GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT。
      注意有些修改方式的操作数只涉及stencil buffer里的stencil值。而有些涉及到调用方法glStencilFunc时传入的第2个参数:参考值。
           ps: glStencilFunc(比较条件,参考值,比较用掩码)。这个函数指定了模板测试如何进行。先使用一个【比较用掩码】(comparison mask)与【模板缓冲区中的值】进按位与运算,再与【参考值】通过【比较条件】进行比较,满足了条件,就说通过了测试。(你可以查阅glStencilOp的资料,来了解测试结果出来后的后续)。

3.glStencilMask有什么作用?
  答:(1)glStencilMask(0x00)可以关闭stencil buffer的写入,这样就算开启了模板测试(glEnable(GL_STENCIL_TEST),测试结果也不会影响stencil buffer里已有的模板值。
      (2)glStencilMask(0xff)开启stencil buffer的写入,这时候可以往里更新模板数据。
    比如绘制某些物体时,来让物体对应的屏幕像素对应的stencil buffer某些位置的模板值变为1:
      glStencilFunc(GL_ALWAYS,1,0xff);
      glStencilOp(GL_KEEP,GL_KEEP,GL_REPLACE);
      drawAThing();
        ps:记得开启模板测试和模板缓冲区写入。

转载于:https://www.cnblogs.com/pixs-union/p/8185132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值