我是 ARKit 新手,我需要知道 ARKit 中相机的旋转顺序到底是什么?
我用谷歌搜索了很多这个信息,但没有明确的答案。
我需要带有相机变换矩阵的打印示例的答案。
(Rx, Ry, Rz)
或
(Rz, Ry, Rx) ?
在 ARKit、SceneKit 和 RealityKit 中,默认节点(实体)方向表示为
Z
轴Y
轴X
轴Apple 开发者文档说:
SceneKit 以组件的相反顺序应用相对于节点的支点属性的这些旋转:首先滚动
,然后偏航Z
,然后俯仰Y
。旋转、eulerAngles 和方向属性都会影响节点变换属性的旋转方面。对这些属性之一的任何更改都会反映在其他属性中。X
因此,AR/VR 对象的旋转顺序为:
(Rz, Ry, Rx)
使用此代码可确保Apple AR/VR生态系统中的轮换顺序为ZYX。
group(..)
型方式用于绕X轴和Z轴同时旋转(各轴360度)。
import SceneKit
class ViewController : NSViewController {
let scene = SCNScene(named: "cubeWithPivot.scn")!
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = self.view as! SCNView
sceneView.backgroundColor = .black
sceneView.allowsCameraControl = true
sceneView.autoenablesDefaultLighting = true
sceneView.scene = self.scene
checkRotationOrderFor(scene)
}
func checkRotationOrderFor(_ scene: SCNScene) {
if let cube = scene.rootNode.childNode(withName: "pCube1",
recursively: true) {
// pivot point Z offset
cube.pivot.m43 = -4.0
// or use simdPivot
// cube.simdPivot.columns.3.z = -4.0
let rotateX = SCNAction.rotateBy(x: .pi*2, y: 0, z: 0, duration: 2.5)
let rotateZ = SCNAction.rotateBy(x: 0, y: 0, z:-.pi*2, duration: 2.5)
let parallelAction = SCNAction.group([rotateX, rotateZ])
let repeatAction = SCNAction.repeatForever(parallelAction)
cube.runAction(repeatAction)
}
}
}
现在让我们看看 SceneKit 的立方体在 ZYX 旋转顺序下是什么样子:
这是具有 XYZ 旋转顺序的 Maya 立方体(立方体沿着不同的轨迹移动):
Quod erat demostrandum。