【发布时间】: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