7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ARRaycastを飛ばして、ねらった平面の位置を取得する

Last updated at Posted at 2020-09-20

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

相棒
note

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?