模板缓冲区和模板测试
Stencil Buffer & Stencil Test
根据我读过的书,模板测试是通过将参考值与对应于像素的模板缓冲区的参考值进行比较来实现的,其中一本书中如何指出:
A mask is bitwise AND-ed with the value in the stencil planes and with the reference value before the comparison is applied
在这里,我看到第三个参数是掩码,这是与模板缓冲区相关的掩码还是OpenGL本身生成的另一个参数?
有人可以解释比较过程和在此过程中起作用的values
吗?
glStencilMask (...)
用于启用或禁用对模板缓冲区中各个位的写入。为了使参数数量易于管理并适应不同位深度的模板缓冲区,需要GLuint
而不是像glColorMask (...)
和glDepthMask (...)
那样的单个GLboolean
。
通常,模板缓冲区的宽度为 8 位,但不一定如此。默认模具掩码是启用每个位平面。在 8 位模具缓冲区中,这意味着默认掩码为 0xff (11111111b)。此外,在 OpenGL 2.0+ 中,可以单独为正面/背面多边形进行模板化,因此从技术上讲,有两个模板蒙版。
在您的问题中,您可能指的是 glStencilFunc (...)
,它也有面具。此掩码不与模板缓冲区本身相关联,而是与实际的模板测试相关联。然而,原理是相同的;上面的链接详细介绍了在测试过程中此掩码如何与 ref. 值一起使用。
蒙版是一个可选的附加功能,位于渲染的内容和发送渲染的内容之间。
想象一下,你有一个场景正在渲染,你突然决定你不希望某个对象使用任何红色。可以使用掩码将按位运算应用于对象影响的每个像素,以删除红色值。
-
r:150 b:50 g:47
变得r:0 b:50 g:47
-
r:13 b:255 g:255
变得r:0 b:255 g:255
等。
http://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml 应该有助于解释更多。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- C++字符*缓冲区的大小
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 数据成员SFINAE的C++17测试:gcc vs clang
- Xaudio2在更改缓冲区或循环时弹出声音
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 协议缓冲区测试C++:期望/tcl/tk
- 为什么在我的测试程序中,从字符缓冲区读取一个int时,"std::copy"5x(!)比"
- 测试环形缓冲区实现的"cache not flushed to main memory"
- C++ STL 容器用作简单缓冲区时速度很慢(我做了一个基准测试)
- 模板缓冲区和模板测试
- 是否可以在没有完全定义着色器的情况下测试缓冲区数据是否成功加载到GPU上?(C++、OpenGL 4.4、GLFW)
- 在OpenGL中,我如何在两个深度缓冲区之间进行深度测试