这是我之前问题和帖子的延续,可以在这里看到。感谢我在那里收到的答案,我觉得我能够更接近我的目标,并进一步学习OpenGL,但是在弄清楚如何使用模板缓冲区的基础知识后,我遇到了一个问题。
当我将精灵绘制到模板缓冲区时,它会绘制整个正方形区域,而不仅仅是像我曾经幼稚地希望的那样不完全透明的像素。我对其发生的原因有些模糊的理解,但我不确定解决方案在哪里。我已经对蒙版进行了相当多的实验,并修改了spritebatch使用的着色器以丢弃低alpha片段,但似乎我无法看到更大的画面。
作为问题的一个视觉例子,我将继续使用我在上一个问题中使用的示例。现在,尝试在彼此之上绘制两个圆(使它们完美混合,不重叠),我得到了下图:
所以,基本上,我是否可以在LibGDX的Sprite和SpriteBatch功能上利用模板缓冲区来处理复杂形状(圆只是一个示例),或者我需要寻找其他替代方案?
当我将精灵绘制到模板缓冲区时,它会绘制整个正方形区域,而不仅仅是像我曾经幼稚地希望的那样不完全透明的像素。我对其发生的原因有些模糊的理解,但我不确定解决方案在哪里。我已经对蒙版进行了相当多的实验,并修改了spritebatch使用的着色器以丢弃低alpha片段,但似乎我无法看到更大的画面。
作为问题的一个视觉例子,我将继续使用我在上一个问题中使用的示例。现在,尝试在彼此之上绘制两个圆(使它们完美混合,不重叠),我得到了下图:
所以,基本上,我是否可以在LibGDX的Sprite和SpriteBatch功能上利用模板缓冲区来处理复杂形状(圆只是一个示例),或者我需要寻找其他替代方案?
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
Gdx.gl.glDepthMask(true);
batch.begin();
sprite.draw(batch);
sprite2.draw(batch);
batch.end();
Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);