Vlad2001_MFS
> Держи статью
Почитал. Ну это вообще не то. Это опыт начинающих разработчиков, о том, с какими подводными камнями они столкнулись.
Рендерер не должен заниматься никакой организацией сцены, он про сцену ничего знать не должен. В идеале рендерер имеет на входе список видимых объектов (или сам отсекает) и просто их рисует. А что это за объекты ему знать не положено. Только на уровне типов - уровень, модель, биллборд, декаль, источник света.
За организацию объектов что можно сказать. Объекты организуются без привязки к какой-либо подсистеме движка.
Это просто список объектов. Есть базовый класс, который включает в себя те переменные, которые гарантированно используются для рендеринга, звука, передачи по сети. Если устройство объекта не укладывается в базовый класс, от него берётся наследование, но с таким расчётом, чтобы в конечном итоге заполнить эти базовые переменные валидными значениями. Т.е. для монстра это будет поиск пути, для физ.объекта - физика. Но в конечном итоге у нас получаются значения позиции объекта и его поворота. Эти значения по сети передаются на клиент (если есть сеть), далее звуковой движок играет звуки, из центра этой позиции, рендер рисует модель на этой позиции. В эту схему укладывается практически любая архитектура. Принципиальная разница только в том, где это всё организовано - на клиенте или на сервере, иными словами как выполняется синхронизация объектов.
g-cont
Какие звуки издают источники света? Где в игровом мире находится таблица очков?
innuendo
> std::vector<RendeSceneObject*> для начала
Отлично, у нас есть эта штука.
Какой интерфейс у RenderSceneObject и как, имея этот список, нам его отрисовать?
Дай угадаю... foreach(object in objects) { object->render() }?
g-cont
> В идеале рендерер имеет на входе список видимых объектов (или сам отсекает) и
> просто их рисует. А что это за объекты ему знать не положено. Только на уровне
> типов - уровень, модель, биллборд, декаль, источник света.
Этот подход плох тем, что для добавления объекта нового класса тебе придется протягивать эту зависимость через весь код. Тогда как в ECS нужно добавить только компонент и систему для нового класса.
-Eugene-
> Дай угадаю... foreach(object in objects) { object->render() }?
foreach(object in objects) { object->applyPass(currentPass); }
Подойдёт ?
Delfigamer
> Какие звуки издают источники света? Где в игровом мире находится таблица очков?
Любые. Таблица находится вне мира.
clc
> Любые.
Зачем?
clc
> Таблица находится вне мира.
Какие значения позиции и поворота соответствуют местонахождению "вне мира"?
-Eugene-
> Тогда как в ECS нужно добавить только компонент и систему для нового класса.
Один только вопрос. Ты работал с компонентами на реальных проектах или только статьи читал ?
innuendo
> Один только вопрос. Ты работал с компонентами на реальных проектах или только
> статьи читал ?
Если называть реальным проектом наколенную игру мечты, то да.
> Подойдёт ?
А теперь вопрос. Как добавить инстнсинг?
innuendo
> Вопрос закрыт ?
Конено закрыт, а что тут обсуждать то? Про твои тупые вопросы, не относящиеся к теме? как любишь цепляться ко многим на форуме?
>foreach(object in objects) { object->applyPass(currentPass); }
>Подойдёт ?
-Eugene-
> Какой интерфейс у RenderSceneObject и как, имея этот список, нам его
> отрисовать?
> Дай угадаю... foreach(object in objects) { object->render() }?
> -Eugene-
> > Тогда как в ECS нужно добавить только компонент и систему для нового класса.
> Один только вопрос. Ты работал с компонентами на реальных проектах или только
> статьи читал ?
Запасаюсь попкормом.
Andrey
ну так-то иннуендо прав) довольно часто в реальной жизни хочется как в статье, компоненты, орхетектура. А на самом деле сделать продукт нужно вчера. И там уже не особо-то орхетектурят.
Andrey
> Запасаюсь попкормом.
> Про твои тупые вопросы, не относящиеся к теме?
Диабет только не заработай :)
А твоё постоянное "убогое апи" - это не тупое ? :)
Давай, сделай или переделай демку про истансинг что-ли
-Eugene-
> Если называть реальным проектом наколенную игру мечты, то да.
Жаль. Очень хочется послушать за практику на коммерческих проектах
> > Подойдёт ?
> А теперь вопрос. Как добавить инстнсинг?
Внутри applyPass сделать проверку на повторение геометрии ?
innuendo
> Жаль. Очень хочется послушать за практику на коммерческих проектах
Мне тоже жаль.
> Внутри applyPass сделать проверку на повторение геометрии ?
Каким образом? Типа, если рисуем ту же геометрию, сливаем данные, а если не ту же, то рисуем?
-Eugene-
> > Внутри applyPass сделать проверку на повторение геометрии ?
> Каким образом? Типа, если рисуем ту же геометрию, сливаем данные, а если не ту
> же, то рисуем?
Есть другие варианты?
Это паттерн visitor, при обходе элементов создаётся массив renderObject - при этом можно проверить на повтор геометрии
Andrey
> > std::vector<RendeSceneObject*> для начала
> о да. сразу чувствуется опыт.
Ну да, покажи свой опыт. Как там, уже работает редактор с id ? :)
Тема в архиве.