ARKitでは、画面のタッチ位置に対応する平面の、物理空間の3D位置を取得できます。
###1、View内の関心のあるポイントで、RaycastQueryを初期化する。
RealityKit(ARView)の場合
let query = arView.makeRaycastQuery(from point: CGPoint, allowing target: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment)
SceneKit(ARSCNView)の場合(以下SceneKitの例で進めます)
let query = sceneView.raycastQuery(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment)
queryの引数:
from: CGPoint //関心のある物体のView内のポイント
allowing: ARRaycastQuery.Target //どの程度の平面を検出するか
case estimatedPlane //ARKitが推定できる非平面のサーフェスまたは平面
case existingPlaneGeometry //平面が決定的なサイズと形状を持つことを必要とする
case existingPlaneInfinite //サイズや形状に関係なく、検出された平面を指定する
alignment: ARRaycastQuery.TargetAlignment //平面が縦か横か両方か
case any
case horizontal
case vertical
###2、Sessionに「1、」のqueryを発射(raycast)してもらう
let results = sceneView.session.raycast(query)
###3、結果を取得する
let position = results.first.worldTransform.translation
###4、raycast追跡して平面の位置を更新する
var tracking:ARTrackedRaycast = sceneView.session.trackedRaycast(query) { (results) in
// 結果が更新されると呼ばれる
}
###5、不要になった追跡を破棄する
追跡し続けるとリソースを消費します。
raycast.stopTracking()
raycast = nil
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。
contact:
rockyshikoku@gmail.com
Twitter
[MLBoysチャンネル]
(https://www.youtube.com/channel/UCbHff-wfjTnB3rtXIP6y0xg)
Medium