gpt4 book ai didi

ios - 如何从 scenekit 中的方向应用 SCNVector3 力/脉冲?

转载 作者:行者123 更新时间:2023-11-28 12:17:51 33 4
gpt4 key购买 nike

在 ARKit/SceneKit 中,当用户点击按钮时,我想对我的节点施加一个脉冲。我希望冲动来自当前用户的角度。这意味着节点将远离用户的视角。多亏了这段代码,我能够获得当前的方向/方向:

func getUserVector() -> (SCNVector3, SCNVector3) { // (direction, position)
if let frame = self.sceneView.session.currentFrame {
let mat = SCNMatrix4(frame.camera.transform) // 4x4 transform matrix describing camera in world space
let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32, -1 * mat.m33) // orientation of camera in world space
let pos = SCNVector3(mat.m41, mat.m42, mat.m43) // location of camera in world space

return (dir, pos)
}
return (SCNVector3(0, 0, -1), SCNVector3(0, 0, -0.2))
}

通过https://github.com/farice/ARShooter/blob/master/ARViewer/ViewController.swift#L191

我有一个我创建的任意 SCNVector。它包含关于多高(Y 轴)、向左或向右多少以及应用到节点的向前多少的信息。

我想转换/翻译我的 SCNVector3 以来自相机的方向。

意思是,我有

let (direction, position) = self.getUserVector()
let force = SCNVector3(x: 1.67, y: 13.83, z: -18.3)

如何从方向的位置/原点应用

最佳答案

经过大量谷歌搜索后弄明白了。为了将脉冲向量 3 转换为我需要的方向,我使用了这样的方法:

let original = SCNVector3(x: 1.67, y: 13.83, z: -18.3)
let force = simd_make_float4(original.x, original.y, original.z, 0)
let rotatedForce = simd_mul(currentFrame.camera.transform, force)

let vectorForce = SCNVector3(x:rotatedForce.x, y:rotatedForce.y, z:rotatedForce.z)
node.physicsBody?.applyForce(vectorForce, asImpulse: true)

关于ios - 如何从 scenekit 中的方向应用 SCNVector3 力/脉冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45850275/

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