我正在尝试从我的计算机向某个方向控制摇头相机。摄像机仅由平移(540 度)和倾斜(280 度)控制。问题是将欧拉角与这些平移和倾斜度数相匹配。
我有一个方向的 3d 表示,比如说 XY 和 Z 旋转(欧勒角)。
现在我想将我的(物理的!)云台摄像机朝同一个方向移动。但我不知道如何将 xyz 矢量转换为平移倾斜。
我正在尝试从我的计算机向某个方向控制摇头相机。摄像机仅由平移(540 度)和倾斜(280 度)控制。问题是将欧拉角与这些平移和倾斜度数相匹配。
我有一个方向的 3d 表示,比如说 XY 和 Z 旋转(欧勒角)。
现在我想将我的(物理的!)云台摄像机朝同一个方向移动。但我不知道如何将 xyz 矢量转换为平移倾斜。
切换到正交同质 4x4 变换矩阵
ang 绕全球 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 轴旋转 ang:
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 这样的变换矩阵库,但我更喜欢我自己的
在这里您可以看到同质 (4x4) 和正常 (3x3+1x3) 3D 变换矩阵之间的差异:
现在相机的驱动
因此,如果 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;