Войти
ПрограммированиеФорумГрафика

Игровой движок. Создание с нуля. (8 стр)

Страницы: 15 6 7 8 9 10 Следующая »
#105
23:28, 7 ноя 2009

В LВ 
Свет - компонента энтити.
Зачем её делать сущностью? Что она имеет общего с другими сущностями (в твоём случае с Human, Animal и т.д.)?

#106
0:34, 8 ноя 2009

Subject
>>Свет - компонента энтити.
Тогда для каждого ентити будет храниться свет, а если этот свет поменялся? Всем всем всем энтити переписываем? Имхо неудобно чутка)

            GameObject
                  |
                  -----------------------------------------------------------------------
                  |                                                                                      |
              Entity                                                                              Lights
                  |
      -----------------------------------------
      |                                                |
StaticEntity                            DynamicEntity
      |                                                |
(всякая статичная          --------------------------------   
геометрия уровня            |              |              |
например стена)        Human    Animal    Vechicle

#107
4:08, 8 ноя 2009

MrShoor
Недопонял мысль про

> Тогда для каждого ентити будет храниться свет, а если этот свет поменялся? Всем
> всем всем энтити переписываем?

Зачем свет для каждого энтити? Энтити - опционально.
Если поменялся - меняем. какие трудности?

#108
4:12, 8 ноя 2009

>>Свет - компонента энтити.
Следовательно энтити хранит как минимум ссылку на объект света. Я правильно понял?

#109
4:49, 8 ноя 2009

MrShoor
Не-а.
Энтитя не содержит в себе изначально ни указателей на модель/свет/звуки/физ.тело ни Behavior-класс.\
Всё это можно к ней приаттачить на стадии создания игровых уровней.

#110
4:54, 8 ноя 2009

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

#111
4:56, 8 ноя 2009

MrShoor
Т.е. ключевая идея в том, что энтитя как таковая - просто набор пропертей.
Проперти - это может быть как модель/источник света, так и health, например.
Когда аттачим к энтити какую-либо проперти, она (пропертя) регистрируется в глобальном манагере сообщений, который подписывает определённые подсистемы на события от энтити (для модели - это рендер, для физ. тела - физ. модуль и т.д.).
Плюс назначаем для энтити класс поведения/ скриптовую функцию апдейта/ещё какую-нить хрень (нужное подчеркнуть).
Любым из вышеперечисленных способов настраиваем поведение энтити в игровом мире (например, объект№1 рендерится на расстоянии 10 метров, а объект№2 - нет, или например в кадре может быть только 500 пуль, выпущенных из автомата и т.д.) и при апдейте, исходя из настроенной логики, посылаем через менеджер сообщений определённую мессагу определённой подсистеме.
Естественно тут нужен некий Depedency Graph, чтобы определить последовательность обработки пропертей (сначала считаем физ. повреждения, затем на основе этого рассчёта рендерим определённую деформацию и воспроизводим определённый для данной деформации звук).
Как-то так.
Получаем полную абстрагированность сущностей игрового и графического движков, т.к. не нужно им друг про друга знать.

#112
5:09, 8 ноя 2009

Subject
пусть у нашей ентити есть свойство свет и хранится там ID=2341
следовательно, для отрисовки нашей энтити необходимо послать что то типа запроса менеджеру, в котором передать инфу о модельке, текстуре, и этот самый ID=2341 лампочки которая светит на объект. Так?
Тогда наш менеджер ковыряется в объектах графдвижка и устанавливает нужный свет. При этом получается что каждый рендер мы занимаемся тем что ищем по ID необходимый нам источник света. Так?

#113
5:23, 8 ноя 2009

MrShoor
В общих чертах - да.
Но я ни в коем случае не утрверждаю, что это истина в последней инстанции.)
Так что с удовольствием выстушаю альтернативные варианты.

#114
7:35, 8 ноя 2009

В чем различие для графического движка сущности Human и сущности Animal? Разве не те же самые SkinnedMesh по сути?

#115
9:14, 8 ноя 2009

chemodansama
Тоже не совсем понял такого разделения. Одна и та же сущность, имхо.

#116
14:54, 8 ноя 2009

chemodansama
> В чем различие для графического движка сущности Human и сущности Animal? Разве
> не те же самые SkinnedMesh по сути?
да что вы все к графическму привязались то? Тема об ИГРОВОМ!

У меня КОМПОНЕНТНАЯ система сущностей - каждая сущность хранит в себе компоненты.. например графический компонент.. а что в нём - для сущности не важно! хоть Skinned хоть Static - пофиг!

Как у мну всё работает:  апдейтися ИГРОВАЯ сцена, в процессе апдейта ИИ, контроллеры и т.д. меняют свойства объектов...  одни контроллеры меняют другие..  и т.д.

далее для каждой модели, если она содержит графический компонент, вызывается у этого компонента метод Render().  В этом методе графический компонент добавляет себя в очередь в сценеграф графического движка.  У сценеграфа вызывается Render()  -  мы обновляем трансформацию узлов сцены и т.д., находим количество пассов их типы (например камера снимает видео и его показывают по телику а главная камера показывает этот телик.  Для каждой камеры выполняется BuildScene()  который куллит сцену и т.д под указанную камеру и рендерит.  Про свет - для моделей, у который выставлен флаг LMF_LIGHTING, из списка активных источников света находятся те, которые хоть както на модель могут светить (свет от них попадает на модель) и передаются в шейдер!  Свет у меня пока только динамический (нету статичного)

Да, написал жостко, но если перечитать раза 3, то, наверно, можно понять : )

#117
15:18, 8 ноя 2009

>1)Насколько движок на классах тормознее(быстрее) его аналога на структурах и функциях,
>если допустить, что теоретически есть такие движки.

Несомненно движок автор которого свято верит в то, что ООП спасет мир тормознее движка, автор которого не поддается влиянию язычества.
На сколько? Сложный вопрос. Где-то видел сравнение функции sprintf с ее аналогами в С++
Там были потоки и бууст.
Так вот все они медленнее sprintf() на порядок (10-15 раз)
что-то подобное (потоки) воротят и создатели ООП движков. Ну я думаю ООП движек в 5 раз будет медленнее, чем не ООП.
Да да в 5 раз, вы этого не очень замечаете, потому, что движок в основном вызывает API функции(WinAPI OpenGL DirectX звук там  т.д) и ждет, пока с диска прочитается еще одна текстурка.

Но все не так плохо.
В большей степени на скорость влияют алгоритмы.
потом уже ООП
и далее inline asm и прочие микрооптимизации.

#118
21:34, 8 ноя 2009

Subject
> Свет - компонента энтити.
нет, свет это отдельная сущность со своими контроллерами и т.д.
у света также может быть графический компонент (для редактора - рисуем лампочку)

вот новый вопрос:  есть сущность  AreaTrigger и Explosive.    Нужно сделать так, чтоб в редакторе к событию AreaTrigger.OnEnter привязать Explosive.Explode..  как оное сделать то лучше,есть идеи?

#119
13:32, 9 ноя 2009

Pokimon
> Да да в 5 раз

я думал что мамонты уже вымерли, ан нет)

Страницы: 15 6 7 8 9 10 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.