13 Дек 2019 - 22:02:56
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
   Начало   Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Создание простейшего движка, с разработкой собственной физики (Simple Runner)
Robot

Сообщений: 653


Робот УралДев
Просмотр профиля
« : 24 Май 2010 - 23:36:20 »

Создание простейшего движка, с разработкой собственной физики (Simple Runner)
Антон Овчинников "CoderAX27"

В статье представлено описание основных компонентов, необходимых при начальном создании
собственного простейшего движка с элементарной физикой, на основе процедурного подхода.


http://www.uraldev.ru/articles/id/38
Записан
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #1 : 25 Май 2010 - 13:49:33 »

[!--quoteo--][div class=\'quotetop\']ЦитПервым делом следует рассмотреть обновление состояния и положения персонажа в пространстве:
//фрагмент кода
Вторым шагом следует обратить внимание на столкновение персонажа с ландшафтом
//фрагмент кода
Пришло время рассмотреть главную функцию, отвечающую за физику:
//фрагмент кода
...

Это не статья, а ОЧЕНЬ КРАТКОЕ описание назначений ф-ций движка.
Раздражает обилие орфографических, смысловых и пунктуационных ошибок.

Сам код тоже не шик. Чего стоят длинные свитчи - проверки типа объектов. При добавлении нового типа объектов придётся вносить изменения во все свитчи.

Фактически все константы, описывающие поведение игровых объектов, внесены непосредственно в код, типа того:
[!--quoteo--][div class=\'quotetop\']div class=\'quotetop\']Цита
« Последнее редактирование: 25 Май 2010 - 13:59:19 от Mikle » Записан
Sergio

Сообщений: 52


159814203 Сергей TundraMobile
Просмотр профиля WWW
« Ответ #2 : 25 Май 2010 - 14:08:45 »

Mikle суров, но прав. Сам я пока статью не читал - только просмотрел. Оооочень много кода, часть которого можно было бы просто оставить в архиве с исходниками и ссылаться на них.
Записан
kore3d
Юзеры

Сообщений: 31

146735863 Евгений ИЦ Графика
Просмотр профиля WWW
« Ответ #3 : 25 Май 2010 - 19:40:33 »

выскажу свое местами субективное мнение
1. в корне не согласен с особенностями 1 и 2, они только еще больше запутывают, 1 диаграмма классов может, в принципе, представить всю архитектуру движка подобного уровня
2. мне лично было бы интересно почитать про использование xAudio
3. виртуальный полиморфизм пригодился бы в движке
4. структуры данных очень перегружены полями, изменение одной сущности могут задеть логику других
5. тема менеджмента сцены не раскрыта, ну там иерархии, нодов, сборки батчей и т.п.
6. физика толком не раскрыта, не хватает описания алгоритмов - код это не главное. Код может написать любой человек знающий синтаксис языка, а как его писать - это дело вкуса.
7. я бы вынес всю физику на скрипты
8. в статье все слилось: рендер, физика, геймлей

Итого, имеем описание внутреннего устройства движка, которое может пригодится в случае его развития третьими лицами, но малополезно для изучения алгоритмов и методов используемых при разработке движка.

Вообще, тема проектирования и разработки движка очень сложная и не стоит разочаровываться, что не сразу все получается. Я сам когда-то потратил немало времени на проектирование рендера - перепробовал различные прототипы, собрал различные грабли. Но я не поделился опытом, а вы изложили ваш подход к решению проблемы и это очень хорошо. Правда, все было бы куда более замечательнее, если бы вы не увлеклись деталями, а раскрыли общие проблемы и пути их решения.
« Последнее редактирование: 25 Май 2010 - 19:40:58 от kore3d » Записан
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #4 : 25 Май 2010 - 20:25:32 »

Mikle,
[!--quoteo--][div class=\'quotetop\']/div][div class=\'quotemain\'][!--quotec--]То, что в статье названо физикой - это скорее геометрия, простая проверка коллизий. А вся физика ограничивается этим (я утрирую):

Цитата

// Перемещение вперед
step_up += 1.0f;
...
// Перемещение назад
step_up -= 1.0f;[/quote]

Хм, это далеко не физика, а всего-лишь сообщение о том что персонаж должен сдвинуться с места... обработка сдига идет дальше, в которой настраиваются вектора перемещений

translateXZObject(&pl[agp].vec.x, &pl[agp].vec.z, pl[agp].rot.y, step_up*Delta, step_right*Delta);

и это не физика, а всего-лишь геометрия,почти вся физика которая есть реализована в ф-ии

void UpdatePl(int gp, float timeDelta);


[!--quoteo--][div class=\'quotetop\']Ц
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #5 : 25 Май 2010 - 20:58:43 »

kore3d, отвечаю на ваши вопросы...

[!--quoteo--][div class=\'quotetop\']Цита
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
kore3d
Юзеры

Сообщений: 31

146735863 Евгений ИЦ Графика
Просмотр профиля WWW
« Ответ #6 : 25 Май 2010 - 21:18:04 »

можно попробовать почитать Game Engine Architecture, JASON GREGORY
http://rapidshare.com/files/371763730/GEA.zip.html пас - teaseme
Записан
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #7 : 25 Май 2010 - 21:23:25 »

Спасибо, за предоставленную информацию
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #8 : 26 Май 2010 - 00:42:12 »

[!--quoteo--][div class=\'quotetop\']Цит
Код:
        // Обрабатываем столкновения, в зависимости от типа объекта
        switch (objects[i].modelColl)
        {
        case objType::vb_kit: // Аптечка
           CollisionsPlwithKit(gp,i);
           break;
        case objType::vb_armour: // Броня
           CollisionsPlwithArmour(gp,i);
           break;
           ........
Представь, что все аптечки, броньки и т. п. - это классы, унаследованные от базового класса, и в каждом классе переопределяется ф-ция CollisionsWithPl. Тогда весь свитч заменится одной строкой вызова этой ф-ции объекта objects. И всё! И если ты добавишь новый класс (тип игровых объектов), то только допишешь в нём соответствующую ф-цию. Ничего в других местах менять не придётся.
Даже если оставить процедурный подход, можно хотя бы держать список типов игровых объектов не в константах, а в массиве интов, тогда вместо свитча будет цикл (а для ф-ций держать массив указателей... небезопасно, конечно, лучше, всё-таки, ООП).
[!--quoteo--][div class=\'quotetop\']Ц
Записан
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #9 : 26 Май 2010 - 19:57:24 »

Mikle, спасибо за ответ! Мне понравилась эта идея, правда, я ее уже обдумывал раньше, но немного "кривовато"... вобщем я таким обрахом хотел связать воедино персонажей и обычные объекты, т.е. создать всего ДВА производных объекта от базового, но связи с разобщенностью данных, я не стал зацикливаться на этом...

Сейчас когда я перевожу двиг на ООП эта проблема стала куда актуальнее, ведь в данном случае главной целью является, устранение хаоса в коде. Однако хочется на этот раз сделать его максимально эффективным!

В новом двиге уже есть: растительность, ландшафт, небо,поддержка мешей (*.x), создание стандартных примитивов в буферы, базов класс для интерфейса и так еще по мелочи...


  Кстати, вы не знаете, как устроены внутри обычные меши? просто вывод сильно детализированных объектов оказывается очень дорогим, следовательно, и вывод большого количества малодетализированных объектов будет малоэффективен... можно ли преобразовывать меши в буферы? есть ли в этом смысл? используются ли буферы в современных движках и что взять за основу для обычных объектов, независимо от типа? и наконец как это делается в современных движках?

P.S. просто хочется все делать так что бы потом не переделывать...

Жду ответа
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
Mikle
Юзеры

Сообщений: 148


< Михаил
Просмотр профиля E-mail
« Ответ #10 : 26 Май 2010 - 20:22:37 »

У меша есть ф-ции GetVertexBuffer и GetIndexBufer - они возвращают указатели на VertexBuffer и IndexBufer, которые уже есть в меше. Использование буферов напрямую может дать некоторое ускорение только на очень маленьких объектах.
Для повышения производительности используют LOD (Level of Detail) - зависимость детализации от расстояния, смотри в SDK пример, называется, кажется, Progressive Mesh.
Записан
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #11 : 26 Май 2010 - 22:00:41 »

Вместо Progressive Mesh, в sdk есть похожий пример EnhancedMesh (версия февраля этого года), но цель его совсем другая - расширение сетки, за счет увеличения вершин графа модельки, но это не то... кстати у меня в двиге есть ф-ия, которая загружает мешь, а после обрабатывает ее с учетом лод параметра (который находится в самой ф-ии(я ее просто давным давно забросил...)), но и это негодится, т.к. производительность низская и работает лишь при создании, а не выводе.

Кстати, я как-то встретил один парадокс, в одном исходнике, вобщем там в результате оптимизации мешей методом OptimizeInplace производительность при рендере ухудшалась где-то в 1.5-2 раза, с чем это связано непонятно...
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
kore3d
Юзеры

Сообщений: 31

146735863 Евгений ИЦ Графика
Просмотр профиля WWW
« Ответ #12 : 27 Май 2010 - 15:16:37 »

особенности конкретной карточки
например, размер PreTnL кэша
Записан
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #13 : 27 Май 2010 - 16:35:05 »

Да точно, у меня было похожее недоразумение, когда на Nvidia Geforce FX 5700, вывод определенного количества спрайтов производился отлично, а на Mobility Radeon HD 3650, c сильными тормозами, когда большенство попадало в проекцию видимости
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
CoderAX27
Юзеры

Сообщений: 350


Rungine.ru, Stu27.com

team@Stu27.com Антон Rungine
Просмотр профиля WWW E-mail
« Ответ #14 : 04 Июн 2010 - 22:03:09 »

kore3d

[!--quoteo--][div class=\'quotetop\']Цитаhttp://rapidshare.com/files/371763730/GEA.zip.html пас - teaseme[/quote]

я наверно немного припоздал, но там сканы верхногами ))))
у меня, даже, возникла мысль перевернуть ноут)))

P.S. проблемы со временем... потом как-нибудь распечатаю... еще раз спасибо)))
Записан

Мои проекты:
Rungine.ru - простой игровой 2д движок
Stu27.com - Профессиональная разработка сайтов
Страниц: [1]
  Печать  
 
Перейти в: