【发布时间】:2018-02-06 08:17:01
【问题描述】:
我将 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))
这在大多数情况下都可以正常工作,但在某些情况下,对象会以完全奇怪的方式旋转。我应该设置 旋转角度除了当前欧拉角的倒数之外的其他任何东西?直接将角度设置为 0 根本不起作用。
【问题讨论】:
-
你使用约束吗?
-
不,我尝试使用 SCNLookAtConstraint 和 look(at:) 方法进行试验,但它们都不能满足我的需求
-
能贴一下rotationMatrixAroundZ()的函数吗?
标签: ios swift rotation scenekit arkit