ARView
하나의 엔티티가 포함 된 장면을 추가하고 있습니다. 엔티티의 앵커와 카메라 사이의 거리를 어떻게 얻을 수 있을지 궁금했습니다. 카메라의 현재 위치를 얻는 방법을 알고 있지만 arScene
두 위치를 모두 빼도 올바른 위치가 나오지 않기 때문에 내가 얻는 위치가 잘못되었을 것입니다. 다음은 몇 가지 코드입니다.
import RealityKit
class ViewController: UIViewController, ARSessionDelegate {
let arScene = try! TestProj.loadScene()
@IBOutlet var sceneView: ARView!
override func viewDidLoad() {
...
sceneView.scene.addAnchor(arScene)
...
}
func session(_ session: ARSession, didUpdate frame: ARFrame) {
// Calculate distance here
let cameraPos = frame.camera.transform.columns.3
let entityPos = // Position of entity's anchor
let distance = // Find distance here
}
}
Convex Raycast
두 끝점 사이의 광선에 대해 RealityKit 장면의 모든 지오메트리에 대해을 수행해야합니다 .
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let entity = ModelEntity(mesh: .generateBox(size: 0.4))
entity.name = "Cube"
let anchor = AnchorEntity(world: [0,0,0])
anchor.addChild(entity)
arView.scene.anchors.append(anchor)
// For every entity that could be hit,
// we must generate a collision shape.
entity.generateCollisionShapes(recursive: true)
}
@IBAction func onTap(_ sender: UITapGestureRecognizer) {
let query: CollisionCastQueryType = .nearest
let mask: CollisionGroup = .default
let camera = arView.session.currentFrame?.camera
let x = (camera?.transform.columns.3.x)!
let y = (camera?.transform.columns.3.y)!
let z = (camera?.transform.columns.3.z)!
let transform: SIMD3<Float> = [x, y, z]
let raycasts: [CollisionCastHit] = arView.scene.raycast(
from: transform,
to: [0, 0, 0],
query: query,
mask: mask,
relativeTo: nil)
guard let raycast: CollisionCastHit = raycasts.first
else { return }
print(raycast.distance) // Distance from the ray origin to the hit
print(raycast.entity.name) // The entity that was hit
print(raycast.position) // The position of the hit
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다