当前位置: 首页 > 知识库问答 >
问题:

在libgdx中在三维空间中渲染SpriteBatch+ParticleEffect?

沈长恨
2023-03-14

我的代码的逻辑流:

  1. 模型批处理开始
  2. 使用ModelBatch在子弹世界中呈现所有3D模型
  3. 模型批处理结束
  4. SpriteBatch开始
  5. 使用SpriteBatch使用ParticleEffect(effect.Draw)呈现火焰效果
  6. SpriteBatch结束
  7. 使用Stage绘制HUD

问题是:火的效果在三维空间的某一点上表现得很好。但是当我旋转相机,使一个3D模型位于相机和火效果之间,火效果呈现在3D模型之上,而不是隐藏在3D模型后面。

    null

有没有人遇到过类似的问题?有什么建议的变通方法可以使粒子效应表现为3D世界的一部分,这样当它被其他3D模型阻挡时就会被隐藏起来?我看过Xoppa在youtube上发布的关于libgdx中的3D粒子的视频,但没有提到任何步骤/解决方案。任何帮助都将得到高度赞赏。

共有1个答案

公西修文
2023-03-14

如果您希望fire出现在后面而不是顶部,则需要首先呈现spritebatch。问题似乎是屏幕在3D渲染时会自动清除。有几种方法可以解决这个问题。

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

这是代码:

Gdx.graphics.getGL20().glClearColor( 1, 0, 0, 1 );
Gdx.graphics.getGL20().glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );
 类似资料:
  • 问题内容: 我有一个使用FitViewport的尺寸为800x480的游戏世界,最初使用像素来渲染box2d物体+固定装置,因此所有物理效果看起来都是漂浮而缓慢的。通过查看文档,我发现box2d使用度量单位,因此我将box2d的位置和大小转换为32倍,因此最终得到了25x15米的box2d世界。 我遇到的问题是,现在box2d对象变得非常小。如何缩小它们,使它们在屏幕上显示常规尺寸? 问题答案:

  • 我有一个大学项目,用LibGDX制作关于粉碎游戏的游戏,我做了这个项目,当玩家生命为0时,它从游戏屏幕类切换到EndGameScreen类,但是这种情况发生了失败的渲染,我实际上不确定这是否是因为setScreen方法或我的EndGameScreen类是不正确的 游戏屏幕类 EndGameScreen类 }

  • 问题内容: 我在尝试使用数据数组呈现元素时遇到问题。在的下面的代码中,可以正常工作,但列表项未出现。 我究竟做错了什么?请随时指出并非最佳做法的任何内容。 问题答案: GoshaArinich是正确的,您应该返回您的元素。但是,在这种情况下,您应该在浏览器控制台中收到讨厌的红色警告 数组或迭代器中的每个子代都应具有唯一的“键”道具。 因此,您需要在列表中添加“键”: 或使用es6 箭头功能放下并做

  • 问题内容: 我在弄清楚为什么我的应用程序执行无尽渲染时遇到问题。 在内部,我的有状态组件,我正在componentDidMount方法中调用redux动作(调用componentWillMount也可以进行无尽渲染) 在CoinCard中,我实际上不做任何事情(在Flat列表内注意CoinCard) 现在,当我控制台登录我的硬币卡渲染时,我可以 在此处* 看到 Inside rende的 无限日志

  • 我是directx编程新手,所以我开始学习dx11的在线教程。我可以很好地初始化win32 window和directx11,但当我尝试绘制三角形时,会出现窗口,然后它会冻结我的电脑,所以我必须重新启动它。我一直在寻找解决办法,但没有任何帮助。 这是我的WinMain代码: <代码> 还有我的应用头和cpp: DXApp。h: DXApp。cpp: 谢谢你的帮助。

  • 所以我对opengl和创建3d形状非常陌生。对于我的例子,我有两个正方形,一个是高度/宽度2,中心在原点坐标(0,0,-10),另一个在窗口的最左侧。我试图沿着x-z平面旋转位于原点的正方形,而不旋转位于屏幕最左侧的正方形。我的方法是将中心正方形的每个xyz坐标保存为一个变量,并创建一个使用cos(θ)行为沿着x-z平面旋转正方形的方法。我的代码工作,但我认为这是一个可怕的方法,因为一定有一些更有