Функция D3DXMatrixRotationYawPitchRoll()
создает матрицу с указанными отклонением, шагом и креном.Есть ли эквивалентная функция для разработчиков iphone ??
Я нашел красивый маленький пример проекта для рисования извилистой дороги или американских горок здесь.
Это не много кодаи комментарии кажутся в основном понятными, но код опирается на несколько функций DirectX, которые я еще недостаточно умен, чтобы воссоздать в C для использования в моем проекте iphone.
Может кто-то указать мне на правдунаправление здесь?Мне нужно создать матрицу вращения из значений yaw, pitch, roll.
Эта сигнатура функции DirectX такова:
D3DXMATRIX * D3DXMatrixRotationYawPitchRoll(
__inout D3DXMATRIX *pOut,
__in FLOAT Yaw,
__in FLOAT Pitch,
__in FLOAT Roll
);
Есть ли для нее эквивалентный glu * ()?
(... часов чтения позже)
Что ж, после долгого чтения (с большим количеством информации), вот что я собрал:
Этот сайт очень помог!
Похоже, мне нужно будет преобразовать 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 * Qy * Qz
Затем я могу преобразовать этот результирующий кватернион "единицы"вернемся к той матрице вращения, которая понравится openGL, выполнив это:
Matrix = [ 1 - 2y2 - 2z2 2xy - 2wz 2xz + 2wy
2xy + 2wz 1 - 2x2 - 2z2 2yz - 2wx
2xz - 2wy 2yz + 2wx 1 - 2x2 - 2y2 ]