Как вы начинаете, когда пытаетесь понять код игрового движка 3D (например, id Tech 3)? - PullRequest
9 голосов
/ 24 августа 2009

Я разработчик C # по большей части. Еще в колледже у меня были занятия по C / C ++, поэтому я «знаю C», и это хорошая причина, по которой я являюсь разработчиком на C #.

Однако у меня никогда не было возможности профессионально программировать на C / C ++, и я хотел бы изучить, как работает современный игровой движок, а также как работает приложение C / C ++ промышленного уровня.

Проблема в том, что я понятия не имею, с чего начать. Например, я скачал движок Quake 3 исходный код (который был переименован id Tech 3 ), и я даже не уверен, с чего начать.

Каким образом защищенные C # / WinForms должны атаковать массивную кодовую базу C, такую ​​как id Tech 3 или какой-либо другой массивный движок AAA?

Ответы [ 6 ]

12 голосов
/ 25 августа 2009

Попробуйте сделать простейшую 3d-программу «Hello World», которая использует самые основные подмножества движка. Это, вероятно, научит вас нагрузкам.

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

4 голосов
/ 25 августа 2009

Написание мода было бы хорошей отправной точкой.

Начало на обозначенной территории: ванильная игра. Изменить вещи. Посмотрите на код отказов гранаты. Заставь его подпрыгивать дальше. Добавьте прогноз на стороне клиента (который уже есть у не прыгучих снарядов).

Добавить телепортационное оружие. Он расскажет вам больше об обнаружении столкновений, чем вы хотели бы знать.

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

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

3 голосов
/ 26 августа 2009

Звучит как шутка, но: найдите функцию main(). Это четко определенная отправная точка выполнения программы, и вы сможете следить за всем оттуда.

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

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

1 голос
/ 28 августа 2009

Андре Ламот в значительной степени научил меня всему, что я знаю о программировании игр. Прочитав эти две книги, вы в значительной степени узнаете все, что вам нужно знать о трехмерных движках.

  1. Трюки Гуру Программирования Игр Windows
  2. Трюки гуру программирования 3D-игр - Продвинутая 3D-графика и растеризация

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

Также, возможно, стоит попробовать NeHe Учебники по Gamedev .

1 голос
/ 25 августа 2009

Если вы ищете другие движки 3D-игр и, возможно, захотите сравнить их друг с другом, см. Dim3:

http://code.google.com/p/dim3/

0 голосов
/ 23 января 2010

Я никогда не был большим поклонником чтения большого готового продукта. И особенно база кода Quake. Есть хорошая вещь, которую вы можете извлечь из этого наверняка, но это не должно быть вашей отправной точкой. Сначала вам нужно изучить некоторые новые концепции, используемые в программировании игр.

Я предлагаю немного приостановить C ++ (если вы хотите сделать игру, вам действительно нужно вернуться к ней в какой-то момент), но сейчас установите XNA. Это такой же отличный фреймворк, как и все .NET. Существует множество руководств по игре XNA.

...