Ресурсы, помогающие изучить движок Quake 3 [закрыто]


14

Существуют ли хорошие ресурсы (руководства, учебные пособия и т. Д.), Чтобы начать изучение кода движка Quake 3 помимо самого кода?

Мне очень интересно знать, как это устроено в образовательных целях и, возможно, сделать некоторые модификации.

Ответы:


13

Итак, вы должны начать с просмотра статьи Википедии об id Tech 3 . Это может быть дополнено резюме выступления Брайана Хука на GDC и некоторыми старыми материалами в блоге Element 61 . В дополнение к этому, вам придется пройтись по куче старых учебников по модам, которые вы сможете найти, чтобы попытаться восстановить происходящее.

Я бы предложил начать с исходного исходного релиза с id, а не с ioquake3 или what-have-you, чтобы действительно увидеть контекст того, что происходит (как обрабатывается ввод и направляется внутри движка, какого рода основное событие структура используется и т. д.).

Некоторые ключевые моменты, которые помогли мне, когда я работал с ним:

  • Всегда есть сервер; может также быть клиентская логика, сидящая сверху обработки кадра.
  • Входная информация направляется сначала на консоль, если это интересно, затем на графический интерфейс, а затем на саму игру.
  • Сам движок отделен (жестко!) От игровой логики, используя функции ловушек. Посмотрите (если память не изменяет) проекты cgame и render, чтобы найти реальный код движка.
  • Логика игры может быть полностью написана для запуска на виртуальной машине Quake 3. Когда вы модифицируете и используете нативные библиотеки DLL, вам нужно будет запустить игру так quake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0, чтобы позволить движку запускать нативный код вместо кода виртуальной машины.
  • Интерфейс для системы меню - это странный, злой, искривленный стек структур и обратных вызовов. Его можно использовать, как только вы его разгадываете, но это может потребовать проб и ошибок. Помните, это стек.
  • Если вы пишете код на нативном .dll, не стесняйтесь выделять память, писать на C ++ или что-то еще, что плавает в вашей лодке. Вы также можете использовать STL - нет никаких оснований строго следовать идиомам C, кроме случаев, когда вы непосредственно взаимодействуете с двигателем.

Некоторые изящные вещи, которые я сделал для этого с коллегой:

  • Простой интерфейс командной строки для вызова команд оболочки из консоли и выгрузки потоков stdout / stderr обратно в консоль (консоль Quake).
  • Интерфейс с базой данных SQL для извлечения и отображения записей.
  • Гибкий набор инструментов для работы с окнами и виджетами для гибкого отображения на клиентском экране (с использованием гистограмм, текстовых полей, графических блоков, контекстных меню, окон с изменяемыми размерами и т. Д.).
  • Медленные ракеты. :)

Лично я обнаружил, что движок - это отличная комбинация действительно умных вещей, сделанных очень глупыми способами, действительно глупых вещей, сделанных действительно умными способами, и действительно умных вещей, сделанных действительно умными способами. Это отличный пример того, как иметь модульность и хороший структурированный дизайн в среднем C-проекте.

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



1

Абсолютно.

http://en.wikipedia.org/wiki/Quake_engine - хороший обзор того, что там есть, но вы можете довольно быстро разобраться в деталях его архитектуры через его цитаты.

Могу ли я также предложить пару книг по архитектуре игрового движка, которые могут в большей степени соответствовать тому, что вы ищете. Хотя они не являются специфичными для Quake, они углубляются в детали конструкции двигателей и работают параллельно со многими аспектами двигателей Quake:

  • Архитектура 3D игрового движка - 978-0122290640
  • Программирование 3D игрового движка - 978-1592003518

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.