В платформах Apple RealityKit 2.0 и ARKit 4.0 можно найти три основных типа методов Raycast
: ARView Raycast
, ARSession Raycast
и Scene Raycast
(или World Raycast). Все методы написаны на Swift:
ARView.raycast(от:разрешение:выравнивание:)
Этот метод экземпляра выполняет приведение лучей, при котором луч направляется в сцену из центра камеры через точку в представлении, и результаты немедленно возвращаются. Вы можете использовать этот тип raycast в ARKit.
func raycast(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment) -> [ARRaycastResult]
ARView.scene.raycast(происхождение:направление:запрос:маска:относительно:)
МИРОВОЙ РЕЙКАСТ
Этот метод экземпляра выполняет приведение выпуклого луча ко всей геометрии сцены для луча заданного происхождения, направления и длины.
func raycast(origin: SIMD3<Float>,
direction: SIMD3<Float>,
query: CollisionCastQueryType,
mask: CollisionGroup,
relativeTo: Entity) -> [CollisionCastHit]
ARView.session.trackedRaycast(_:updateHandler:)
Этот метод экземпляра повторяет запрос raycast с течением времени, чтобы уведомить вас об обновленных поверхностях в физической среде. Вы можете использовать этот тип raycast в ARKit 3.5.
func trackedRaycast(_ query: ARRaycastQuery,
updateHandler: @escaping ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?
ARView.trackedRaycast (от: разрешение: выравнивание: обработчик обновлений :)
Этот метод экземпляра RealityKit также выполняет отслеживание луча, но здесь луч брошен в сцену из центра камеры через точку в виде.
func trackedRaycast(from point: CGPoint,
allowing target: ARRaycastQuery.Target,
alignment: ARRaycastQuery.TargetAlignment,
updateHandler: @escaping ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?
Фрагмент кода 01:
import RealityKit
let startPosition: SIMD3<Float> = [3,-2,0]
let endPosition: SIMD3<Float> = [10,7,-5]
let query: CollisionCastQueryType = .all
let mask: CollisionGroup = .all
let raycasts: [CollisionCastHit] = arView.scene.raycast(from: startPosition,
to: endPosition,
query: query,
mask: mask,
relativeTo: nil)
guard let rayCast: CollisionCastHit = raycasts.first
else {
return
}
Фрагмент кода 02:
import ARKit
let query = arView.raycastQuery(from: screenCenter,
allowing: .estimatedPlane,
alignment: .any)
let raycast = session.trackedRaycast(query) { results in
if let result = results.first {
object.transform = result.transform
}
}
raycast.stop()
person
Andy Fedoroff
schedule
11.06.2020