Opengl 在GL中组合多个模具
我想在OpenGL中设置多个模具,然后将它们绘制成多个组合 例如: 我有两个矩形模板,如下所示: 然后,我想讨论一下:Opengl 在GL中组合多个模具,opengl,stencil-buffer,stencils,Opengl,Stencil Buffer,Stencils,我想在OpenGL中设置多个模具,然后将它们绘制成多个组合 例如: 我有两个矩形模板,如下所示: 然后,我想讨论一下: 任何地方 左矩形(蓝色+紫色) 右矩形(紫色+红色) 中间矩形(紫色) 全彩色区域(蓝色+紫色+红色) 我发现可以在不同的模具缓冲区中声明多个模具,但我不知道如何声明。 如何设置glStencilOp和glStencilFunc使其工作 或者我可以(我应该)使用glScissor吗?我目前不知道,是否可以配置模具缓冲区,以便在不更改模具缓冲区的情况下执行上述5个步骤。如果gl
glStencilOp
和glStencilFunc
使其工作
或者我可以(我应该)使用
glScissor
吗?我目前不知道,是否可以配置模具缓冲区,以便在不更改模具缓冲区的情况下执行上述5个步骤。如果glStencilOp
提供了按位或,这将很容易,但它不提供,并且仅使用递增或递减,就必须多次绘制矩形
但是如果区域总是矩形,为什么不使用剪刀测试呢?因此,前3步(实际上是第2步和第3步)可以通过使用glScissor
设置矩形区域并启用剪切测试(glEnable(GL\u scissor\u测试)
)来完成
对于中间的一个(步骤4),您可以自己计算紫色相交矩形并再次使用剪刀测试,或者使用模具测试:
glEnable(GL_STENCIL_TEST);
glStencilFunc(/*whatever*/);
glStencilOp(GL_INCR, GL_INCR, GL_INCR); //increase the stencil value
//draw both rectangles
glStencilFunc(GL_EQUAL, 2, 0xFFFFFFFF); //only draw where both rectangles are
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //don't change the stencil buffer
//draw things
因此,我们首先绘制两个矩形,并在绘制它们的任何地方增加模具值。然后我们在任何地方画东西,模具值为2,这意味着两个矩形都画了
对于第五步,使用相同的模具缓冲区,但
glStencilFunc(GL_LEQUAL, 1, 0xFFFFFFFF);
第二关。这样,您可以在模具缓冲区至少为1的任何位置绘制某些内容,这意味着至少绘制了一个矩形
对于两个以上的矩形,它可能会变得更复杂,您需要反复尝试以找到最佳方式。如果它们始终是矩形,
glScissor
是一个好主意,但它肯定不适用于5个。