我正在将 ARKit 与 SceneKit 一起使用。当用户按下按钮时,我会创建一个锚点,并在对应的 SCNNode 中添加一个 3D 对象(从项目中的 .scn 文件加载)。
3D 对象面向相机放置,与相机的方向相同。我想让它看起来像物体放在一个平面上,如果是这样的话,它不会倾斜。所以,如果我做对了,我需要应用旋转变换,使其围绕 X 轴和 Z 轴的旋转变为 0。
我对此的尝试是:取节点的 x 和 z eulerAngles,反转它们,并围绕每个轴旋转该量
let rotationZ = rotationMatrixAroundZ(radians: -node.eulerAngles.z)
let rotationX = rotationMatrixAroundX(radians: -node.eulerAngles.x)
let rotationTransform = simd_mul(rotationTransformX, rotationTransformZ)
node.transform = SCNMatrix4(simd_mul(simd_float4x4(node.transform), rotationTransform))
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都可以正常工作,但在某些情况下,对象以完全奇怪的方式旋转。我应该将旋转角度设置为当前欧拉角的倒数吗?直接将角度设置为 0 根本不起作用。
给定 3D 空间中的一个点,将一条线变换为指向该对象所需的三个角度(例如欧拉角)是多少?
想象一下,我有一条 3D 线(或一个盒子),我想转换它的航向、俯仰和坡度以从原点指向 3D 点,我会为这些角度使用什么值?
我无法计算出计算指向诸如 之类的位置的角度的数学方法(1,2,3)。