gpt4 book ai didi

opengl - 在 GL 中组合多个模板

转载 作者:行者123 更新时间:2023-12-02 11:37:06 25 4
gpt4 key购买 nike

我想在 OpenGL 中设置多个模板,然后绘制它们的多个组合。

例如:我有两个像这样的矩形模板:

multiple regions

然后我想绘制:

  1. 任何地方
  2. 左侧矩形(蓝色+紫色)
  3. 右矩形(紫色+红色)
  4. 中间矩形(紫色)
  5. 整个彩色区域(蓝色+紫色+红色)

我发现可以在模板缓冲区的不同位中声明多个模板,但我不知道如何声明。如何设置 glStencilOpglStencilFunc 才能使其正常工作?

或者我可以(应该)使用 glScissor 来实现这一点吗?

最佳答案

我目前不知道是否可以配置模板缓冲区,以便能够执行上述所有 5 个步骤,而不需要对它们之间的模板缓冲区进行任何更改。如果 glStencilOp 提供按位或,那就很容易了,但它没有,并且仅使用增量或减量,您将不得不多次绘制矩形。

但是如果这些区域始终是矩形,为什么不直接使用剪刀测试呢?因此,前 3 个步骤(或者实际上是第 2 步和第 3 步)只需使用 glScissor 设置矩形区域并启用剪刀测试 (glEnable(GL_SCISSOR_TEST)) 即可完成。

对于中间的(第 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 的任何地方绘制一些内容,这意味着至少绘制了一个矩形。

对于两个以上的矩形,它可能会变得更加复杂,您需要尝试一下才能找到最佳方法。

关于opengl - 在 GL 中组合多个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com