glStencilMask()究竟做了什么?

时间:2015-07-27 18:38:34

标签: c++ opengl glew stencil-buffer

我是OpenGL的初学者,在学习模板的过程中,这个功能一直困扰着我(glStencilMask)。

我被告知它可用于启用或禁用模板印刷,这是怎么回事?

为什么十六进制值传递给此函数?

为什么HEX值0xff和0x00经常通过?

此功能是否阻止绘制到颜色缓冲区和/或模板缓冲区?

请您以简单的方式解释它的作用吗?

1 个答案:

答案 0 :(得分:3)

你知道bitmasks是如何工作的吗?就是这样。

二进制文件中

0xff 11111111 。这意味着GL可以写入所有8个模板位。

二进制

0x00 00000000 ,使用此掩码时不允许GL写入任何位。

由于模板缓冲区实际上是一个大型的按位机器,因此您可以很好地了解或详细了解这些概念。如果您无法理解为什么要屏蔽某些位,则可能无法有效地使用模板缓冲区。

屏蔽传递之间的某些位将允许您保存存储在模板缓冲区部分中的结果。为什么你会想要这完全是特定于应用程序的,但这就是模板缓冲区的工作原理。

模板掩码永远不会完全禁用模板缓冲区,您实际上必须为此调用glDisable (GL_STENCIL_TEST)。它只是启用或禁用对部分内容的写入。

最后请注意,如果您停用实际执行两项操作的GL_STENCIL_TESTGL_DEPTH_TEST

  1. 禁用测试
  2. 禁用写入模板/深度值
  3. 所以,如果由于某种原因,你曾经想要写一个恒定的深度或模板值,并且你认为禁用测试会实现这一点 - 它不会。如果您有意,请使用GL_ALWAYS代替测试功能。