Линейная алгебра в играх в двухмерном пространстве

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

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

[400, 300, 0, 1]

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

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

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

[400, 400, 0, 0]

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

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

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

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

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

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


person RedShft    schedule 14.03.2012    source источник
comment
Большая часть вашего вопроса зависит от деталей реализации той или иной библиотеки. Я настоятельно рекомендую, чтобы лучший подход состоял в том, чтобы выбрать наиболее подходящую библиотеку, а затем просто немного поиграть с ней. ПО МОЕМУ МНЕНИЮ...   -  person paulsm4    schedule 14.03.2012
comment
Спасибо за совет. Всегда кажется хорошей идеей просто прыгнуть и начать играть с вещами.   -  person RedShft    schedule 15.03.2012


Ответы (2)


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

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

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

person Nico Schertler    schedule 14.03.2012
comment
Хорошо, спасибо за ответ. Я думал об использовании вектора единичной длины, и, как вы сказали, это будет иметь больше смысла и с ним будет проще обращаться. Кроме того, спасибо за прояснение этого вопроса о четвертьтонах, я просто пытаюсь понять математику, стоящую за математической библиотекой, которую я использую. Это единственная причина, по которой я читаю «Математика для программирования 3D-игр» Ленгиэля. Я пытаюсь лучше понять, что происходит. - person RedShft; 15.03.2012

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

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

person placeybordeaux    schedule 14.03.2012
comment
Я ценю ответ, я все еще работаю над этими идеями. Спасибо за помощь. - person RedShft; 15.03.2012