如何在RealityKit中仅围绕一个轴旋转对象?

9

我正在尝试绕z轴旋转一个立方体,但是我找不到如何实现。

在RealityKit中是否有这样的方法?


2
我不熟悉RealityKit,但在文档中我看到提到了一个Transform组件,它有一个四元数形式的旋转属性,可以通过操作来改变。不过,我没有使用过RealityKit,所以这只是根据文档的猜测。 - scg
1
谢谢!因为这个我找到了答案。 - Robbe Verhoest
2个回答

20

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

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

第一种方法

使用具有角度(以弧度表示)和参数的simd_quatf初始化器:

let scene = try! Experience.loadBox() 

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


第二种方法

使用Transform的pitchyawroll,它们是关于X、Y和Z轴的旋转,以弧度表示。

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


第三种方法
使用float4x4初始化器,水平表示每列有4个插槽:
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 */

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

真实世界中,4x4旋转矩阵的视觉表示如下:
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  |
 └              ┘

如果你想了解更多关于旋转矩阵的知识,可以阅读这篇文章
阅读这篇文章,了解如何克服180度旋转的限制。

1
谢谢你的回答!额外的问题:你知道怎么让这个旋转动画化吗? - Robbe Verhoest
1
你可以使用 playAnimation(_:transitionDuration:startsPaused:) 实例方法来实现。此外,阅读这篇有用的文章:https://medium.com/twinkl-educational-publishers/how-to-animate-ar-objects-with-swiftui-and-realitykit-b14730c4fad9 - Andy Jazz
1
非常感谢您的时间。帮了我很多! - Robbe Verhoest
我发了一个有关动画的新问题。我已经找到了大部分答案,但是我无法弄清楚平移和缩放需要哪些参数。这是我仍在苦苦挣扎的唯一问题。 - Robbe Verhoest
你好,另一个问题:现在你总是围绕物体的中心旋转。能否改变这个中心点,使我可以将整个物体例如围绕它自己的一侧旋转? - Robbe Verhoest
显示剩余3条评论

2

对于也在寻找这个的人,你需要使用transformrotation。这需要一个simd_quatf,其中你提供了角度

在我的情况下,我必须使用以下内容:

"object".transform.rotation = simd_quatf(angle: GLKMathDegreesToRadians(90), axis: SIMD3(x: 0, y: 0, z: 1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接