绘制一个对象,比较模具缓冲区的两个不同值
Draw a object comparing two different values of stencil buffer
首先使用以下值绘制Geometry_A并写入模板缓冲区。
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); // replace stencil buffer values to ref=1
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glStencilFunc(GL_NEVER, 1, 0xFF); // never pass stencil test
glStencilMask(0xFF);
Draw Geometry_A
绘制Geometry_B并使用以下值写入模具缓冲区。
glStencilFunc(GL_NEVER, 2, 0xFF); // never pass stencil test
glStencilMask(0xFF);
Draw Geometry_B
绘制Geomtery_C比较Geometry_A的模板值
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_EQUAL, 1, 0xFF);
绘制Geomtery_D比较Geometry_B的模板值
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_EQUAL, 2, 0xFF);
我们是否可以绘制一个几何形状来比较Geometry_A和Geometry_B的模板缓冲区值
类似的东西。
glStencilFunc(GL_EQUAL, 1 & 2, 0xFF);
我们能否绘制一个几何图形,比较Geometry_A和Geometry_B的模板缓冲区值
是的,当然,只需在模板缓冲区中设置一个位,而不是更改所有位。
为几何Geometry_A设置位掩码0x01
glStencilFunc(GL_NEVER, 1, 0xFF); // never pass stencil test
glStencilMask(0x01);
设置几何Geometry_B的位掩码0x02
glStencilFunc(GL_NEVER, 2, 0xFF); // never pass stencil test
glStencilMask(0x02);
如果要查找已绘制Geometry_A和Geometry_B的部分,则必须查找测试模板缓冲区中是否设置了拳头 2 位。
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilFunc(GL_EQUAL, 3, 0x03);
请注意,使用此方法时,位 3 到 8 根本不受影响。
相关文章:
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 为什么这两个卡片对象不等同?
- 有没有办法在两个共享对象之间使用相同的全局变量?
- C 存储两个类对象之间的差异
- 如何重载运算符 += 以添加两个类对象
- 同时锁定两个互斥对象
- 有什么方法可以测试来自同一类的两个作业对象吗
- 如何在C++中的两个不同对象中使用相同的变量名
- C++中两个/两个以上对象的重载加法赋值运算符
- 同一基类的两个派生对象如何通信
- 为什么运算符重载实现中的两个 Static 对象在 c++ 中始终相等
- 我对这个引用指向两个不同对象的想法有什么问题
- C++中两个类对象的循环引用
- 取两个size_t对象的差异是否安全
- 如何构造用于等待来自不相关类的两个信号对象的代码
- 为什么从函数返回对象时得到两个临时对象
- 两个共享对象之间的共享变量
- 如何在两个不同对象的基类中使用模板化类
- 如何使用重载构造函数创建两个动态对象