【问题标题】:Libgdx Stencil Buffer overlapLibgdx 模板缓冲区重叠
【发布时间】:2016-07-26 10:17:41
【问题描述】:

我有一个关于在 OpenGL 和 libgdx 中使用 Stencil Buffer 的问题

例如,我需要绘制重叠的圆圈。

render方法的代码在这里:

    Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT);
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);

    Gdx.gl.glEnable(GL20.GL_STENCIL_TEST);
    Gdx.gl.glClearStencil(0);
    Gdx.gl.glClear(GL20.GL_STENCIL_BUFFER_BIT);
    Gdx.gl.glStencilFunc(GL20.GL_ALWAYS, 1, 0);
    Gdx.gl.glStencilOp(GL20.GL_KEEP, GL20.GL_INCR, GL20.GL_INCR);

    shapeRenderer.setColor(new Color(1f, 0f, 0f, 1f)); // red
    shapeRenderer.circle(200, 200, 100);
    shapeRenderer.circle(180, 180, 100);

    Gdx.gl.glStencilFunc(GL20.GL_EQUAL, 2, 0xFF);
    Gdx.gl.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE);
    shapeRenderer.setColor(new Color(0f, 1f, 0f, 1f)); // green
    shapeRenderer.circle(200, 200, 100);
    shapeRenderer.circle(180, 180, 100);

    Gdx.gl.glDisable(GL20.GL_STENCIL_TEST);
    shapeRenderer.end();

结果是:


预期是这样的:


重叠部分应该是其他颜色。 这里有什么问题?

【问题讨论】:

  • GL_KEEP 替换所有参数的Gdx.gl.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE); 会改变什么吗?
  • 谢谢。我试过了,但没有任何改变。

标签: java android opengl-es libgdx stencil-buffer


【解决方案1】:

就其发展而言,逻辑看起来还不错,所以我怀疑问题在于您要渲染到的帧缓冲区实际上没有模板附件。如果没有模板缓冲区,OpenGL ES 的行为就好像模板测试被禁用,所以你的最后两个圆总是会覆盖前两个。

检查您的上下文创建(对于窗口表面),或您为屏幕外渲染目标创建的 FBO。

【讨论】:

  • 谢谢,会检查的。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2014-10-27
  • 2016-01-31
  • 1970-01-01
相关资源
最近更新 更多