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 中以某个航向/角度从相机放置对象的主要内容,如果未能解决你的问题,请参考以下文章

存储 ARKit 点云数据并检索显示

最初在 ios sdk 中以横向模式打开视图控制器

如何在 r 中以某个缩放级别显示标记?

如何使用 Swift 5 在 SpriteKit 中以某个角度应用Impulse?

当某个条件为真时,如何在 Eclipse 中以编程方式设置 C++ 断点?

我可以在 Visual Studio 2012 中以编程方式折叠/展开某个名称的所有预处理器块吗?