swift - 了解 ARKit 世界变换矩阵

标签 swift augmented-reality scenekit arkit realitykit

ARKit 中,当我执行 HitTest 时,我会返回一个 ARHitTestResult 实例。其中一个属性是 worldTransform,据我所知,它包含对象位置的 4x4 变换矩阵 – simd_float4x4

作为一个非常不熟悉线性代数和 3D 图形的人,我该如何编辑这个矩阵,比如说,将其 y 坐标增加 0.05

如果有博客文章或我可以查看的内容可以帮助我解决这个问题,请告诉我。我不确定应该用谷歌搜索哪些术语。

对不起,如果我的问题充满了误解!您可能会说,我不太熟悉这些概念。

感谢所有提供帮助的人。

最佳答案

编辑:最初的问题最好通过将 0.05 添加到节点 position 的 y 分量来解决。但是,下面的原始答案确实解决了一些关于组合变换矩阵的问题,如果您对此感兴趣的话。

============================================= =======================

如果要对矩阵应用运算,最直接简单的方法是创建一个执行该运算的矩阵,然后将原始矩阵乘以新矩阵。

对于翻译,假设你想按xyz进行翻译,你可以这样做:

let translation = simd_float4x4(
    float4(1, 0, 0, 0),
    float4(0, 1, 0, 0),
    float4(0, 0, 1, 0),
    float4(x, y, z, 1)
)

请注意,这只是一个单位矩阵(1 在对角线下方),最后一列(!!!重要的是,上面的 float4s 是列,而不是行,因为它们在视觉上看起来)设置为包含 x/y/z 值。您可以进一步研究齐次坐标,但将其视为平移的表示方式。

然后,在 simd 中,只需执行以下操作:let newWorldTransform = translation * oldWorldTransform 您将通过 x/y/z 转换值(在您的示例中,[x , y, z] = [0, 0.05, 0]).

但是,可能值得探讨为什么要编辑 HitTest 结果。我想不出一个实际的用例,所以也许如果你更多地解释一下你正在尝试做什么,我可以建议一种更直观的方法来做到这一点。

关于swift - 了解 ARKit 世界变换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231542/

相关文章:

ios - 显示屏幕时如何 move 到幻灯片

ios - 在联系人 UI 中显示编辑联系人

ios - 无论增强现实中的相机方向如何,都可以计算物体位置

ios - 在适用于 iOS 的 SceneKit 中更改 SCNSphere 的 View 侧

swift - 拖动 map View 时停止更新位置

ios - 如果来自旧的 Xcode,我的应用程序能否在更新的 iOS 上运行?

ios - ARKit – iOS 中的 SCNNode 旋转问题

iphone - 增强现实寻宝

swift - SceneKit 加载 dae 作为 SCNNode 的子类

ios - 为什么空 SceneKit 场景具有高多边形数?