作者:浪之音_544 | 来源:互联网 | 2023-01-31 13:23
我试图理解在ArKit中引入的不同元素与它们在SceneKit中的等价物之间的区别:
SCNNode.simdTransform
VS SCNNode.transform
.在ARKit中,似乎人们使用SCNNode.simdTransform
而不是SCNNode.transform
.他们有什么不同?simdTransform似乎使用列主要顺序,而transform(SCNMatrix4)是行主要.如何将一个转换为另一个?只需转置?我的印象是,如果我使用transform
而不是跟踪,那么跟踪也不会有效simdTransform
.这是预期的还是仅仅是一种印象?如果我设置了一个属性,如果我再设置另一个属性会怎样?
ARFrame.camera
vs Scene.pointOfView
:看看他们的转型,他们似乎有点不同:
.
// ARFrame.camera.transform (matrix_float4x4)
-0.01 0.99 -0.11 0.02
-0.99 0.00 0.11 0.06
0.10 0.11 0.98 0.0
0.0 0.0 0.0 1.0
// sceneView.pointOfView.transform (SCNMatrix4)
// or sceneView.pointOfView.simdTransform^T (matrix_float4x4)
0.99 0 0.11 0
0.01 0.99 -0.12 0
-0.11 0.11 0.98 0
0.03 0.6 0.0 0.99
它们是相同的减一轮吗?
1> Erik Foss..:
SceneKit和ARKit都包含定义为SIMD类型的符号.由于ARKit导入SceneKit,因此两者都可以访问SceneKit中定义的SIMD符号.SIMD类型支持并行计算,因此使用它们可以提高应用程序更新逻辑的性能.正如您所发现的那样,在SIMD类型与其旧的SceneKit或Core Graphics等效类型之间进行转换并不总是一种方便的方法,因此您通常可以在可能的情况下始终使用SIMD来获得更清晰的代码.
更新影响节点转换的任何属性也会更新其他转换属性.这也适用于本地和世界坐标.
描述设备硬件相机的camera
属性ARFrame
,而不是用于渲染场景的虚拟相机.虽然我希望有一个密切的对应关系,但我猜你是在渲染循环期间更新ARCamera
实例之前轮询实例SCNCamera
.如果可以,我建议从相应的委托方法中推送这些更新,因为您将知道相关数据是最新的.