示例代码如下所示:
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.提供的信息是正确的,对吧?
答案 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。提出的信息是正确的,对吧?
几乎。一点都不错: - )