SceneKit 添加 2 个欧拉角在一起

问题描述 投票:0回答:1

我需要将 2 个欧拉角加在一起。

我所做的是将欧拉角转换为旋转矩阵,然后将它们相乘。

但是,最后,为了从旋转矩阵获得最终的欧拉角,我不得不依赖一个虚拟的 SCNNode,这感觉有点 hacky。

我有这个代码:

import SceneKit
import Spatial

// A helper function
func eulerToRotation(eulerAngles: SCNVector3) -> SCNVector4 {
  let rotation = Rotation3D(eulerAngles: .init(angles: [eulerAngles.x, eulerAngles.y, eulerAngles.z], order: .xyz))
  return SCNVector4(
      simd_double4(rotation.axis.vector, rotation.angle.radians)
  )}

func addEulerAngles(e1: SCNVector3, e2: SCNVector3) -> SCNVector3 {
  let r1 = eulerToRotation(eulerAngles: e1), r2 = eulerToRotation(eulerAngles: e2)
  let m1 = SCNMatrix4MakeRotation(r1.w, r1.x, r1.y, r1.z), m2 = SCNMatrix4MakeRotation(r2.w, r2.x, r2.y, r2.z)
  let m = SCNMatrix4Mult(m1, m2)
  
  // Hacky here
  let node = SCNNode()
  node.transform = m
  return node.eulerAngles
}

有没有更好的方法来添加 2 个欧拉角而不使用这个虚拟 SCNNode?

ios swift scenekit
1个回答
0
投票

您可以使用 Decomposed swift 包,或者使用 this code 从矩阵计算

eulerAngles

© www.soinside.com 2019 - 2024. All rights reserved.