Линейная алгебра в играх в двумерном пространстве - PullRequest
2 голосов
/ 14 марта 2012

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

Я просто хочу получить разъяснения по этому вопросу. Во-первых, можно ли выразить позицию в 2D-пространстве в однородных координатах 4x4, например:

[400, 300, 0, 1]

Здесь, для простоты, я предполагаю, что мы работаем с фиксированным разрешением (и в пространстве экрана) 800 x 600, так что это должна быть точка в середине экрана.

Это действительно?

Предположим, что эта позиция представляет позицию игрока, если бы я использовал вектор, я мог бы указать направление, в котором находится игрок:

[400, 400, 0, 0]

Таким образом, этот вектор будет означать, что игрок находится внизу экрана (если мы работаем в пространстве экрана.

Это действительно?

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

Может ли кто-нибудь объяснить математику построения квитерниона и умножения его на вектор моего лица?

Я также слышал, что OpenGL и D3D представляют векторы по-разному, как это работает? Я не совсем понимаю это.

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

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Я не могу ответить на все ваши вопросы, но с точки зрения того, что является «действительным» или нет, все полностью зависит от того, содержит ли она всю необходимую вам информацию и имеет ли она смысл для вас.

Кроме того, немного странно, что направление, на которое смотрит объект, не является единичным вектором. По сути, вам не нужна информация о том, как долго вектор определяет направление, в котором он находится. Вам просто нужно уметь вычислять радианы или градусы, на которые они повернулись от 0 градусов или радиан. Поэтому люди обычно просто кодируют радианы или градусы напрямую, так как многие библиотеки линейной алгебры позволяют вам использовать векторную математику, используя их.

1 голос
/ 14 марта 2012

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

Направление в основном выражается в виде вектора, начинающегося сположение игрока и указывает в соответствующем направлении.Таким образом, вектор направления (0,1) будет гораздо проще обрабатывать.Учитывая этот вектор вы можете использовать матрицу вращения.В этом случае кватернионы не нужны, потому что вы не хотите вращаться вокруг произвольных осей.Вы просто хотите вращаться вокруг оси Z.Ваша вспомогательная библиотека должна предоставлять методы для создания такой матрицы и преобразования вектора с ней (преобразование как нормальное).

Я не уверен в разнице между представлениями векторов в OpenGL и D3D.Но я думаю, все дело в использовании памяти, о которой вам не стоит беспокоиться.

...