java - 使用 Libgdx 进行高效 3D block 渲染

标签 java performance 3d libgdx culling

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

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

最佳答案

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

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

关于java - 使用 Libgdx 进行高效 3D block 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347445/

相关文章:

java - 将相机缩放到非常接近 3D 形状的有效方法?

swift - 如何将相机朝其面向的方向变焦?

java - 如何创建选项卡 - Jquery 或 JSF

Linq 到对象 : filtering performance question

javascript - WebGL : When using THREE. MeshFaceMaterial,每个面都有不同的方向

excel - 使用相对引用

c# - out 用于多个输出值或返回组合值类型更好吗?

java - MongoDB Java API : Full-text search

java - 在数据类型为动态的arraylist中查找null并在java中对其进行排序

java - 在模块类中发现重复的类