Я делаю небольшую игру, в которой я хочу бросить объект в направлении, с которым я сталкиваюсь. Проблема в том, что моя ориентация (камера) определяется матрицей модели/представления. И эта матрица предоставляется системой (на устройстве android).Вектор ориентации камеры OpenGL из матрицы модели/представления
Как я могу вычислить вектор, который будет служить вектором скорости для моего брошенного объекта?
Я попытался умножить некоторые векторы на матрицу, но результаты не дают мне подсказки, как это сделать.
Матрица содержит только вращательную часть (без масштабирования, перекоса или перевода).
Я работаю с OpenGL ES 1.1, но это, вероятно, не имеет значения.
this answer Мне удалось получить углы поворота вокруг каждой оси, но я до сих пор не знаю, как построить из меня вектор скорости.
EDIT: То, что я пытаюсь сделать, это повернуть матрицу моделей/представлений любым способом и выбросить объект так, как я столкнулся. Мне нужен объект, чтобы в конечном счете ускорить работу. У меня нет проблем с вычислением этой траектории, если я знаю точный вектор, с которым я (камера) сталкивается.
Спасибо за любую помощь.
Спасибо за ваш ответ. Однако я не могу заставить его работать так, как вы его описываете. Если я вращаю матрицу (после glLoadIndenity) только вокруг оси X, она работает нормально. Но если я вращаюсь вокруг Z, а затем вокруг X (в GL в обратном порядке), вектор по-прежнему указывается так же, как и без вращения Z. Это понятно, потому что вращение вокруг оси Z, как я вижу, не изменяет третий столбец в матрице. – sidon
Вы действительно извлекаете столбец? Матрицы ордеров OpenGL в основном порядке столбцов. Поэтому попробуйте обменять «строки» и «столбцы» в вашем коде. – datenwolf
Да, я извлекаю колонку. То есть M [8], M [9], M [10], где M - матрица 4x4 (float [16]), поставляемая OpenGL. – sidon