Я пытаюсь управлять движущейся камерой в определенном направлении от моего компьютера. Камера управляется только панорамированием (540 градусов) и наклоном (280 градусов). Проблема состоит в том, чтобы получить углы Эйлера до этих градусов панорамирования и наклона.
У меня есть 3D представление направления, скажем, X Y и Z вращения (углы Eurler).
Теперь я хочу переместить мою (физическую!) Камеру наклона в том же направлении. Но я не могу понять, как перевести вектор xyz в панорамирование.
переключиться на ортогональные матрицы однородного преобразования 4×4
вращение вокруг глобального мира по оси X на угол:
double c=cos(ang),s=sin(ang);
double Q[16]=
{
1, 0, 0, 0,
0, c,-s, 0,
0, s, c, 0,
0, 0, 0, 1
};
M=M*Q;
поворот вокруг оси X локальной камеры на угол:
double c=cos(ang),s=sin(ang);
double Q[16]=
{
1, 0, 0, 0,
0, c,-s, 0,
0, s, c, 0,
0, 0, 0, 1
};
M=((M^-1)*Q)^-1;
Есть библиотеки для матриц преобразования, таких как GLM, но я предпочитаю свои
Здесь вы можете увидеть различия между однородными (4×4) и нормальными (3×3 + 1×3) матрицами трехмерного преобразования:
Теперь за рулем камеры
так что для продвижения вперед, если d единиц делают это:
x0+=d*Zx;
y0+=d*Zy;
z0+=d*Zz;
для бокового перемещения используйте X вектор
для вращений, отличающихся вокруг оси X, просто используйте другую матрицу Q
вращение вокруг оси Y
c, 0, s, 0,
0, 1, 0, 0,
-s, 0, c, 0,
0, 0, 0, 1;
вращение вокруг оси Z
c,-s, 0, 0,
s, c, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1;
Других решений пока нет …