Вопрос достаточно простой: какой математикой должны обладать все игровые программисты, чтобы быть успешными?
Я не говорю конкретно о рендеринге математики или чего-либо еще в нишевых областях игрового программирования, а точнее о вещах, о которых должны знать даже игровые программисты, и если они этого не сделают, они, вероятно, найдут это полезным.
Примечание: поскольку нет правильного ответа , этот вопрос (и его ответы) является вики сообщества.
Кроме того, если вы хотите получить необычные математические уравнения латекса, не стесняйтесь использовать http://mathurl.com/ .
software-engineering
mathematics
тетрадь
источник
источник
Ответы:
Есть много других форм математики, которые полезны, но в абсолютном минимуме вы должны знать это:
Они довольно простые, но если вы их не знаете, у вас не будет даже шанса стать программистом, не говоря уже о разработчике игр.
Объекты в игровом мире представлены векторами. Вектор представляет такие вещи, как положение объекта, направление взгляда и скорость. Расчеты по векторной математике, такие как нормализация точечных произведений , кросс-произведений и векторов, имеют важное значение.
Как мне переместить мой игровой объект? Новичок может сказать:
«Я знаю! Я просто сделаю:»
object.position.x++
.Нет нет нет. Вам нужно использовать векторный расчет. Объекту требуется положение, направление и вектор ускорения, которые вы можете использовать для перемещения объекта. Если вы сделаете новичок, вы застрянете в неуправляемом беспорядке, и как заставить его двигаться в направлении, не совпадающем с мировой осью XYZ?
Основная причина, по которой игры используют кватернионы, заключается в том, что они представляют повороты почти так же эффективно, как и углы Эйлера, не страдая от блокировки карданного подвеса . Gimbal Lock начинается, когда любой угол Эйлера достигает поворота на 90 градусов вокруг любой оси: вы сразу теряете степень свободы. Кватернионы решают эту проблему, добавляя четвертое измерение. Если вы придерживаетесь углов Эйлера, вам придется ограничить одну ось, чтобы она никогда не вращалась более чем на ~ 89 градусов.
Если вы собираетесь программировать математику для ответов физики в игре, то посещение урока физики не было бы плохой идеей.
Причины, почему вам нужно знать физические уравнения:
Если вы используете физический движок (или игровой движок, в котором встроен физический движок), вы можете получить немного знаний о физике. Тем не менее, неплохо знать, когда вам нужно испачкать руки, потому что физический движок не работает должным образом.
источник
Я мечтаю о том дне, когда разработка игр будет так же ориентирована на данные, как и художественное производство. Я не вижу этого нигде на горизонте, поэтому на данный момент знание математики представляется необходимостью.
Математика похожа на технику, чем больше, тем лучше, если вы можете ее применять.
Вот порядок важности, который я вижу.
Я мог бы продолжать идти. Чем больше вы знаете, тем лучше, но изучение математики не означает, что вы сделаете отличную игру, но это может помочь.
источник
Самой основной является теорема Пифагора. Также известен как формула расстояния.
где
a
иb
- ребра прямоугольного треугольника иc
является гипотенузой. Это означает, что для того, чтобы найти длину вектора, вы делаете это:Еще одно интересное замечание: если вы просто сравниваете расстояния, вам не нужно брать квадратный корень (что может быть относительно дорого). Вот почему большинство каркасов имеют функцию «квадрат расстояния» или «квадрат длины» для своих векторов.
источник
sqrt(V dot V)
это его длина. Итак, расстояние между двумя точками равно:sqrt((A-B) dot (A-B))
Даже если вы не The Graphics Guy, вы будете использовать векторы и векторную математику в 80% случаев. Они лук нашего веселого болоньезе.
источник
Фирма схватывание
+
,-
,*
, и/
. Без них ты полностью облажался.источник
Да, программирование игр, как правило, довольно математично. Какая математика вам нужна, зависит от того, над чем вы работаете. Конечно, базовая арифметика обязательна, как и во всех программах. Сверх того:
Геометрия жизненно важна для любой графической работы. Если вы хотите отображать вещи на экране, вам необходимо понимать системы координат. И если вы хотите переместить их во что-то кроме кардинальных направлений, вы будете полностью потеряны без четкого понимания синусов, косинусов и векторов (основной триггер). А если вам нужно работать в 3D, требования к геометрии и триггерам становятся намного сложнее.
Если вы хотите смоделировать какую-либо дистанционно реалистичную физику, для этого вам понадобится исчисление. (Это то, что заставило Ньютона изобрести исчисление, в конце концов.)
Любые вычисления вероятностей требуют знания статистики и теории вероятностей, чтобы получить разумные результаты без безумных проб и ошибок.
Там, вероятно, гораздо больше, но это то, что приходит на ум прямо из головы.
источник
s=u.t + a.t.t/2
. Вам нужно триг, чтобы получить начальную скорость, хотя (и).По крайней мере, вам нужно.
Вы также захотите иметь хотя бы практические знания об операциях с векторами и знать, что такое матрица и для чего ее можно использовать, хотя подробности не будут строго необходимыми.
Если вы хотите заняться графическим программированием, вам понадобится гораздо больше математических знаний, но общее программирование геймплея не обязательно должно быть настолько интенсивным по математике.
источник
Двоичные и шестнадцатеричные системы нумерации и как их преобразовать в / из десятичных чисел.
Хотя обычно вам не нужно работать с необработанными двоичными числами, они часто используются для переменных Flag, которые требуют логической логики и сдвига битов.
Шестнадцатеричный код не так важен (если только вы не хотите обрабатывать 0xDEADBEEF ), но как минимум вы захотите узнать, когда они используются и почему.
источник
Boolean
иbinary
перепутали. Не уверен, что они абсолютно необходимы для программирования игр.Нет упоминаний об основах математики компьютерного программирования? Теория графов, теория чисел, теория множеств и конкретная математика обычно объединяются в болезненный и плохо обучаемый класс, называемый «дискретная математика» в университете.
«Тупые битовые трюки» экономят каждый вид времени программы (и они также обычно эквивалентны некоторым строковым трюкам и трюкам с наборами), типы графиков и обходы используются повсеместно (даже если вы просто выбираете контейнеры STL), а алгоритмическая сложность является ключом к оптимизации, поскольку языки достигают более высоких уровней.
источник
Я думаю, что матрица выплат является довольно важным инструментом. Игры часто веселее, когда они приближаются к некоторому интересному балансу с нулевой суммой честной игры, а матрицы выплат помогают вам оценить это в сложных случаях. Я думаю, что эта статья в Википедии хороша, как и любая другая, и содержит основную необходимую концепцию: http://en.wikipedia.org/wiki/Normal-form_game
источник
Понять произведение точек: если два вектора имеют примерно одинаковое направление (тета <90 градусов), то произведение точек будет положительным или отрицательным. Его можно использовать для проверки, когда игрок находится в поле зрения (при условии, что FOV составляет 90 градусов).
И обобщите вашу 2D игру на более высокие измерения. (используйте векторные вычисления)
Если вы можете реализовать 3D-движок самостоятельно, вам пора.
источник
Это зависит от того, что вы делаете .
Все игровые программисты должны знать хотя бы среднюю школьную алгебру. Это значит:
Ваши графические программисты должны знать:
Ваши физические программисты должны знать:
источник
Помимо синусов и косинусов (которые 50-75% программистов, которых я встречал, не знали, как их использовать), изучите магическую функцию арк-загара и то, как ее можно использовать для получения угла любого вектора.
источник
atan2
так как это само по себе заботится об обработке квадранта.Я удивлен, что никто не упомянул кватернионы . У меня нет большого опыта работы с различными движками, но, по крайней мере, JME использует его повсюду, и у меня сложилось впечатление, что это довольно важная концепция.
источник
Создание игр - это привнесение «реальной» жизни в виртуальную реальность. Лучше знать больше о реальном мире / вселенной, чем меньше :) .. Математика - это всего лишь инструмент. И если вы составляете план, вы должны уделять время и изучению планов.
РЕДАКТИРОВАНИЕ: Я видел какое-то недопонимание :) .. Я думаю, что набор математических достижений, которые вы должны править, зависит от конкретных вещей, которые вы хотите описать. Никто не знает всего. И лучший способ, как это сделать. Не изучать все с самого начала, но выучить небольшую часть, использовать, учиться, использовать и т. Д. Тогда Вы можете сделать это во время разработки, если у вас есть хороший план.
источник
Простой ответ: много!
Подробный ответ:
Арифметическая, элементарная и линейная алгебра, в большинстве случаев Trig, если вы делаете 3D-игру, ОПРЕДЕЛЕННОЕ исчисление и физику (физика требует исчисления)!
источник