gpt4 book ai didi

java - 为什么我不应该使用 LibGDX 的 createBox 或 createRect?

转载 作者:行者123 更新时间:2023-11-30 02:55:22 24 4
gpt4 key购买 nike

我目前正在创建一个体素引擎,以便熟悉其中涉及的许多概念,这对我来说也恰好是一个优化练习。在搜索时,我在多个网站上看到多个来源表明我不使用 ModelBuilder().createBox() 或 createRect() 来执行除故障排除之外的任何操作。

相反,他们建议在 blender 之类的东西中创建自己的立方体模型,而不是使用它们代替 createBox。我刚刚完成了实现优化剔除,重写代码以更改为自定义模型需要一些时间。在做出类似的事情之前,我想了解自己在做什么以及为什么要这样做。

为什么不推荐createBox?在这种情况下,创建单独的模型真的是最好的主意吗?

最佳答案

ModelBuilder#createBox方法是创建 Model 的便捷方法与单个Node包含一个 NodePart其中包含单个盒子形状。这与执行完全相同:

ModelBuilder builder = new ModelBuilder();
builder.begin();
builder.node();
MeshPartBuilder mpb = builder.part("box", primitiveType, attributes, material);
BoxShapeBuilder.build(mpb, width, height, depth);
model = builder.end();

它创建了一个Mesh对象,它是一个 OpenGL 资源,仅包含(取决于属性)8 或 24 个顶点和 36 个索引。除非它是您唯一想要渲染的东西,否则如此小的 Mesh 对性能非常不利。 .

这是因为每个 Mesh (或 Node 的(部分))意味着渲染调用。这意味着它必须等待先前的渲染调用完成并且CPU和GPU同步。将尽可能多的形状组合成一个 Mesh 的性能会更高。并立即渲染它。毕竟,GPU 旨在同时在许多顶点上并行执行。

这与为什么例如SpriteBatch在渲染之前组合尽可能多的 Sprite 。这也是为什么使用单个TextureAtlas的原因比使用单独的纹理具有更好的性能。

因此,如果您使用仅包含单个框的模型创建体素引擎,那么您最终将得到数千次渲染调用。那会非常慢,以至于你的游戏几乎无法玩。

当然,解决这个问题很简单,只需在零件中添加多个框即可:

ModelBuilder builder = new ModelBuilder();
builder.begin();
builder.node();
MeshPartBuilder mpb = builder.part("box", primitiveType, attributes, material);
BoxShapeBuilder.build(mpb, x1, y1, z1, width1, height1, depth1);
BoxShapeBuilder.build(mpb, x2, y2, z2, width2, height2, depth2);
//...
BoxShapeBuilder.build(mpb, xn, yn, zn, widthn, heightn, depthn);
model = builder.end();

ModelBuilder#createBox (和其他创建方法)隐藏了这个逻辑,这使得了解幕后发生的事情以及优化它的容易程度变得不那么明显。因此,有一天我可能会删除这些方法。不幸的是createXXX方法对于学习 3D API 的新手(例如我在我的博客上的 tutorials 中使用它)非常有帮助,因为他们想要快速入门。这就是我仍然没有删除它们的原因。

顺便说一句,使用 ModelBuilder对于体素引擎来说是一种杀伤力。您可能想看看this tutorial相反,我展示了一种在运行时组合简单形状的简单方法。最新版本的 libGDX 甚至包含 ShapeCache ,它实际上可以直接用作体素 block 。

我不确定为什么您会认为在建模应用程序中创建盒子与通过代码创建盒子有什么不同。也许您可以链接到您找到该内容的引用文献。

关于java - 为什么我不应该使用 LibGDX 的 createBox 或 createRect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37353883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com