蒙板缓存和蒙板测试

当你使用glEnable(GL_STENCIL_TEST)启用蒙板测试之后,蒙板函数用于确定一个颜色片段是应该丢弃还是保留(被绘制)。蒙板缓存区中的值与参考值ref进行比较,比较标准是func所指定的比较函数。参考值和蒙板缓存区的值都可以与掩码进行为AND操作。蒙板测试的结果还导致蒙板缓存区根据glStencilOp函数所指定的行为进行修改。
func的参数值如下:

常量含义
GL_NEVER从不通过蒙板测试
GL_ALWAYS总是通过蒙板测试
GL_LESS只有参考值<(蒙板缓存区的值&mask)时才通过
GL_LEQUAL只有参考值<=(蒙板缓存区的值&mask)时才通过
GL_EQUAL只有参考值=(蒙板缓存区的值&mask)时才通过
GL_GEQUAL只有参考值>=(蒙板缓存区的值&mask)时才通过
GL_GREATER只有参考值>(蒙板缓存区的值&mask)时才通过
GL_NOTEQUAL只有参考值!=(蒙板缓存区的值&mask)时才通过

接下来我们解释glStencilOp函数,它用来根据比较结果修改蒙板缓存区中的值,它的函数原形为:
void glStencilOp(GLenum sfail, GLenum zfail, GLenum zpass),各个参数的含义如下:
sfail
当蒙板测试失败时所执行的操作

zfail
当蒙板测试通过,深度测试失败时所执行的操作

zpass
当蒙板测试通过,深度测试通过时所执行的操作

具体的操作包括以下几种
常量描述
GL_KEEP保持当前的蒙板缓存区值
GL_ZERO把当前的蒙板缓存区值设为0
GL_REPLACE用glStencilFunc函数所指定的参考值替换蒙板参数值
GL_INCR增加当前的蒙板缓存区值,但限制在允许的范围内
GL_DECR减少当前的蒙板缓存区值,但限制在允许的范围内
GL_INVERT将当前的蒙板缓存区值进行逐位的翻转

当完成了以上操作后我们绘制一个地面,当然现在你什么也看不到,它只是把覆盖地面的蒙板缓存区中的相应位置设为1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值