learnOpenGL 4.2 模板测试

本文详细介绍了OpenGL中的模板测试,一种不同于深度测试的自由测试方式。通过启用模板测试,设置测试模式、参考值和掩码,可以实现特定效果。文章以创建物体边框为例,演示了如何开启和配置模板测试,以及如何通过调整模板值的读写行为来实现边框的绘制。最后,代码示例展示了如何在地面和箱子的场景中利用模板测试生成边框,强调了操作的顺序和注意事项。
摘要由CSDN通过智能技术生成

除了深度测试,OpenGL还有一种较为自由的测试,称为模板测试stencil

模板函数

首先,和深度测试一样,我们要先启用它,同时需要在渲染循环中清除它的缓存

glEnable(GL_STENCIL_TEST);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

除此以外,我们还可以使用以下函数开启和禁用模板值的写入

glStencilMask(0xFF); // 每一位写入模板缓冲时都保持原样
glStencilMask(0x00); // 每一位在写入模板缓冲时都会变成0(禁用写入)

深度测试默认取深度浅的,因为这符合我们的常识。模板测试中,哪些值能通过,必须通过函数设定好。

举例如下,第一个参数是测试模式,可用的选项有:GL_NEVER、GL_LESS、GL_LEQUAL、GL_GREATER、GL_GEQUAL、GL_EQUAL、GL_NOTEQUAL和GL_ALWAYS。它们的语义和深度缓冲的函数类似。

第二个参数是参考值。用来进行对比。

第三个参数是一个掩码,它将会与参考值和储存的模板值在测试比较它们之前进行与(AND)运算。初始情况下所有位都为1。

glStencilFunc(GL_EQUAL, 1, 0xFF)

以上这个函数的意义就是告诉OpenGL,只要一个片段的模板值等于(GL_EQUAL)参考值1,片段将会通过测试并被绘制,否则会被丢弃。


除了怎么测试,我们还要设置如何更改模板的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值