Bar*_*MAD 1 c++ opengl glew stencil-buffer
我是 OpenGL 的初学者,在学习模板化这个功能时一直困扰着我(glStencilMask)。
有人告诉我它可以用来启用或禁用模板,这是怎么回事?
为什么将十六进制值传递给此函数?
为什么 HEX 值 0xff 和 0x00 经常专门传递?
此功能是否阻止绘制到颜色缓冲区和/或模板缓冲区?
你能用简单的术语解释它在做什么吗?
你知道位掩码是如何工作的吗?就是这样。
0xff是二进制的11111111。这意味着 GL 可以写入所有 8 个模板位。
0x00是二进制的00000000,使用此掩码时 GL 不允许写入任何位。
由于模板缓冲区实际上是一台大型按位机器,因此详细复习或学习这些概念对您很有帮助。如果您无法理解为什么要屏蔽某些位,则可能无法有效利用模板缓冲区。
在传递之间屏蔽某些位将使您保留存储在模板缓冲区部分中的结果。为什么你想要这完全是特定于应用程序的,但这就是模板缓冲区的工作方式。
模板掩码永远不会完全禁用模板缓冲区,您实际上必须调用glDisable (GL_STENCIL_TEST)它。它只是启用或禁用对其部分的写入。
最后要注意的是,如果您禁用GL_STENCIL_TEST或GL_DEPTH_TEST实际上做了两件事:
所以,如果出于某种原因,您曾经想编写一个恒定的深度或模板值,并且您认为禁用测试会实现这一点——它不会。GL_ALWAYS如果这是您的意图,请用于测试功能而不是禁用测试。