Функция D3DXMatrixRotationYawPitchRoll()
создает матрицу с заданным углом, шагом и рулоном. Есть ли эквивалентная функция для разработчиков iphone?Есть ли эквивалент D3DXMatrixRotationYawPitchRoll() для разработчиков iphone?
Я нашел прекрасный маленький образец проект для рисования по извилистой дороге или горок here.
Это не много кода, и комментарии, кажется, в основном понятно, но код полагается на несколько DirectX функций, I» m еще не достаточно умный, чтобы воссоздать в C для использования в моем проекте iphone.
Может ли кто-нибудь указать мне в правильном направлении здесь? Мне нужно создать матрицу вращения от значений рыскания, высоты тона, валка.
Эта функция DiRectX подписи заключается в следующем:
D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
__inout D3DXMATRIX *pOut,
__in FLOAT Yaw,
__in FLOAT Pitch,
__in FLOAT Roll
);
Есть глу *() эквивалент для этого?
(... часов чтения позже)
Ну, после того, как совсем немного чтения (с большим количеством больше идти), это то, что я собрал:
This сайт был отличной помощью!
Похоже, что мне нужно будет преобразовать 3 эйлеровых углов (это то, что тангаж, крен, рыскание называются) в трех независимых единичных кватернионов:
Qx = [ cos(a/2), (sin(a/2), 0, 0)]
Qy = [ cos(b/2), (0, sin(b/2), 0)]
Qz = [ cos(c/2), (0, 0, sin(c/2))]
, а затем объединить их в один кватернион с:
Qcombined = Qx * Оу * Qz
Тогда я могу преобразовать это в результате «блок» кватернион обратно в виде матрицы вращения, что OPENGL понравится, делая это:
Matrix = [ 1 - 2y2 - 2z2 2xy - 2wz 2xz + 2wy
2xy + 2wz 1 - 2x2 - 2z2 2yz - 2wx
2xz - 2wy 2yz + 2wx 1 - 2x2 - 2y2 ]
Для этого вам не нужно использовать кватернионы. Просто постройте три матрицы вращения для осей и умножьте их. –
Не было бы возможности блокировки gimble делать это без кватернионов? (Я все еще пытаюсь создать какой-то мысленный образ того, что здесь происходит) – user360092
Нет, нет, если вы каждый раз восстанавливаете матрицы из трех углов. –