gpt4 book ai didi

java - Libgdx SpriteBatch 是否绘制到 StencilBuffer?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:21 24 4
gpt4 key购买 nike

我在 OpenGL ES 1.0 中使用 libgdx,我想知道 SpriteBatch 是否可以写入/绘制到模板缓冲区。我一直在尝试写入它,但我根本没有得到任何结果,我没有使用模板缓冲区的经验,但我已经阅读了很多,所以如果我在接下来的任何事情中有错,请纠正我。基本上我想做的是用 SpriteBatch 将纹理绘制到模板缓冲区,这样当我绘制其他东西时(禁用模板缓冲区)它只会在模板缓冲区等于 1 的区域上绘制。

这是我想要的结果:如果我在模板缓冲区中绘制星形纹理,然后在颜色缓冲区中绘制红色纹理,我希望红色纹理忽略模板缓冲区中星形所在的像素。

到目前为止,这是我的代码:

   batch.begin();
Gdx.gl10.glEnable(GL10.GL_STENCIL_TEST);
Gdx.gl10.glEnable(GL10.GL_ALPHA_TEST);
Gdx.gl10.glStencilFunc(GL10.GL_ALWAYS, 0x1, 0xffffffff);
Gdx.gl10.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);
Gdx.gl10.glColorMask(false, false, false, false);

batch.draw(myShape, 100, 100); //draw to the stencil buffer a shape (texture region)

batch.end();
batch.begin();

Gdx.gl10.glColorMask(true, true, true, true);
Gdx.gl10.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);

// draw where the shape has NOT been drawn
Gdx.gl10.glStencilFunc(GL10.GL_NOTEQUAL, 0x1, 0xff);

batch.draw(BackGroundLayer, 0, 0);// draw background

Gdx.gl10.glDisable(GL10.GL_STENCIL_TEST);

最佳答案

是的,spriteBatch 确实写入了模板缓冲区,问题是我必须配置模板缓冲区。完成的方法是创建一个应用程序配置对象,并在初始化应用程序时将其作为参数传递,如下所示:

对于安卓启动器你需要这样做:

AndroidApplicationConfiguration Configuration = new  AndroidApplicationConfiguration();
Configuration.stencil = 8; //stencil buffer size
initialize(new Game(), Configuration); //pass it as parameter

对于桌面是这样的

LwjglApplicationConfiguration Configuration = new  LwjglApplicationConfiguration();
Configuration.stencil = 8;
new LwjglApplication(new Game(), Configuration);

关于java - Libgdx SpriteBatch 是否绘制到 StencilBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869908/

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