我正在試驗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'(請參閱更新的答案^)。 –