提问人:drilager60 提问时间:11/13/2023 最后编辑:drilager60 更新时间:11/14/2023 访问量:49
欧拉角度旋转到方向不正确的 X 轴
Euler Angle Rotation To Direction Incorrect X Axis
问:
我正在开发这个游戏,其中我有一个局部欧拉角来控制相机瞄准的位置。其水平范围为 0 - 360,垂直范围为 -88 - 88。我还有一个游戏对象的世界位置向量,我希望该欧拉角瞄准它。
在我的计算中,Y(水平)的欧拉角大部分是正确的,并且工作得很好。但是,只要相机 Y 轴不超过 5.f 或低于 5.f,X 轴(垂直)就可以工作。
这是计算
Vector2 CalcEuler(Vector3 dst, Vector3 src)
{
//dst is game object vector position, src is player camera position
UnityEngine_Quaternion_o quat = UnityEngine_Quaternion_o::LookRotation((dst - src).ToUnityVec3(), UnityEngine_Vector3_o::get_right());
Vector3 euler = quat.get_eulerAngles();
return { euler.y, euler.x };
}
Euler.y 完美返回正确的水平旋转。然而,euler.x 确实返回了正确的垂直旋转,但如果对象位置 Y 高于或低于本地相机位置,它将返回高于 Y 可以支持的最大欧拉数字(大约 256.f)
答:
while (euler.x >= 88.f)
euler.x -= 360.f;
while (euler.x <= -88.f)
euler.x += 360.f;
if (euler.x > 0.6f) {
euler.x = -euler.x + 0.6f;
}
else if (euler.x < -0.6)
euler.x = fabsf(euler.x) - 0.6;
答: 暂无答案
评论
Vector3 euler = quat.get_eulerAngles();
无论如何,几乎分配了一个 Vector3,对吧?