我需要计算 3D 对象面对任意 3D 点的 2 个角度(偏航和俯仰)。这些旋转被称为“欧拉”旋转,仅仅是因为在第一次旋转之后(假设 Z,基于下图),Y 轴也随着对象旋转。
这是我正在使用的代码,但它不能完全工作。在地平面 (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 是滚动