Импорт сверхлегкой модели XNA (число поли)

1

В настоящее время я пытаюсь импортировать очень большую модель в XNA/Monogame, стальную конструкционную модель с 80 000 000 вершин. Двигатель написан для оптимизации этой модели для визуализации, при этом OcTree и View Frustum отбраковывают работу на уровне ModelMesh.

Недавно я узнал, что операция base.Process по умолчанию в Процессоре модели объединяет вершинные и индексные буферы всего ModelMesh в Модели, за ответ в этом сообщении:

Путаница относительно вершинного буфера модели и индексатора

Это создает проблему, поскольку эта модель превышает максимальный размер VertexBuffer 67108863. В результате, Content Processor даже не позволяет мне создать файл xnb.

В идеале я бы разделил Vertex и Index Buffers на несколько меньших буферов в Content Processor, но сами буферы генерируются в базе данных Model Processor base.Process и, как представляется, впоследствии не редактируются.

Есть ли какой-либо механизм, который я могу использовать для разделения XNA Model Vertex и Index Buffers?

  • 0
    Хм .. зачем тебе такая большая модель?
  • 0
    Возможно, вам лучше импортировать модель в приложение для 3D-моделирования, такое как 3ds или maya, и использовать функцию автоматического сокращения вершин.
Теги:
monogame
xna

1 ответ

1
Лучший ответ

Я решил решить эту проблему. Модели XNA просто не поддерживают множество вершинных и индексных буферов, поэтому решение заключалось в написании крупноформатного пользовательского Content Processor, который возвращает массив объектов ModelContent, а не только один.

Это можно назвать достаточно легко:

Model[] myModel = Content.Load<Model[]>("myModelFile");

... и хотя это потребовало ряда изменений в моих процедурах выбора и рисования треугольников, оказалось, что это относительно простое решение для реализации.

  • 1
    Как вы реализовали пользовательский обработчик контента для возврата массива ModelContent в качестве метода Process, который реализация переопределяет, только один ModelContent. Не могли бы вы пролить свет на это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню