我正在使用P3D编写“Doom”克隆。我没有使用任何外部库。 当我使用蒙版纹理时,我会遇到一个奇怪的神器。我已经尝试了几种方法来修复它,但无济于事:(。DISABLE_DEPTH_MASK会抑制这个工件,但是我的精灵会被排序错误。
如果有人能指出我正确的方向,我真的很感激!我非常接近拥有功能引擎! (无视“厄运”面孔和士兵精灵,当然,它们只是我正在使用的临时资产......)
答案 0 :(得分:1)
您必须使用/启用Blending。 如果你想要渲染一个非完全不透明但有部分或完全透明区域的精灵,可以使用这种技术
在场景环境结束后,士兵最终会被渲染。必须启用深度测试。
在使用Alpha通道渲染士兵精灵(纹理)之前启用混合。
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA,GL.GL_ONE_MINUS_SRC_ALPHA);
并在以下后禁用混合:
gl.glDisable(GL.GL_BLEND);
注意,士兵精灵的“黑色”背景必须具有0.0(完全透明)的alpha通道,并且士兵本身的alpha通道必须为1.0(完全不透明)。通常,PNG图像可实现此目的。
说明:
在渲染士兵时,已经绘制了背景并且背景颜色(环境的颜色)已存储在帧缓冲区中。
混合功能是:
dest.rgba = dest.rgba * (1 - src.a) + src.rgba * src.a
其中dest.rgba
是帧缓冲区中的颜色,src.rgba
是精灵的颜色。
如果精灵的alpha通道是1.0(src.a = 1.0
;不透明),那么
dest.rgba = dest.rgba * (1.0 - 1.0) + src.rgba * 1.0
dest.rgba = src.rgba
如果精灵的alpha通道是0.0(src.a = 0.0
;透明),那么
dest.rgba = dest.rgba * (1.0 - 0.0) + src.rgba * 0.0
dest.rgba = dest.rgba