gpt4 book ai didi

ios - ARKit 放置一个面向摄像头的 SCNNode

转载 作者:IT王子 更新时间:2023-10-29 05:36:10 25 4
gpt4 key购买 nike

我正在使用 ARKit 来显示 3D 对象。我设法将现实世界中的节点放在用户面前(也就是相机)。但是当我放下它们时,我无法让它们面对相机。

let tap_point=CGPoint(x: x, y: y)
let results=arscn_view.hitTest(tap_point, types: .estimatedHorizontalPlane)
guard results.count>0 else{
return
}
guard let r=results.first else{
return
}

let hit_tf=SCNMatrix4(r.worldTransform)
let new_pos=SCNVector3Make(hit_tf.m41, hit_tf.m42+Float(0.2), hit_tf.m43)

guard let scene=SCNScene(named: file_name) else{
return
}
guard let node=scene.rootNode.childNode(withName: "Mesh", recursively: true) else{
return
}
node.position=new_pos
arscn_view.scene.rootNode.addChildNode(node)

节点在平面上的位置很好,在相机前面。但他们都在看同一个方向。我想我应该旋转 SCNNode 但我没能做到。

最佳答案

首先获取相机的旋转矩阵:

let rotate = simd_float4x4(SCNMatrix4MakeRotation(sceneView.session.currentFrame!.camera.eulerAngles.y, 0, 1, 0))

然后,组合矩阵:

let rotateTransform = simd_mul(r.worldTransform, rotate)

最后,对您的节点应用转换,转换为 SCNMatrix4:

node.transform = SCNMatrix4(rotateTransform)

希望对你有帮助

编辑

这里是如何从 simd_float4x4 创建 SCNMatrix4

   let rotateTransform = simd_mul(r.worldTransform, rotate)

node.transform = SCNMatrix4(m11: rotateTransform.columns.0.x, m12: rotateTransform.columns.0.y, m13: rotateTransform.columns.0.z, m14: rotateTransform.columns.0.w, m21: rotateTransform.columns.1.x, m22: rotateTransform.columns.1.y, m23: rotateTransform.columns.1.z, m24: rotateTransform.columns.1.w, m31: rotateTransform.columns.2.x, m32: rotateTransform.columns.2.y, m33: rotateTransform.columns.2.z, m34: rotateTransform.columns.2.w, m41: rotateTransform.columns.3.x, m42: rotateTransform.columns.3.y, m43: rotateTransform.columns.3.z, m44: rotateTransform.columns.3.w)

关于ios - ARKit 放置一个面向摄像头的 SCNNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com