模板缓冲区和模板测试

Stencil Buffer & Stencil Test

本文关键字:测试 缓冲区      更新时间:2023-10-16

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

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吗?

glStencilMask (...)用于

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

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

在您的问题中,您可能指的是 glStencilFunc (...) ,它也有面具。此掩码不与模板缓冲区本身相关联,而是与实际的模板测试相关联。然而,原理是相同的;上面的链接详细介绍了在测试过程中此掩码如何与 ref. 值一起使用。

蒙版是一个可选的附加功能,位于渲染的内容和发送渲染的内容之间。

想象一下,你

有一个场景正在渲染,你突然决定你不希望某个对象使用任何红色。可以使用掩码将按位运算应用于对象影响的每个像素,以删除红色值。

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