Хотя может быть уместно спросить, какие структуры данных чаще всего используются при разработке игр, гораздо правильнее спросить, какие структуры данных используются для конкретных задач. Я могу легко утверждать, что хеш-таблицы очень распространены в играх, но это не скажет вам ничего полезного с точки зрения того, когда и где использовать (а не использовать!) Хеш-таблицу в вашем собственном коде. :)
С точки зрения математики, вы должны иметь очень сильное понимание линейной алгебры (векторы, матрицы, решение линейных систем и т. Д.), Очень сильное понимание тригонометрии и, по крайней мере, базовое понимание исчисления (простые производные и интегрирование) , Любой вводный курс по линейной алгебре на уровне колледжа должен направить вас на правильный путь, если не научит вас всему, что вам нужно знать, чтобы начать работать с общими принципами трехмерной графики. Я также связываю книгу ниже, которая может оказаться весьма полезной.
Для физики вас ждет поездка. Физика может быть разбита на две категории: обнаружение столкновений и реагирование на столкновения. Вы обязательно должны знать математику обнаружения коллизий, так как эта математика более или менее идентична тому, что вам нужно для создания графики (особенно для построения деревьев и карт, необходимых для окклюзии), и вы собираетесь использовать этот материал для много вашей игровой логики, а также.
Реакция на столкновение может варьироваться от «простого» до нелепого уровня запутанности, и даже простые вещи поначалу могут быть не интуитивными. Я очень, очень рекомендую оставить этот материал в существующей библиотеке, такой как 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