OPENGL的模板缓冲

来源:互联网 发布:网络平台合作推广方案 编辑:程序博客网 时间:2024/05/22 06:30

        一直对模板缓冲处于模模糊糊的了解状态,用也只是复制,今天找时间终于彻底理清了它的应用,记录防止再次忘记。

        模板缓冲一般用来绘制雕花挖开物体等应用。模板缓冲区一般为8位,初始时默认为零,也可使用glClear(GL_STENCIL_BUFFER_BIT)。

模板时主要使用glStencilFunc()和glStencilOP()两个函数。glStencilFunc(GLenum func ,  GLint ref , GLuint mask)当前绘制是否通过模板

测试,如果通过就绘制到场场景,如果通不过,就不绘制场景。其中,func设置绘制的图形在什么情况下通过或者不通过测试,其值如下所


ref是用于测试绘制是否通过模板测试的参考值,用它和模板缓冲区的值进行比较,比较方式如上图所示。  mask用于设置参考值和缓冲区值比较的位数。

          glStencilOP(GLenum sfail,GLenum dpfail ,GLenum dppass)用于控制测试失败和成功后对模板缓冲的值的改变,如果只使用一次这个函数可以随便设置,如果多次模板缓冲以实现挖洞等操作,需要根据此次模板缓冲测试的结果设置模板缓冲区的值。其中有三个参数,sfail 设置模板测试失败后对模板缓冲区的设置,可以有下面几个设置方法。


其中不形成GL_INCR的作用,只知道,它设置后,模板缓冲区的值比0大。如果模板测试失败,后面两个参数dpfail和dpPass就不再起作用,他们只有在模板缓冲测试成功时起作用。








0 0
原创粉丝点击