Будучи программистом приложений, ориентированных на веб и БД, я обладаю знаниями в таких структурах данных, как списки, деревья, графики и т. Д. Я честно использую очень мало этих алгоритмов структуры данных в своем коде, за исключением сортировки вещей в простых массивах, так как я почти полностью работал с клиент-ориентированными средами, в которых были встроены все основные функции. Я знаю C, PHP, Java, HTML, PL / SQL и MySQL. В настоящее время я изучаю Python.
Я хочу начать с разработки игр. Я видел другие вопросы, касающиеся предложений, советов и подходов к разработке игр для начинающих. Я понимаю это, и с ответами все понятно. Через несколько дней после публикации я прочитал статью « Пишу игры, а не двигатели» и понял, что должен создать игру, прежде чем создавать игровой движок. Тем не менее, у меня есть вопросы.
Моя цель состоит в том, чтобы
- Улучшить свои навыки программирования на уровне ядра, включая использование алгоритмов структуры данных, математических и физических понятий.
- Реализуйте хороший игровой движок, чтобы побаловать себя кодированием на уровне ядра.
- Проложить свой путь в область исследований ИИ.
Какие конкретные математические, физические, AI и общие понятия должен знать программист, чтобы разработать игровой движок?
источник
Хотя может быть уместно спросить, какие структуры данных чаще всего используются при разработке игр, гораздо правильнее спросить, какие структуры данных используются для конкретных задач. Я могу легко утверждать, что хеш-таблицы очень распространены в играх, но это не скажет вам ничего полезного с точки зрения того, когда и где использовать (а не использовать!) Хеш-таблицу в вашем собственном коде. :)
С точки зрения математики, вы должны иметь очень сильное понимание линейной алгебры (векторы, матрицы, решение линейных систем и т. Д.), Очень сильное понимание тригонометрии и, по крайней мере, базовое понимание исчисления (простые производные и интегрирование) , Любой вводный курс по линейной алгебре на уровне колледжа должен направить вас на правильный путь, если не научит вас всему, что вам нужно знать, чтобы начать работать с общими принципами трехмерной графики. Я также связываю книгу ниже, которая может оказаться весьма полезной.
Для физики вас ждет поездка. Физика может быть разбита на две категории: обнаружение столкновений и реагирование на столкновения. Вы обязательно должны знать математику обнаружения коллизий, так как эта математика более или менее идентична тому, что вам нужно для создания графики (особенно для построения деревьев и карт, необходимых для окклюзии), и вы собираетесь использовать этот материал для много вашей игровой логики, а также.
Реакция на столкновение может варьироваться от «простого» до нелепого уровня запутанности, и даже простые вещи поначалу могут быть не интуитивными. Я очень, очень рекомендую оставить этот материал в существующей библиотеке, такой как Bullet, Havok, PhysX и т. Д. (Или Box2D, если вы работаете над 2D-геймплеем), до тех пор, пока вы не освоитесь с существующей математикой и алгоритмом. знания и решить, что вы хотите узнать, как работают физические двигатели. Тогда я бы порекомендовал вам создать очень простой 2D физический движок в качестве первой попытки. Трехмерные физические движки - безумно сложные звери, и (возможно), безусловно, самая сложная и трудная часть программирования игр, поэтому физические движки являются наиболее распространенной лицензированной сторонней технологией, используемой в играх. Вы просто не видите очень много игр, которые не Я не использую Havok или PhysX в профессиональном мире, несмотря на то, что во многих играх есть собственные графические движки и код ядра. Даже компании, которые занимаются только созданием игровых движков, обычно лицензируют физический движок, например, Unreal просто использует PhysX, а не включает собственный физический движок.
Я бы порекомендовал следующие книги, чтобы вы начали. Первая - книга вводного уровня по основам математики, которую вы должны знать как программист 3D-игр:
http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869
Вторая - книга, в которой детектируются алгоритмы обнаружения столкновений (а не реакции на столкновения!), Которые помогут как с графическим, так и физическим кодированием:
http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323
источник