我正在使用ARKit和SceneKit。当用户按下按钮时,我会创建一个锚点,并向其对应的SCNNode添加一个3D对象(从项目中的.scn文件加载)。
3D对象被放置在面向相机的位置,并与相机具有相同的方向。我想让它看起来像是放在平面表面上,如果它是倾斜的话,就不是这样。因此,如果我理解正确,我需要应用旋转变换,使其绕X和Z轴的旋转角度为0。
我尝试过:获取节点的x和z欧拉角,反转它们,并围绕每个轴旋转该量。
3D对象被放置在面向相机的位置,并与相机具有相同的方向。我想让它看起来像是放在平面表面上,如果它是倾斜的话,就不是这样。因此,如果我理解正确,我需要应用旋转变换,使其绕X和Z轴的旋转角度为0。
我尝试过:获取节点的x和z欧拉角,反转它们,并围绕每个轴旋转该量。
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))
对于大多数情况来说,这样做是可以的,但是在某些情况下,对象的旋转方式完全是奇怪的。我该把旋转角度设置为除当前欧拉角的倒数之外的其他值吗?将角度直接设置为0根本不起作用。