我正在尝试使用ARKit,想要在用户周围放置一些模型。当应用程序启动时,我希望它会自动将一些模型放置在用户周围,以便用户需要找到它们。
当用户移动了10米左右时,我希望再次添加一些随机模型。我认为可以这样做:
let cameraTransform = self.sceneView.session.currentFrame?.camera.transform
let cameraCoordinates = MDLTransform(matrix: cameraTransform!)
let camX = CGFloat(cameraCoordinates.translation.x)
let camY = CGFloat(cameraCoordinates.translation.y)
let cameraPosition = CGPoint(x: camX, y: camY)
let anchors = self.sceneView.hitTest(cameraPosition, types: [.featurePoint, .estimatedHorizontalPlane])
if let hit = anchors.first {
let hitTransform = SCNMatrix4(hit.worldTransform)
let hitPosition = SCNVector3Make(hitTransform.m41, hitTransform.m42, hitTransform.m43)
self.sceneView.session.add(anchor: ARAnchor(transform: hit.worldTransform))
return Coordinate(hitPosition.x, hitPosition.y, hitPosition.z)
}
return Coordinate(0, 0, 0)
}
问题在于有时它找不到任何锚点,那么我就不知道该怎么办了。而且当它找到一些锚点时,它是随机放置在我的后面而不是我面前,但我不知道为什么,因为我从来没有转动相机,所以它找不到任何锚点。
有没有更好的方法将随机模型放置在现实世界中?
frame: ARFrame
总是在相机前面。要比较距离,请使用cameraPosition
(请参见更新的答案 ^)。 - Vasilii Muravev