OpenGL--模板检测使用

Stencil Buffer

模板缓冲
模板缓冲先清空模板缓冲设置所有片段的模板值为0,然后开启矩形片段用1填充。场景中的模板值为1的那些片段才会被渲染(其他的都被丢弃)。

模板函数

void glStencilFunc(GLenum func, GLint ref, GLuint mask)函数有三个参数:

func:设置模板测试操作。这个测试操作应用到已经储存的模板值和glStencilFunc的ref值上,可用的选项是:GL_NEVER、GL_LEQUAL、GL_GREATER、GL_GEQUAL、GL_EQUAL、GL_NOTEQUAL、GL_ALWAYS。它们的语义和深度缓冲的相似。
ref:指定模板测试的引用值。模板缓冲的内容会与这个值对比。
mask:指定一个遮罩,在模板测试对比引用值和储存的模板值前,对它们进行按位与(and)操作,初始设置为1。


void glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass)函数包含三个选项,我们可以指定每个选项的动作:

sfail: 如果模板测试失败将采取的动作。
dpfail: 如果模板测试通过,但是深度测试失败时采取的动作。
dppass: 如果深度测试和模板测试都通过,将采取的动作。
每个选项都可以使用下列任何一个动作。

操作描述
GL_KEEP保持现有的模板值
GL_ZERO将模板值置为0
GL_REPLACE将模板值设置为用glStencilFunc函数设置的ref值
GL_INCR如果模板值不是最大值就将模板值+1
GL_INCR_WRAP与GL_INCR一样将模板值+1,如果模板值已经是最大值则设为0
GL_DECR如果模板值不是最小值就将模板值-1
GL_DECR_WRAP与GL_DECR一样将模板值-1,如果模板值已经是最小值则设为最大值
GL_INVERTBitwise inverts the current stencil buffer value.

物体轮廓

在绘制物体前,把模板方程设置为GL_ALWAYS,用1更新物体将被渲染的片段。
渲染物体,写入模板缓冲。
关闭模板写入和深度测试。
每个物体放大一点点。
使用一个不同的片段着色器用来输出一个纯颜色。
再次绘制物体,但只是当它们的片段的模板值不为1时才进行。
开启模板写入和深度测试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值