蒙板缓存和蒙板测试
2015-08-27 18:10
239 查看
当你使用glEnable(GL_STENCIL_TEST)启用蒙板测试之后,蒙板函数用于确定一个颜色片段是应该丢弃还是保留(被绘制)。蒙板缓存区中的值与参考值ref进行比较,比较标准是func所指定的比较函数。参考值和蒙板缓存区的值都可以与掩码进行为AND操作。蒙板测试的结果还导致蒙板缓存区根据glStencilOp函数所指定的行为进行修改。
func的参数值如下:
接下来我们解释glStencilOp函数,它用来根据比较结果修改蒙板缓存区中的值,它的函数原形为:
void glStencilOp(GLenum sfail, GLenum zfail, GLenum zpass),各个参数的含义如下:
sfail
当蒙板测试失败时所执行的操作
zfail
当蒙板测试通过,深度测试失败时所执行的操作
zpass
当蒙板测试通过,深度测试通过时所执行的操作
具体的操作包括以下几种
当完成了以上操作后我们绘制一个地面,当然现在你什么也看不到,它只是把覆盖地面的蒙板缓存区中的相应位置设为1。
func的参数值如下:
常量 | 含义 |
GL_NEVER | 从不通过蒙板测试 |
GL_ALWAYS | 总是通过蒙板测试 |
GL_LESS | 只有参考值<(蒙板缓存区的值&mask)时才通过 |
GL_LEQUAL | 只有参考值<=(蒙板缓存区的值&mask)时才通过 |
GL_EQUAL | 只有参考值=(蒙板缓存区的值&mask)时才通过 |
GL_GEQUAL | 只有参考值>=(蒙板缓存区的值&mask)时才通过 |
GL_GREATER | 只有参考值>(蒙板缓存区的值&mask)时才通过 |
GL_NOTEQUAL | 只有参考值!=(蒙板缓存区的值&mask)时才通过 |
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 | 将当前的蒙板缓存区值进行逐位的翻转 |
相关文章推荐
- 解决Vista系统OpenGL驱动问题的方法整理
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi使用OpenGL2d绘图之画图片Bmp的方法
- 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸
- VC运用OPENGL加载BMP纹理图的实现方法汇总
- java实现OpenGL ES纹理映射的方法
- java基于OpenGL ES实现渲染实例
- OpenGL坐标系介绍
- linux下opengl的安装(with qt)
- OpenGL超级宝典笔记——显示列表
- OpenGL超级宝典笔记——顶点数组
- OpenGL生成轮廓
- OpenGL超级宝典笔记——性能比较
- OpenGL超级宝典笔记——顶点缓冲区对象
- OpenGL超级宝典笔记——选择
- OpenGL超级宝典笔记——反馈
- OpenGL超级宝典笔记——遮挡查询
- OpenGL超级宝典笔记——深度纹理和阴影