6

我试图围绕它的 z 轴旋转一个立方体,但我找不到如何。

RealityKit 中有没有办法做到这一点?

4

2 回答 2

12

在 RealityKit 中,至少有三种方法可以围绕单轴旋转对象

在每个示例中,我们逆时针 (CCW) 旋转对象。


第一种方法:

let boxScene = try! Experience.loadBox()

boxScene.steelBox?.orientation = simd_quatf(angle: .pi/4,    /* 45 Degrees */
                                             axis: [0,0,1])  /* About Z axis */


第二种方法:

boxScene.steelBox?.transform = Transform(pitch: 0, 
                                           yaw: 0, 
                                          roll: .pi/4)      /* Around Z axis */

pitchyawroll是围绕 X、Y 和 Z 轴的旋转,以弧度表示。


第三种方法:

let a: Float = cos(.pi/4)
let b: Float = sin(.pi/4)

let matrix = float4x4([ a, b, 0, 0 ],        /* column 0 */
                      [-b, a, 0, 0 ],        /* column 1 */
                      [ 0, 0, 1, 0 ],        /* column 2 */
                      [ 0, 0, 0, 1 ])        /* column 3 */

boxAnchor.steelBox?.setTransformMatrix(matrix, relativeTo: nil)

旋转矩阵的可视化表示如下:

let a: Float = cos(.pi/4)
let b: Float = sin(.pi/4)

//  0  1  2  3
 ┌              ┐
 |  a -b  0  0  |
 |  b  a  0  0  |
 |  0  0  1  0  |
 |  0  0  0  1  |
 └              ┘

如果您想了解更多关于旋转矩阵的信息,请阅读这篇文章。

于 2019-12-13T18:42:27.997 回答
1

对于也在搜索这个的人,您需要使用transformrotation。这需要一个simd_quatf,您可以在其中给出angleaxis

就我而言,我不得不使用这个:

"object".transform.rotation = simd_quatf(angle: GLKMathDegreesToRadians(90), axis: SIMD3(x: 0, y: 0, z: 1))
于 2019-12-11T23:51:38.820 回答