ARKit - 最初在 ARSKView 中以某个航向/角度从相机放置对象
Posted
技术标签:
【中文标题】ARKit - 最初在 ARSKView 中以某个航向/角度从相机放置对象【英文标题】:ARKit - initially placing object in ARSKView at a certain heading/angle from camera 【发布时间】:2018-06-20 18:34:01 【问题描述】:我正在 ARSKView 中创建我的锚点和 2d 节点,如下所示:
func displayToken(distance: Float)
print("token dropped at: \(distance)")
guard let sceneView = self.view as? ARSKView else
return
// Create anchor using the camera's current position
if let currentFrame = sceneView.session.currentFrame
removeToken()
// Create a transform with a translation of x meters in front of the camera
var translation = matrix_identity_float4x4
translation.columns.3.z = -distance
let transform = simd_mul(currentFrame.camera.transform, translation)
// Add a new anchor to the session
let anchor = ARAnchor(transform: transform)
sceneView.session.add(anchor: anchor)
func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode?
// Create and configure a node for the anchor added to the view's session.
if let image = tokenImage
let texture = SKTexture(image: image)
let tokenImageNode = SKSpriteNode(texture: texture)
tokenImageNode.name = "token"
return tokenImageNode
else
return nil
这会将其准确地放置在相机前方给定距离 (z) 处。我还想做的是获取对象的纬度/经度,以度为单位计算角度或航向,并最初从相机中以该角度放下锚点/节点。我目前正在使用 GMSGeometryHeading 方法获取航向,该方法采用用户当前位置和目标位置来确定航向。所以当放下锚时,我想把它放在正确的方向,朝向目标位置的纬度/经度。如何使用 SpriteKit/ARKit 实现这一目标?
【问题讨论】:
【参考方案1】:你能澄清一下你的问题吗?
也许以下几行可以帮助您作为示例。在那里,cameraNode 使用基本几何公式移动,根据 x 和 y 坐标中的角度(以欧拉为单位)倾斜移动
var angleEuler = 0.1
let rotateX = Double(cameraNode.presentation.position.x) - sin(degrees(radians: Double(angleEuler)))*10
let rotateZ = Double(cameraNode.presentation.position.z) - abs(cos(degrees(radians: Double(angleEuler))))*10
cameraNode.position = SCNVector3(x:Float(rotateX), y:0, z:Float(rotateX))
如果你想让一个物体落在相机前面,并且下降的长度取决于一个度数,只需计算几何公式“Tan A = a/b”中“a”的值并更新节点的"presentation.position.y"
希望对你有帮助
【讨论】:
谢谢。我稍微澄清了我的问题,以了解我想要完成的工作。以上是关于ARKit - 最初在 ARSKView 中以某个航向/角度从相机放置对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 5 在 SpriteKit 中以某个角度应用Impulse?