模板缓冲区 - 了解glStencilFuncSeparate

时间:2012-09-25 21:27:14

标签: opengl-4

示例代码如下所示:

glEnable(GL_STENCIL_TEST);
glClearStencil(2);
glClear(GL_STENCIL_BUFFER_BIT);
glStencilFuncSeparate(GL_FRONT, GL_NOTEQUAL, 0, 1);
object.draw();
glDisable(GL_STENCIL_TEST);

每个像素的模板缓冲区具有该二进制值:00000010(8位精度)接下来,glStencilFuncSeparate进行以下逻辑运算:(00000000& 00000001 = 00000000),(00000010& 00000001 = 00000000) - > 00000000!= 00000000因此模板测试失败,并且不会绘制对象的正面。我们可以设置一个掩码,例如2或255,然后传递测试。

如果glStencilFuncSeparate中的Ref参数是257,那么将被限制为1. 1.掩码参数和钳位有什么关系? 2.提供的信息是正确的,对吧?

1 个答案:

答案 0 :(得分:2)

你说:

  

每个像素的模板缓冲区具有该二进制值:00000010(8位精度)接下来,glStencilFuncSeparate进行以下逻辑运算:(00000000& 00000001 = 00000000),(00000010& 00000001 = 00000000) - > 00000000!= 00000000因此模板测试失败,并且不会绘制对象的正面。

这都是正确的。

  

我们可以设置一个掩码,例如2或255,然后传递测试。

是; mask 参数(第glStencilFunc*的第四个参数)与像素的模板值的组合产生非零答案的任何值(假设您不更改 ref) 参数(glStencilFunc*的第三个参数)将通过模板比较测试。

  

如果glStencilFuncSeparate中的Ref参数为257,那么将被限制为1.

实际上,没有。根据OpenGL规范和glStencilFunc* reference page ref 值被限制在[0,2 s - 1]的范围内,其中 s 是模板位的数量,因此在您的示例中, ref 值将被限制为255.

  

1。面具参数和夹紧怎么样?

仅使用 s 掩码的最低有效位。模板比较功能实际上是:

result = (pixel & (mask & (1<<s - 1))) <stencil func> (ref & (mask & (1<<s - 1)))
  

2。提出的信息是正确的,对吧?

几乎。一点都不错: - )