我的目标是使用SpriteKit,SceneKit和ARKit将图像添加到表面(垂直/水平) . 我从照片库中取出一张图像,用于创建spriteKit场景 .

let node = SKSpriteNode(texture: SKTexture(image: image), size: size)

    //node.position = CGPoint(
    node.position = CGPoint(x:500,y:500)
    let scene = SKScene(size: CGSize(width: 1000, height: 1000))
    scene.scaleMode = .aspectFit
    scene.backgroundColor = UIColor.clear
    scene.addChild(node)

然后我用上面的spriteKitScene创建SCNPlane .

let plane = SCNPlane(width: 5.0, height: 5.0)
    plane.firstMaterial?.diffuse.contents = scene
    plane.firstMaterial?.isDoubleSided = true

然后我尝试用上面的平面创建 SCNNode .

let testNode = SCNNode(geometry:plane)
    let wrapperNode = SCNNode()

    testNode.geometry?.firstMaterial?.lightingModel = .physicallyBased
    testNode.movabilityHint = .movable
    wrapperNode.addChildNode(testNode)

这是我用来将对象添加到场景的代码

guard let object = virtualObject, let cameraTransform = session.currentFrame?.camera.transform else {
        return
    }


    let cameraWorldPos = SCNVector3.positionFromTransform(cameraTransform)
    var cameraToPosition = pos - cameraWorldPos
    cameraToPosition.setMaximumLength(DEFAULT_DISTANCE_CAMERA_TO_OBJECTS)

    object.position = cameraWorldPos + cameraToPosition

    if object.parent == nil {
        sceneView.scene.rootNode.addChildNode(object)}

我的问题是,当我使用从.scn创建的对象时,文件对象会停留在焦点方块(请参阅此demo) . 当我将spriteKit对象与我的自定义图像一起使用时,该对象不会停留在正方形的坐标处并跟随设备的移动 . 我的项目基于ARKit - Placing Virtual Objects in Augmented Reality,我正在关注这个苹果视频

https://developer.apple.com/videos/play/wwdc2017/609/

但我没有设法重现这种行为 . 知道如何将spriteKit场景保持在同一位置吗?