Функция D3DXMatrixRotationYawPitchRoll()
строит матрицу с указанными значениями рысканья, тангажа и крена. Есть ли аналогичная функция для разработчиков iphone??
Я нашел красивый небольшой пример проекта для рисования извилистой дороги или американских горок здесь.
Это не так много кода, и комментарии кажутся в основном понятными, но код опирается на несколько функций DirectX, которые я еще недостаточно умен, чтобы воссоздать их на C для использования в моем проекте iphone.
Может ли кто-нибудь указать мне правильное направление здесь? Мне нужно создать матрицу вращения из значений рыскания, тангажа, крена.
Эта сигнатура функции 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))]
А затем объедините их в один кватернион с помощью:
Qкомбинированный = 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 ]