我使用的是libgdx版本0.9.9。我想渲染一个火灾的效果,使用ParticleEffect在3D空间,以及其他三维模型。
我的代码的逻辑流:
问题是:火的效果是在三维空间的一点上渲染得很好。但是当我旋转相机,使一个3D模型位于相机和火灾效果之间时,火效应呈现在三维模型之上,而不是隐藏在三维模型后面。
我尝试过的事情:
有没有人遇到过类似的问题?有什么建议可以让ParticleEffect成为3D世界的一部分,这样当被其他3D模型阻止时,它就会被隐藏?我看过Xoppa在youtube上发布的一段关于libgdx中3D粒子的视频,但是没有提到任何步骤/解决方案。任何帮助都将不胜感激。
发布于 2014-02-03 03:10:11
SpriteBatch没有按以下呈现顺序显示的原因:
因为3d模型是由一个天穹组成的,它与SpriteBatch重叠,因此完全隐藏了它。我从上面第二步渲染的3D模型中取出了天穹,并在粒子效应之前渲染它。
下面的渲染命令对我来说是很好的:
这样,粒子效应就在天空的前面,而在三维模型的后面。
发布于 2014-01-06 22:34:54
如果您想让火出现在后面而不是顶部,您需要先呈现sprite批。问题似乎在于,当屏幕在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或者禁用混合,这样一个在另一个上面,只需要确保你按照你想要的顺序呈现它们。
http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/FrameBuffer.html
https://stackoverflow.com/questions/20924559
复制相似问题