c++ - 模板缓冲区和模板测试

标签 c++ opengl graphics 3d stencil-buffer

根据我读过的书籍,模板测试是通过将引用值与对应于像素的模板缓冲区的引用值进行比较来实现的,但是在其中一本书中它指出:

在应用比较之前,掩码与模板平面中的值和引用值按位与运算

这里我看到第三个参数是掩码,这是与模板缓冲区相关的掩码还是由 openGL 本身生成的另一个参数?

有人可以解释一下比较过程和在此过程中起作用的吗??

最佳答案

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

通常,模板缓冲区为 8 位宽,但不一定如此。默认的模板掩码使得每个位平面都被启用。在 8 位模板缓冲区中,这意味着默认掩码为 0xff (11111111b)。此外,在 OpenGL 2.0+ 中,可以为正面/背面的多边形单独完成模板制作,因此技术上有两个模板掩码。

在您的问题中,您可能指的是 glStencilFunc (...) ,它也有一个面具。此掩码与模板缓冲区本身无关,但与实际的模板测试相关联。但是,原理是相同的;上面的链接详细说明了这个掩码是如何与引用一起使用的。测试期间的值(value)。

关于c++ - 模板缓冲区和模板测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137394/

相关文章:

c++ - 运行时检查失败 #2 - 变量 'osvi' 周围的堆栈在 mfc 应用程序上已损坏

c++ - 如何在基类中创建一个将自身的子类作为参数的函数?

c++ - 使用 sizeof(vector[0]) * vector->size() 时出现段错误

opengl - glTexParameterf 和 glTexParameteri 有什么区别

r - 从单个矩阵创建多个单独的热图

java - 设置椭圆形 throw 错误

c++ - Windows 上的 Clang 无法编译代码

c++ - 选择com的理由

c++ - 当 z <= 0 时 glm::lookAt 垂直相机翻转

c# - 使用 DrawString 编写竖排文本