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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

На всякий случай, если вы ищете другие 3D-движки и, возможно, захотите сравнить их друг с другом, см. dim3:

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

Ответ 5

Andre LaMothe в значительной степени научил меня всему, что я знаю о игровом программировании. Как только вы пройдете эти две книги, вы в значительной степени узнаете все, что вам нужно знать о 3D-двигателях.

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

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

Ответ 6

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

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