Как правильнее сделать загрузку объектов в движке?

Привет.

Хочу просто услышать немного теории о том как правильнее сделать прогрузку объектов в радиусе камеры. В свободное время решил писать простенький движок и все получается пока что... Но сейчас дошло до загрузки объектов из файла. Как это правильнее делать?

Например щас по примеру с сайта Майкрософт у меня есть функция "загрузки геометрии". Где компилируются шейдеры, есть массив с вершинами, индексами и загрузка текстур, а потом в функции рендеринга я просто рисую кубики (изменяя их позиции через XMMatrixTranslation) через цикл, вершины которых были загружены в буфер в загрузке "геометрии".

Теперь вопросы по загрузке объектов из файла...
Я так понял нужно создать один файл где будут вершины абсолютно всех объектов и их индексы, при запуске игры все это загонять в массив, а потом динамически подгружать их текстуры исходя из координат камеры чтобы они не засоряли память. Правильно мыслю? Но вот тут я не знаю как поступить с текстурами... Вообще немного не понял как работают текстуры. Сейчас у меня в загрузке геометрии вот такие строки
dHDlUPVp5M8.jpg

И эта текстура встает на весь кубик
7-Lr1KjuLXE.jpg

А как мне например сделать чтобы была покрыта этой текстурой только одна сторона? Или же на разных сторонах разные текстуры. И вообще как грузить сразу несколько текстур на разные объекты?

Или же будет правильнее на каждый объект создать отдельный файл? Но как их тогда загружать в массив с вершинами и индексами? Если в одном файле могут быть одинаковые индексы...
  • Вопрос задан
  • 1020 просмотров
Пригласить эксперта
Ответы на вопрос 1
@hacenator
Логично предположить что объекты могут дублироваться поэтому писать все в один файл нет смысла. Один файл на объект. Несколько инстансов одно объекта можно рисовать за один вызов (DrawCall), передавая в шейдер массив матриц для всех объекта.
Дальше верно - перед отрисовкой делаем culling - проверяем попадает ли объект в область видимости камеры и не перекрыт ли он другим объектом.
Для оптимизации работы с текстурами прогружают только некоторые уровни детализации (LOD), начиная с самого маленького размера. Чем ближе камера к объекту тем большая детализация используется. Текстуры действительно можно выгружать/загружать на ходу. Но нет смысла прям постоянно гонять их туда-сюда, от этого приложение быстрее не станет, надо исходить из объема свободной памяти и частоты использования текстуры.
Текстуры накладываются по текстурным координатам. Т.е. каждой вершине соответствует некоторый тексель на текстуре далее наложение выполняется с помощью интерполяции, таким образом текстура "заливает" всю грань треугольника. Также вся эта логика наложения и смешивания определяется шейдером (пиксельным) с помощью чего и достигаются различные визуальные эффекты - освещение, тени, отражение. Обычно чтобы залить один объект используется одна текстура, в том плане что если одна сторона должна быть красная а другая зеленая, то будет одна текстура где есть и красная и зеленая часть, а не две разных текстуры. Просто она соответствующе накладывается на объект.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 21:17
5000 руб./за проект
28 мар. 2024, в 20:46
150000 руб./за проект
28 мар. 2024, в 20:37
50000 руб./за проект