我的目标是使用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场景保持在同一位置吗?