C++ XYZ旋转到平移和倾斜
我正试图从我的电脑控制一个移动的头部摄像头朝某个方向移动。摄像机仅由摇摄(540度)和倾斜(280度)控制。问题是如何将欧拉角设置为这些平移和倾斜角度 我有一个方向的3d表示,比如X,Y和Z旋转(欧勒角)C++ XYZ旋转到平移和倾斜,c++,matrix,3d,rotation,euler-angles,C++,Matrix,3d,Rotation,Euler Angles,我正试图从我的电脑控制一个移动的头部摄像头朝某个方向移动。摄像机仅由摇摄(540度)和倾斜(280度)控制。问题是如何将欧拉角设置为这些平移和倾斜角度 我有一个方向的3d表示,比如X,Y和Z旋转(欧勒角) 现在我想把我的(物理的!)云台相机移到同一个方向。但我不知道如何将xyz矢量转换为平移-倾斜。切换到正交同质4x4变换矩阵 欧拉角用于复杂的记忆运动 M是4x4相机变换矩阵 通过ang绕全球X轴旋转: double c=cos(ang),s=sin(ang); double Q[16]=
现在我想把我的(物理的!)云台相机移到同一个方向。但我不知道如何将xyz矢量转换为平移-倾斜。切换到正交同质4x4变换矩阵
- 欧拉角用于复杂的记忆运动李>
- M是4x4相机变换矩阵
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;
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;
通过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;
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这样的变换矩阵库,但我更喜欢自己的
- 我知道很多人会不同意,但我的发言时间比其他任何一位公众发言时间都长
- 我已经习惯了
- 其思想是始终记住M的正矩阵和逆矩阵
- 有一个标志,哪个是更新的,哪个不是
- 在任何操作之前,检查所用矩阵是否相关
- 如果不是,则从另一个计算
- 还要添加操作计数和到达treshold后的计数
- 进行正交性或正交性检查/校正
- 我将参考上面4x4变换矩阵链接中的图像
- 我通常使用Z轴作为移动/查看方向
- 所以,在开始时,将矩阵重置为单位,或者根据需要将其设置为其位置和方向
- 如果要旋转,请使用局部旋转
- 要移动时,只需将要移动的集合(在全局坐标中)添加到位置x0、y0、z0
- 因此,如果d单元执行此操作,则向前移动:
x0+=d*Zx; y0+=d*Zy; z0+=d*Zz;
- 对于侧移,使用X矢量
- 对于向上/向下,请使用Y向量
- 对于不同的旋转,然后围绕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;