2012-04-24 3 views
1

Я делаю небольшую игру, в которой я хочу бросить объект в направлении, с которым я сталкиваюсь. Проблема в том, что моя ориентация (камера) определяется матрицей модели/представления. И эта матрица предоставляется системой (на устройстве android).Вектор ориентации камеры OpenGL из матрицы модели/представления

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

Матрица содержит только вращательную часть (без масштабирования, перекоса или перевода).
Я работаю с OpenGL ES 1.1, но это, вероятно, не имеет значения.

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

EDIT: То, что я пытаюсь сделать, это повернуть матрицу моделей/представлений любым способом и выбросить объект так, как я столкнулся. Мне нужен объект, чтобы в конечном счете ускорить работу. У меня нет проблем с вычислением этой траектории, если я знаю точный вектор, с которым я (камера) сталкивается.

Спасибо за любую помощь.

ответ

2

Первые 3 столбца матрицы модели являются основами системы координат вида. Итак, все, что вам нужно, это 3-й столбец (или строка, в зависимости от того, переходите ли вы из камеры в мир или из мира в камеру).

+0

Спасибо за ваш ответ. Однако я не могу заставить его работать так, как вы его описываете. Если я вращаю матрицу (после glLoadIndenity) только вокруг оси X, она работает нормально. Но если я вращаюсь вокруг Z, а затем вокруг X (в GL в обратном порядке), вектор по-прежнему указывается так же, как и без вращения Z. Это понятно, потому что вращение вокруг оси Z, как я вижу, не изменяет третий столбец в матрице. – sidon

+0

Вы действительно извлекаете столбец? Матрицы ордеров OpenGL в основном порядке столбцов. Поэтому попробуйте обменять «строки» и «столбцы» в вашем коде. – datenwolf

+0

Да, я извлекаю колонку. То есть M [8], M [9], M [10], где M - матрица 4x4 (float [16]), поставляемая OpenGL. – sidon

 Смежные вопросы

  • Нет связанных вопросов^_^