libgdx粒子系统Z坐标

6
我想使用Z坐标在3D中呈现一个粒子效果。我尝试使用Decals而不是Sprites实现自己的ParticleEffect,但没有成功。
有没有其他方式可以使用Z坐标来呈现ParticleEffect?也许通过操作SpriteBatch的转换矩阵?
更新:
工作代码
// update projection each frame since my camera is moving
spriteBatch.setProjectionMatrix(camera3d.projection);

for (ParticleEffect effect : effects){
    spriteBatch.setTransformMatrix(camera3d.view);
    spriteBatch.getTransformMatrix().translate(x,y,z); // different for each effect
    spriteBatch.getTransformMatrix().scale(0.1f,0.1f,0.1f); //optional
    spriteBatch.begin();

    effect.draw(spriteBatch, delta);

    spriteBatch.end();
    spriteBatch.getTransformMatrix().idt();
}

你的游戏是2D还是3D?“使用Z坐标”是什么意思?这意味着粒子在屏幕上以不同大小呈现吗?你能展示一下你的屏幕截图吗? - P.T.
我的游戏是3D的,但是libgdx的ParticleEffect是为2D设计的(仅使用X和Y轴,没有Z轴),因为它在内部使用Sprites(2D)和SpriteBatch进行绘制。我希望效果能够根据透视关系,在近处的物体后面部分地出现,在远处的物体前面部分地出现。 - Roman K
1个回答

9

如果你的3D效果是视差效果,也就是说你的粒子面向相机垂直,那么你确实可以设置SpriteBatch的变换矩阵。

batch.getTransformMatrix().idt().translate(0, 0, z);
batch.begin();
... do your rendering here
batch.end();
// reset the matrix, so you can use the batch for other stuff
batch.idt();

为了产生透视效果,您还需要使用透视投影。应对这个要求的最简单方法是使用PerspectiveCamera而不是OrthographicCamera。

谢谢,那是最后的提示!我已经更新了问题并附上了可工作的代码。顺便说一句,感谢libgdx! - Roman K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接