根据书中我读过的模板测试是通过比较参考值与对应于像素的模板缓冲区的参考值来实现的,但是在其中一本书中它说明了:
A mask is bitwise AND-ed with the value in the stencil planes and with the reference value before the comparison is applied
这里我看到第三个参数是掩码,这是一个与模板缓冲区相关的掩码,还是由openGL本身生成的另一个参数?
有人可以解释比较过程以及在此过程中扮演角色的values
吗?
答案 0 :(得分:1)
掩码是一个可选的附加功能,位于呈现的内容和要呈现的内容之间。
想象一下,你有一个场景被渲染,你突然决定你不想让某个物体使用任何红色。您可以使用蒙版对对象影响的每个像素应用按位运算,以删除红色值。
r:150 b:50 g:47
变为r:0 b:50 g:47
r:13 b:255 g:255
变为r:0 b:255 g:255
等
http://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml应该有助于解释一下。
答案 1 :(得分:1)
glStencilMask (...)
用于启用或禁用对模板缓冲区中各个位的写入。为了使参数数量易于管理并适应不同位深度的模板缓冲区,需要GLuint
而不是glColorMask (...)
和glDepthMask (...)
之类的单个GLboolean
。
模板缓冲区通常为8位宽,但不一定是这样。默认的模板掩码是这样的,即每个位平面都被启用。在8位模板缓冲区中,这意味着默认掩码为0xff(11111111b)。此外,对于OpenGL 2.0+中的前/后多边形,可以单独进行模板印刷,因此技术上有两个模板掩模。
在你的问题中,你可能指的是glStencilFunc (...)
,它也有一个面具。此掩码与模板缓冲区本身无关,但与实际的模板测试有关。然而,原则是一样的;上面的链接详细说明了这个掩码是如何与ref一起进行AND的。测试期间的价值。