3d 渲染SpriteBatch+;libgdx中三维空间的ParticleEffect?

3d 渲染SpriteBatch+;libgdx中三维空间的ParticleEffect?,3d,libgdx,particle-system,spritebatch,3d,Libgdx,Particle System,Spritebatch,我使用的是libgdx版本0.9.9。我想在3D空间中使用ParticleEffect和其他3D模型渲染火效果 我的代码的逻辑流: 模型批处理开始 使用ModelBatch渲染Bullet World中的所有三维模型 模型批处理结束 SpriteBatch开始 使用SpriteBatch使用ParticleEffect(effect.draw)渲染火焰效果 SpriteBatch端 使用Stage绘制HUD 问题是:火焰效果在3D空间的某个点上渲染得很好。但是,当我旋转相机时,3D模型位于相机和

我使用的是libgdx版本0.9.9。我想在3D空间中使用ParticleEffect和其他3D模型渲染火效果

我的代码的逻辑流:

  • 模型批处理开始
  • 使用ModelBatch渲染Bullet World中的所有三维模型
  • 模型批处理结束
  • SpriteBatch开始
  • 使用SpriteBatch使用ParticleEffect(effect.draw)渲染火焰效果
  • SpriteBatch端
  • 使用Stage绘制HUD
  • 问题是:火焰效果在3D空间的某个点上渲染得很好。但是,当我旋转相机时,3D模型位于相机和火焰效果之间,火焰效果将在3D模型上渲染,而不是隐藏在3D模型后面

    我尝试过的事情:

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

  • 有没有人遇到过类似的问题?是否有任何建议的解决方法可以使ParticleEffect作为3D世界的一部分,以便在被其他3D模型阻止时隐藏它?我看过Xoppa在youtube上发布的关于libgdx中3D粒子的视频,但没有提到任何步骤/解决方案。任何帮助都将不胜感激。

    如果您希望火焰出现在后面而不是顶部,则需要先渲染spritebatch。问题似乎是,当屏幕以3D方式渲染时,它正在清除自身。有几种方法可以解决这个问题

    您可以尝试确保只有第一个进程清除屏幕

    代码如下:

    Gdx.graphics.getGL20().glClearColor( 1, 0, 0, 1 );
    Gdx.graphics.getGL20().glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );
    
    不幸的是,如果您的3D渲染器在内部调用它,而您无法控制它,那么您就有点为难了。(我不确定您使用了多少库代码或您自己的代码)

    我建议将这两个对象都渲染到帧缓冲区对象,然后您可以将两个帧缓冲区对象中的图像作为2D纹理渲染到屏幕上。然后,如果需要,可以在这些对象之间使用混合,也可以设置alpha或禁用混合,使其中一个位于另一个之上,只要确保以所需的顺序渲染它们即可


    未按以下呈现顺序显示SpriteBatch的原因:

  • 使用SpriteBatch渲染粒子效果
  • 渲染三维模型
  • 这是因为3d模型由一个与SpriteBatch重叠的天穹组成,因此完全隐藏了它。我从上面第#2步中渲染的一组3D模型中取出Skydome,并在粒子效果之前渲染它

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

  • 使用ModelBatch渲染Skydome
  • 使用SpriteBatch渲染粒子效果
  • 使用ModelBatch渲染其余模型

  • 使用此功能,粒子效果位于天空前面,但位于3d模型后面。

    感谢您的帮助。我尝试了帧缓冲区的建议,但没有成功。我在我的具体案例中发现了问题,并实施了可行的解决方案。分享解决方案作为我问题的答案。