所以我一直在 Android 上使用 OpenGL ES 2.0,但现在遇到了一个我无法解决的问题。提前道歉,看来我不允许发布超过两个链接(还),所以我把我的三张图片放在 Photobucket 相册中。
我正在尝试创建一个由透明区域(“彩色玻璃”)包围的 3D 环境。为了看看它是否有效,我还在里面放了一个不透明的立方体。我启用了以下功能:
GLES20.glEnable(GLES20.GL_CULL_FACE);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
现在图片看起来像这样(屏幕截图 1)。不错,但不完全是我想要的:后面的(下)墙和右边的墙应该是可见的,因为我正在看的墙是透明的。
然后我发现并尝试GLES20.glDepthMask(true);
在绘制不透明GLES20.glDepthMask(false);
对象之前和绘制透明对象之前使用,以及在绘制不透明对象时禁用混合。
结果(截图 2)看起来很乱。但后来我有了另一个想法,不是关闭对深度缓冲区的写入,而是完全关闭GLES20.DEPTH_TEST
,同时绘制透明对象。
那(截图3)让我最接近我正在寻找的图片。您终于可以看到后墙和右侧墙了,但是,由于在绘制不透明物体时深度测试被禁用,立方体被后墙部分覆盖,这是不应该的。
有谁知道如何获得我正在寻找的效果?