0

根据我读过的书,模板测试是通过将参考值与对应于像素的模板缓冲区的参考值进行比较来实现的,但是在其中一本书中它指出:

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在此过程中起作用吗?

4

2 回答 2

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应该有助于解释更多。

于 2013-10-02T13:07:17.423 回答
1

glStencilMask (...)用于启用或禁用对模板缓冲区中各个位的写入。为了使参数的数量易于管理并适应不同位深度的模板缓冲区,它需要 aGLuint而不是单独GLboolean的 sglColorMask (...)glDepthMask (...)

通常,模板缓冲区为 8 位宽,但不一定如此。默认模板掩码是启用每个位平面。在 8 位模板缓冲区中,这意味着默认掩码为 0xff (11111111b)。此外,在 OpenGL 2.0+ 中,可以分别对正面/背面多边形进行模板制作,因此从技术上讲有两个模板蒙版。

在您的问题中,您可能指的是glStencilFunc (...),它也有一个面具。此掩码与模板缓冲区本身无关,但与实际的模板测试相关联。但是,原理是一样的;上面的链接详细说明了这个掩码是如何与 ref 一起使用的。测试期间的值。

于 2013-10-02T14:11:11.010 回答