在libgdx中的3D空间中渲染SpriteBatch + ParticleEffect?

Bha*_*ikh 6 3d particle-system libgdx spritebatch

我使用的是libgdx 0.9.9版.我想在3D空间中使用ParticleEffect以及其他3D模型渲染火焰效果.

我的代码的逻辑流程:

  1. ModelBatch开始
  2. 使用ModelBatch在Bullet World中渲染所有3D模型
  3. ModelBatch结束
  4. SpriteBatch开始
  5. 使用SpriteBatch使用ParticleEffect(effect.draw)渲染火焰效果
  6. SpriteBatch结束
  7. 使用Stage绘制HUD

问题:火焰效果在3D空间中的某个点上呈现正常.但是当我旋转相机以使3D模型位于相机和火焰效果之间时,火焰效果会渲染3D模型,而不是隐藏在3D模型后面.

我尝试过的事情:

  1. 我先尝试渲染SpriteBatch然后再渲染3D模型:在这种情况下,火焰效果不可见.我猜测3D模型(图层)正在渲染火焰效果(图层),因此效果不可见.
  2. 我尝试在步骤1和3之间渲染SpriteBatch,即在modelbatch.begin和modelbatch.end之间渲染SpriteBatch.在这种情况下,根本看不到火焰效果.
  3. 我尝试将粒子效果渲染为Actor(添加到HUD Stage).正如预期的那样,火焰效果呈现为最顶层HUD层的一部分,同样的问题仍然存在.
  4. 我尝试过探索贴花,但发现粒子效果不适用于DebcalBatch.我不想在贴花上显示动画火.gif,因此没有尝试.

有没有人遇到类似的问题?任何建议的解决方法都可以使ParticleEffect成为3D世界的一部分,以便在被其他3D模型阻挡时隐藏它?我看过Xoppa在youtube上发布了关于libgdx中3D粒子的视频,但没有提到步骤/解决方案.任何帮助将受到高度赞赏.

Bha*_*ikh 0

SpriteBatch 未按以下渲染顺序显示的原因:

  1. 使用SpriteBatch渲染粒子效果
  2. 渲染 3D 模型

是因为 3D 模型由与 SpriteBatch 重叠的 Skydome 组成,从而将其完全隐藏。我从上面第 2 步中渲染的一组 3D 模型中取出了 Skydome,并在粒子效果之前渲染它。

以下渲染顺序对我来说效果很好:

  1. 使用 ModelBatch 渲染 Skydome
  2. 使用SpriteBatch渲染粒子效果
  3. 使用 ModelBatch 渲染其余模型

这样,粒子效果位于天空前面,但位于 3D 模型后面。