相关函数
- glEnable(GL_DEPTH_TEST);
作用:1.会进行深度比较
2.会根据当前绘制内容更新depth buffer
- VOID GLDepthFunc(GLenumfunc);
- 深度比较的方式:Func
- Func取:GL_NEVER, GL_LESS, GL_LEQUAL, GL_EQUAL,
GL_GREATER, GL_NOTEQUAL,GL_GEQUAL,GL_ALWAYS
- Void glDepthMask(GLbooleanflag);
- 设置是否更新深度缓冲
- 如果不想更新深度,那么将flag设为false
4 . glDisable(GL_DEPTH_TEST);
深度比较和更新深度缓冲这两个动作都不会发生
- 如果不想更新深度缓冲,只想比较,那可以:
- glEnable(GL_DEPTH_TEST);
glDepthMask(false);
- 默认:
- glDisable(GL_DEPTH_TEST);
- glDepthMask(false);
- glDepthFunc(GL_LESS);
使用技巧:
- 预绘制
- 打开深度检测
- 绘制树林,记录其深度值到深度缓冲
- 保存绘制的树木图像
- 实时绘制
- 把预存的树木图像画到屏幕上,
glEnable(GL_DEPTH_TEST);
glDepthMask(false);
- 画树林里的物体,即:进行深度比较,但不更新深度缓存
如果不想比较深度值,只想更新深度缓冲怎么办?
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_ALWAYS);
- glDepthMask(true);
- 模板缓冲(Stencil buffer)
相关函数:
- glEnable(GL_STENCIL_TEST);
- 进行模板检测
- 更新模板缓冲
- Void glStencilFunc(GLenumfunc, GLint ref, GLuint mask);
- Func取:GL_NEVER, GL_LESS, GL_LEQUAL, GL_EQUAL,
GL_GREATER, GL_NOTEQUAL,GL_GEQUAL,GL_ALWAYS
- 到底是谁和谁作比较?
Ref值和当前屏幕上的像素所对应的模板缓冲中的值进行比较
- 模板缓冲中的值是怎么来的?
需要你在第一遍绘制时画入模板缓冲中
- Mask是干什么的?
比较前,ref和模板值都会与mask进行and操作。即:mask值可以控制ref和模板的哪一位进行比较操作
- void glStencilOp(GLenumfail , GLenum zfail, GLenum zpass );
- 设定如何更新模板缓冲
- Fail:片元没有通过模板测试时所执行