1

首先,我对 3D 编程和 libgdx 很陌生。我看了一些教程,我已经渲染了我想要的场景。我有一些 1x1x1 块,ModelBuilder.createRect()为每个可见面创建,所以如果另一个块覆盖这个块的一个面,则没有为这个块创建矩形。也不需要顶部和底部矩形,因为我永远看不到它们(除了地板)。所以我想,这非常有效。我也Backface culling启用了,我也启用了Viewfrustum culling。但是,如果我朝一个方向看,我的视锥中有很多块,FPS 会下降到 15-20。这对我来说仍然没问题,因为我的笔记本电脑已经使用了 5 年以上,而且它的性能并不是最好的,但这个答案让我思考。

“模型构建器仅用于调试”。好的,但是我应该如何创建我的盒子?为什么我应该Model在建模应用程序(如 Blender)中为简单的正方形创建一个?通过这样做,我什至无法剔除被其他块占据的面。所以我的问题是:我怎样才能以最有效的方式创建和渲染这些盒子?

4

1 回答 1

1

ModelBuilder#createRect 将为每个矩形创建一个新模型。当渲染一个模型实例的(部分)时,它意味着一个绘图调用。因此 ModelBuilder#createRect 效率极低。最好将多个矩形组合成一个(a 的一部分)模型。这可以使用以下方法完成:

modelBuilder.begin();
MeshPartBuilder mpb = modelBuilder.part(....);
mpb.rect(...); // first rect.
mpb.rect(...); // second rect.
// etc.
Model model = modelBuilder.end();

请注意,这对于例如体素引擎来说仍然不够有效。如果您的目标是针对体素进行优化,您可能需要在自定义 RenderableProvider 中构建网格(在平截头体剔除和深度排序之后)。这是一个例子:https ://github.com/libgdx/libgdx/tree/master/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/voxel

于 2014-03-13T21:25:21.370 回答