我需要计算一个3D对象朝向任意3D点时的两个角度(偏航角和俯仰角)。这些旋转被称为“欧拉”旋转,因为在第一次旋转后(假设基于下面图片的Z轴),Y轴也会随着物体一起旋转。
这是我正在使用的代码,但它没有完全工作。当在地面平面上(Y = 0)时,物体正确地旋转以朝向该点,但是当我将该点向上移动到Y轴时,旋转看起来不正确。
下面的图片展示了我的旋转方式,这些是我需要计算的角度。(唯一的区别是我按照X、Y、Z的顺序旋转物体而不是Z、Y、X)
这是我的坐标系。
这是我正在使用的代码,但它没有完全工作。当在地面平面上(Y = 0)时,物体正确地旋转以朝向该点,但是当我将该点向上移动到Y轴时,旋转看起来不正确。
// x, y, z represent a fractional value between -[1] and [1]
// a "unit vector" of the point I need to rotate towards
yaw = Math.atan2( y, x )
pitch = Math.atan2( z, Math.sqrt( x * x + y * y ) )
你知道如何计算给定一个点的2个欧拉角吗?
下面的图片展示了我的旋转方式,这些是我需要计算的角度。(唯一的区别是我按照X、Y、Z的顺序旋转物体而不是Z、Y、X)
这是我的坐标系。
- 坐标系为x向右,y向下,z向远处
- 一个对象默认位于(0,0,1),即朝向后方
- 旋转顺序为X、Y、Z,其中绕X轴的旋转是俯仰角,Y轴是偏航角,Z轴是滚转角