Эффективный 3D-рендеринг блоков с Libgdx

Начнем с того, что я довольно новичок в 3D-программировании и libgdx. Я посмотрел несколько уроков и уже отрисовывал сцену, которую хочу. У меня есть блоки 1x1x1, созданные с ModelBuilder.createRect() для каждой видимой грани, поэтому, если другой блок покрывает грань этого блока, для этого блока не создается прямоугольник. Также верхний и нижний прямоугольник не нужны, так как я их никогда не вижу (кроме пола). Поэтому я подумал, что это довольно эффективно. у меня тоже есть Backface culling включен и я делаю Viewfrustum culling, Тем не менее, если я смотрю в направлении, где много блоков в моем viewfrustum, FPS снижается до 15-20. Это все еще хорошо для меня, так как моему ноутбуку более 5 лет, и его производительность не самая лучшая, но этот ответ заставил меня задуматься.

Msgstr "ModelBuilder используется только для отладки". Хорошо, но как мне тогда создать свои коробки? Почему я должен создать Model в приложении для моделирования (например, Blender), для простых квадратов? Делая это, я не мог даже отбирать лица, которые заняты другими блоками. Поэтому мой вопрос: как я могу создать и визуализировать эти блоки наиболее эффективным способом?

1 ответ

Решение

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

Другие вопросы по тегам