Как объединить несколько DirectX LP3DXMESH в 1 меш для быстрого рендеринга?

Я читал, что объединение сеток в одну сетку и рендеринг намного быстрее, потому что вы отправляете все свои данные за один раз. Я использую DirectX9.0C, фиксированная функция, C ++. У меня есть много LP3DXMESH, которые я хотел бы объединить и отправить за один раз для рисования.

Я Google для ответа, я получаю нежелательные результаты. Как я могу это сделать?

0

Решение

Объединить несколько сеток в одну довольно просто, следуя нескольким критериям.

Все ваши сетки должны иметь одинаковый размер / расположение вершин (или декларация)

Учитывая, что, скажем, у вас есть 3 модели:
Модель 1 имеет 10 вершин и 21 индекс
Модель 2 имеет 20 вершин и 30 индексов
Модель 3 имеет 25 вершин и 45 индексов

Создайте буфер вершин, который сможет хранить все данные (например: 10 + 20 + 25 вершин)

Скопируйте каждую вершину из Модели 1, затем из Модели 2 и из Модели 3 в этот новый вершинный буфер.

Создайте индексный буфер таким же образом, что и буфер вершин (например: 21 + 30 + 45 индексов)

Теперь для первой модели, просто скопируйте индексы.

Для модели 2 вам нужно скопировать индексы, но добавить 10 к каждому индексу (размер вашего первого буфера вершин).

Для модели 3 вы делаете то же самое, что и для номера два, но должны добавить 10 + 20 (сумма на каждый предыдущий размер).

Создайте свой меш с новым буфером.

По некоторым соображениям:

  • Если вы не будете часто рисовать модели (например, 3 сетки, нарисованные по одному разу), это не принесет вам никакой пользы.
  • Если каждая из ваших моделей должна отображаться с различным преобразованием (которое также часто изменяется), вам также необходимо преобразовать вершины в процессор (что вместо этого даст вам потенциальную потерю производительности) или добавить некоторые дополнительные данные в вашу модель. (например, просто идентификатор), и сделайте свое преобразование в вершинном шейдере, используя любую форму поиска (поиск по массиву или по текстуре является обычным).
  • Использование этой техники может быть действительно полезным в некоторых случаях (например, повторять один и тот же объект несколько раз), но не похоже на ваш вариант использования.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]