请教如何从欧拉角获取up向量

shaman1 2018-07-12 05:43:11
我现在有相机位置和相机旋转角度6个值,现在需要从旋转角度值(欧拉角)获取up向量,谢谢大家,因为为三维不熟悉,描述的不太清楚,有需要再补充。
...全文
459 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WJN92 2018-07-13
  • 打赏
  • 举报
回复
你可以从相机变换矩阵中提取

U : 相机的右手边方向的向量
V : 相机的上方的向量
N : 相机注视的向量

[ux vx nx 0]
[uy vy ny 0]
[uz vz nz 0]
[0 0 0 1]
北极夕阳 2018-07-13
  • 打赏
  • 举报
回复
欧拉角分为yaw、pitch、roll,要想得到旋转后的up向量,就是通过pitch轴的旋转一定角度再到向量,可以分解为绕一个向量旋转一定角度求旋转后的向量



public static Quaternion CreateFromAxisAngle(Vector3 rotatorAxis, float radian)
{
// Here we calculate the sin( theta / 2) once for optimization
float factor = (float)Math.Sin(radian / 2.0);

// Calculate the x, y and z of the quaternion
float x = rotatorAxis.x * factor;
float y = rotatorAxis.y * factor;
float z = rotatorAxis.z * factor;

// Calcualte the w value by cos( theta / 2 )
float w = (float)Math.Cos(radian / 2.0);
Vector3 newV = new Vector3(x, y, z);

return new Quaternion(newV, w).Normalized;
}
// rotV为起始旋转向量,axis是旋转轴,angle是旋转角度
public static Vector3 RotatorFromAxisAngle(Vector3 rotV, Vector3 axis, float angle)
{
Quaternion rotator = CreateFromAxisAngle(axis, angle);
Vector3 res = new Vector3(rotator * rotV);
return res;
}

455

社区成员

发帖
与我相关
我的任务
社区描述
其它游戏引擎
社区管理员
  • 其它游戏引擎社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧