我使用的是libgdx版本0.9.9。我想在3D空间中使用ParticleEffect以及其他3D模型渲染火焰效果。
我的代码的逻辑流程:
问题:火焰效果在3D空间中的某个点上呈现正常。但是当我旋转相机以使3D模型位于相机和火焰效果之间时,火焰效果会渲染3D模型,而不是隐藏在3D模型后面。
我尝试过的事情:
有没有人遇到过类似的问题?任何建议的解决方法都可以使ParticleEffect成为3D世界的一部分,以便在被其他3D模型阻挡时隐藏它?我看过Xoppa在youtube上发布了关于libgdx中3D粒子的视频,但没有提到步骤/解决方案。任何帮助将受到高度赞赏。
答案 0 :(得分:0)
如果您希望火焰出现在后面而不是顶部,则需要首先渲染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或禁用混合,使得一个在另一个之上,只需确保以任何您想要的顺序渲染它们。
答案 1 :(得分:0)
SpriteBatch未按以下呈现顺序显示的原因:
是因为3d模型由与SpriteBatch重叠的Skydome组成,因此完全隐藏了它。我从上面步骤#2中渲染的3D模型集中取出Skydome,并在粒子效果之前渲染它。
以下渲染顺序对我来说很好:
有了这个,粒子效果就在天空前面,但在3d模型后面。