【问题标题】:How can I calculate a multi-axis SCNVector4 rotation for a SCNNode?如何计算 SCNNode 的多轴 SCNVector4 旋转?
【发布时间】:2013-03-24 11:40:57
【问题描述】:

SCNNode 使用 SCNVector4 进行旋转,它有一个角度 (w) 和该角度如何应用于每个轴 (x, y, z) 的大小。例如,要绕 x 轴旋转 45 度,我会像这样创建一个 SCNVector4

SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))

我想做的是在所有三个轴上旋转它,例如:x 轴上 45 度,y 轴上 15 度和 z 轴上 -135 度。有人知道计算最终SCNVector4 的数学吗?

【问题讨论】:

    标签: math transformation scenekit


    【解决方案1】:

    使用eulerAngles 代替rotation 属性并为每个轴指定角度

    【讨论】:

    【解决方案2】:

    您需要为每个旋转生成一个 SCNVector4,然后将它们相乘。请注意,操作顺序很重要!

    http://www.cprogramming.com/tutorial/3d/rotationMatrices.html 有很好的数学记录。任何处理旋转矩阵的 OpenGL 参考都值得一看。

    【讨论】:

      【解决方案3】:

      如果您没有为旋转设置动画,直接设置变换矩阵可能会更简洁,例如:

      node.transform = CATransform3DRotate(CATransform3DRotate(CATransform3DRotate(node.transform, xAngle, 1, 0, 0), yAngle, 0, 1, 0), zAngle, 0, 0, 1);
      

      【讨论】:

      • 没用!将一种类型的结构分配给另一种不同类型的结构是不正确的,即使它有效。如果他们改变其中一种结构怎么办?
      • 标题显示“public typealias SCNMatrix4 = CATransform3D”。如果他们改变 SCNMatrix4 的结构,所有现有的二进制文件都会损坏。他们不能也不会这样做。
      【解决方案4】:

      您是否要求旋转矩阵或如何简单地旋转?如果第二个是正确的,那么例如:

      [node runAction:[SCNAction rotateByX:0 y:M_PI z:0 duration:0]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-07
        • 2018-03-22
        • 2010-11-06
        • 2020-04-08
        • 2014-10-28
        • 2017-05-05
        • 2018-07-09
        • 2020-04-06
        相关资源
        最近更新 更多