注意:我已经找到了答案(我将在这个问题之后发布)-我只是想知道我是否做对了,或者是否有更好的方法。
我正在使用OpenGL ES(JOGL)制作“ 2.5D”等距游戏。“ 2.5D”是指世界是3D,但使用2D等距图块进行渲染。
我必须解决的原始问题是必须按顺序(从后到前)渲染纹理,以便图块正确重叠以产生合适的效果。经过一番阅读,我很快意识到这是2D的“老帽子”方法。由于玩家可以修改3D世界(因此东西可以出现在3D空间中的任何地方),因此很难有效地做到这一点-因此,我利用深度缓冲区似乎是合乎逻辑的。这意味着我不必担心以正确的顺序渲染内容。
但是,我遇到了一个问题。如果将GL_DEPTH_TEST
和GL_BLEND
一起使用,则会创建一种效果,在将对象与背景混合之前,先按z顺序对其进行“排序”(这意味着您应该在透明度应达到的地方获得一种奇怪的重叠)。
这是一些应该说明问题的伪代码(顺便说一句,我在Android上使用libgdx)。
create() {
// ...
// some other code here
// ...
Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);
Gdx.gl.glEnable(GL10.GL_BLEND);
}
render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
// ...
// bind texture and create vertices
// ...
}
所以问题是:如何解决透明度重叠问题?
2
只是一条评论,告诉您,我使用2D引擎的方式与您完全相同:首先尝试变得聪明,自己对Z-sort进行平铺,然后意识到没有理由使场景平整,从而给我的平铺Z坐标并激活alpha测试。不确定您是否正确,但您并不孤单:-)
—
sam hocevar 2011年