swift - 了解 SceneKit 的 SIMD

标签 swift scenekit arkit simd realitykit

我正在尝试了解有关 Scenekit 的 Apple 文档,在谈论 SCNNode 变量时发现了一些问题:
例如,使用 simdScale 变量或比例变量应用比例有什么区别?
阅读文档,
无法理解何时以及为何使用“管理节点的变换(SceneKit 类型)”下的变量以及何时使用管理节点的变换下的变量
例如,使用 var "scale"或 simdScale 更改 SCNode 的比例更好吗?

最佳答案

SIMD 是单指令多数据 .最新的 CPU 设计包括 SIMD 指令,以提高 3D 图形和多媒体的性能。触及你的问题——SCNVector3之间的主要区别和 SIMD3<Float> structs 在它们的初始化程序中。 SCNVector3支持:

  • Float , Double , CGFloat , Int , SIMD3<Float>SIMD3<Double>类型

  • 用于 X、Y 和 Z 元素。如您所知,SIMD3<Float>和它的 simd_float3 typealias 仅支持 32 位 Float .顺便说一句,SIMD3<Float>在 RealityKit 中被积极使用。
    所以在 SceneKit 你可以同时使用 SCNVector3SIMD3<Float>取决于特定实例属性所需的类型。以下是如何在 SCNNode 中缩放模型的八个示例。在所有这些示例中,我们应用相同的缩放值。
    1.
    let node = SCNNode()
    
    node.scale = SCNVector3(5, 2, 5)
    
  • node.simdScale = simd_float3(5, 2, 5)
    
  • node.simdScale = SIMD3<Float>(5, 2, 5)
    
  • node.transform.m11 = 5
    node.transform.m22 = 2
    node.transform.m33 = 5
    
  • node.transform = SCNMatrix4( m11: 5, m12: 0, m13: 0, m14: 0,
                                 m21: 0, m22: 2, m23: 0, m24: 0,
                                 m31: 0, m32: 0, m33: 5, m34: 0,
                                 m41: 0, m42: 0, m43: 0, m44: 1 )
    
  • node.simdTransform.columns.0.x = 5
    node.simdTransform.columns.1.y = 2
    node.simdTransform.columns.2.z = 5
    
  • node.simdTransform = simd_float4x4(diagonal: SIMD4<Float>(5, 2, 5, 1))
    
  • node.simdTransform = .init( SIMD4<Float>(5, 0, 0, 0),
                                SIMD4<Float>(0, 2, 0, 0),
                                SIMD4<Float>(0, 0, 5, 0),
                                SIMD4<Float>(0, 0, 0, 1) )
    

    如果您需要有关 4x4 矩阵及其 simd_float4x4 的信息输入,阅读 this Medium story .

    关于swift - 了解 SceneKit 的 SIMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66086530/

    相关文章:

    swift - 在 AR 场景 View 中随机放置 10 米半径内的对象

    ios - 如何从 ARKit 中的节点动画到实际 View

    ios - ARKit 将物体隐藏在墙后

    swift - ARKit 如何使 NSNODE 持久化

    ios - ARKit - SCNNode 连续运动

    swift - 子类类型作为闭包参数

    swift - 将函数分配给变量时出错

    swift - Swift 3 中的 Depreciation++ 运算符,寻找解决方法

    ios - 使用 Swiftly JSON 解析 JSON

    scenekit - SwiftUI:将 SwiftUI 路径添加到 Scenekit 场景