Для уточнения ссылки Чака процесс рендеринга нескольких объектов будет зависеть от архитектуры, которую вы выберете.
Каждая модель разделена на несколько секций, равных количеству комбинаций текстур / материалов. Каждый из этих разделов состоит из уникальной комбинации текстуры / материала и будет иметь свою собственную пару буферов вершин / индексов.
Причина этого в том, что HLSL в первую очередь предназначен для работы с одной текстурой и материалом одновременно. Вы привязываете вершины и индексные буферы одной секции к конвейеру вместе с соответствующей текстурой / материалом, выполняете вызов рисования для него, затем связываете буферы / текстуру / материал для следующей секции, пока вся модель не будет отрисована.
Самое интересное, что вам нужно загрузить модель только один раз. Пока у вас есть информация для этой модели, вы можете создавать экземпляры модели, используя одни и те же данные, но разные матрицы позиций. Это позволяет создавать сотни или тысячи копий объекта.
Мой движок с нуля обрабатывает модели следующим образом: во время инициализации используется класс менеджера моделей для загрузки всех различных моделей, которые я использую, и сохранения каждой уникальной модели в классе моделей. Затем я беру указатель на класс модели и передаю его в менеджеры декораций, которые дают информацию о том, в каких контекстах появляется модель. Когда я заполняю игровой мир пейзажами, моя игровая плитка использует класс списка декораций для обработки списка структур экземпляров. и сделать списки. Структура экземпляра содержит такую информацию, как положение / масштаб / ориентация, AABB и указатель на класс модели. В каждом кадре я собираю пейзажи и заполняю списки рендеринга только структурами экземпляров потенциально видимых объектов, а также создаю буфер экземпляра для каждого списка, который будет содержать информацию о положении. Затем я могу перебрать каждый список рендеринга, назначить соответствующие буферы и текстуры и нарисовать indexed instanced () для рендеринга всех копий раздела модели.
Я не уверен, как мой процесс сравнивается с другими механизмами, но он должен служить разумным примером того, как вы можете обрабатывать несколько объектов, а затем несколько экземпляров объектов. Уровни абстракции, которые я имею в своем процессе, были выбраны из-за того, как работает мой движок (генерация случайных миров). Точный метод, который вы используете, зависит от вашего приложения.
Вот базовая диаграмма, показывающая довольно простую настройку: