我遇到了一些关于透明度和 3d 粒子的奇怪问题。一个简短的视频来说明: https ://youtu.be/ZHKI1X3MjhY 如您所见,我有一个 3d 粒子效果,火焰燃烧。里面是一个没有 alpha 混合的 3 模型,它显示得很好。然后在远处有一个小骨架(混合和alphatest打开),它在火中也显示得很好。然后我转动相机,看着战士骷髅,它就消失了,你看到的是他身后的东西。我再次转动相机,法师骨架也消失了,但你可以在更远的地方看到树木,它们具有完全相同的混合和 alpha 测试设置。如果我将角色移动到 20 码外,它也会开始通过火焰效果显示出来。
所以它似乎与3d粒子效果的距离有关......
3d 粒子批处理是一个扩展的 BillboardParticleBatch,如下所示:
protected Renderable allocRenderable(){
BlendingAttribute ba=new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE,1f);
Renderable r = super.allocRenderable();
r.material = new Material( ba,
// new DepthTestAttribute(GL20.GL_LEQUAL, 0.0f, 0.5f, true),
// r.material.set(new FloatAttribute(FloatAttribute.AlphaTest, 0.0f),
TextureAttribute.createDiffuse(texture));
return r;
}
所有角色和树都是使用以下属性创建的:
if (alpha) {
FloatAttribute floatAttribute = new FloatAttribute(FloatAttribute.AlphaTest, 0.5f);
BlendingAttribute blendingAttribute = new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, 1f);
for (int i = 0; i < bulletEntity.modelInstance.materials.size; i++){
bulletEntity.modelInstance.materials.get(i).set(blendingAttribute);
bulletEntity.modelInstance.materials.get(i).set(floatAttribute);
}
}
先绘制模型然后绘制粒子,我尝试更改顺序但没有区别。我已经为 alphatest、depthtest 和 blendingattribute 尝试了很多不同的设置,但找不到任何有效的设置。
编辑 我从 3d 模型中删除了 Blending 属性,现在它看起来应该与粒子效果有关。但是我需要我的角色模型上的大多数材料来设置混合..
当我启用混合时,任何人都知道为什么会发生这种情况?
我还尝试使用 BillboardParticleBatch 而不扩展它,以防我在那里做了什么,但效果更糟。所有启用混合的模型都出现在粒子效果的前面,即使它们站在粒子效果的后面。