【问题标题】:RealityKit – transform.rotate() makes object bigger in scaleRealityKit – transform.rotate() 使对象的规模更大
【发布时间】:2021-08-25 23:56:43
【问题描述】:

我正在尝试旋转 RealityKit 初始代码中给出的钢盒,我使用此代码

steelBox.transform.rotation += simd_quatf(angle: radians,
                                           axis: SIMD3<Float>(0, 1, 0)) 

尝试旋转对象。

然而,当对象旋转时,它也会在一维上变大。

这是为什么呢?

【问题讨论】:

    标签: swift augmented-reality arkit simd realitykit


    【解决方案1】:

    使用复合乘法运算符 *= 而不是复合加法 +=

    steelBox.transform.rotation *= simd_quatf(angle: .pi / 4,        // 45 degrees
                                               axis: SIMD3<Float>(0, 1, 0)) 
    

    让我们看看当您使用复合加法和乘法时,旋转在 4x4 矩阵中的样子。

    您应该打印矩阵的值:

    print((boxScene.steelBox?.transform.matrix)!)
    

    身份矩阵。

    ┌              ┐
    |  1  0  0  0  |
    |  0  1  0  0  |
    |  0  0  1  0  |
    |  0  0  0  1  |
    └              ┘
    

    Compound Addition 后的矩阵存储结果(绕 Y 轴逆时针旋转 45 度):

    ┌                      ┐
    |  1.4   0    2.9   0  |
    |  0     2    0     0  |
    | -2.9   0    1.4   0  |
    |  0     0    0     1  |
    └                      ┘
    

    Compound Multiplication之后的矩阵存储结果(绕Y轴逆时针旋转45度):

    ┌                      ┐
    |  1.4   0    1.4   0  |
    |  0     2    0     0  |
    | -1.4   0    1.4   0  |
    |  0     0    0     1  |
    └                      ┘
    

    【讨论】:

      【解决方案2】:

      如果您正在累积四元数旋转,您可能希望使用以下任一:

      steelBox.transform.rotation = 
         simd_mul(steelBox.transform.rotation, 
                 simd_quatf(angle: radians,
                            axis: SIMD3<Float>(0, 1, 0)) )
      

      steelBox.transform.rotation = 
         simd_mul(simd_quatf(angle: radians,
                             axis: SIMD3<Float>(0, 1, 0)),
                  steelBox.transform.rotation )
      
      

      取决于您是要在初始方向之前还是之后“添加”旋转(我不确定是哪个,因为这取决于 simd_mul 是 parent * child 还是 child * parent - 苹果文档没有' t 说明哪个?)。

      四元数遵循与变换矩阵相同的规则。因此,如果您在谈论“添加”(累积) 轮换,您实际上的意思是“乘”。在四元数上使用加法运算符将进行缩放操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-24
        • 2013-10-29
        • 2013-01-12
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多