【发布时间】:2020-12-20 04:59:29
【问题描述】:
我在同一位置绘制两个不同的模板蒙版,并且希望我的蒙版 1 只影响 shape1,而蒙版 2 影响 shape 2。
这是代码。
glClearStencil(0);
glStencilMask(~0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Render all stencil masks
// First geometry Mask
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); // replace stencil buffer values to ref=1
glStencilFunc(GL_NEVER, 1, 0xff); // never pass stencil test
glStencilMask(0xFF);
DrawGeometry1();
// Second geometry Mask
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); // replace stencil buffer values to ref=1
glStencilFunc(GL_NEVER, 2, 0xff); // never pass stencil test
glStencilMask(0xFF);
DrawGeometry2();
//Draw first shape to be masked by first geometry Mask
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilMask(0x00);
glStencilFunc(GL_EQUAL, 1, 0xff);
DrawShape1();
//Draw first shape to be masked by fsecond geometry Mask
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilMask(0x00);
glStencilFunc(GL_EQUAL, 2, 0xff);
DrawShape1();
这是工作流程
- 绘制两个蒙版。
- 绘制形状 1
- 绘制形状 2
形状 2 仅受几何蒙版 2 的影响,但首先绘制的形状 1 受到两个蒙版的影响。
【问题讨论】:
标签: c++ opengl stencil-buffer