我目前正在使用P3D编写一个“末日”克隆。我没有使用任何外部库。我有一个奇怪的神器,当我使用蒙版纹理时发生的。我已经尝试了几种方法来修复它,但都没有用:(。DISABLE_DEPTH_MASK抑制了工件,但是我的sprite排序完全错误。
如果有人能为我指明正确的方向,我将不胜感激!我就快有一个可以正常工作的引擎了!(忽略“末日”面孔和士兵精灵,当然,它们只是我使用…的临时资产)
artifact1
正如你所看到的,即使面具在工作(看士兵的脚),它也会留下一个巨大的黑色(背景色)人工制品。
artifact2
当走在四合院后面时,文物不是太差,但仍然存在。
发布于 2018-06-03 01:20:45
您必须使用/启用。如果你想渲染一个不完全不透明,但有部分或完全透明区域的精灵,可以使用这种技术。
在场景环境完成后,士兵在最后进行了渲染。必须启用深度测试。
在使用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
https://stackoverflow.com/questions/50658626
复制相似问题