有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于Libgdx的java高效三维块渲染

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

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