我正在试验ARKit,我试图在用户周围放置一些模型。所以我想要的是,当应用程序启动时,它只是在用户周围放置一些模型,所以他需要找到它们。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)
}
问题是有时它找不到任何锚,然后我不知道该怎么做。当它发现一些锚点时,它会随机放在我身后,而不是放在我面前,但在我身后。我不知道为什么,因为永远不要打开相机,因此找不到任何锚点。
有没有更好的方法在现实世界中放置随机模型?
感谢您的解释。我有一些疑问。在您的示例代码中进行碰撞测试的要点arcRandom应该是0到1之间的某个数字,您说这样的话总是在摄像机前面?然后用x + z坐标来查看用户是否移动了足够。我需要什么坐标来比较这些?那是session.currentFrame?.camera.transform x和z吗? – user1007522
@ user1007522是的,来自功能参数的'frame:ARFrame'总是在摄像头前面。要比较距离,请使用'cameraPosition'(请参阅更新的答案^)。 –