ARFoundation道路-Raycasting

(A)線検出器の概念

  レイキャスティングは、文字通りレイキャスティングとして翻訳、我々は通常、その効果に基づいて、放射線検出と呼ばれ、このような弾丸の検出などの3Dデジタルワールド内の特定のオブジェクト一般的に使用される技術を、選択することにより、放射線検出は、3Dで敵の状況を打つ、VRゲームや銃を拾うために地面から、放射線検出に使用されます。

  我々は平面を検出し、可視化する際ARにおいて、我々は、平坦な表面上に配置されるオブジェクトが、どのような位置我々は、物体それの平面に配置されていますか?我々は3次元平面が検出されたかを知りたい、と私たちの携帯電話の画面には、2次元平面での配置ポイントを選択することがどのように3次元、2次元のでしょうか?通常の練習は、放射線検出のためです。

  追加モデルインパクタは、発生し検出された物体の衝突を発生させると、一方向のポイントから3次元の世界で検出された放射線の基本的な考え方は、衝突時に、放射線の方向に、無限の光を発します私たちは、カメラ位置の(それは私たちの目のARで)例えば、私たちが画面からユーザーが使用を構築するためのポイントをクリックすることができ、あなたはまた、衝突の位置を検出するために、放射線を使用することができ、達成するための目標を達成する弾丸を検出するための放射線を使用することができます我々が検出された平面上に仮想オブジェクトを配置できるように、シーンにおける衝突検出の平面を持つ光線は、衝突の衝突位置は、返された場合。

以上、私たちは、仮想オブジェクトを配置するには、次のコードを使用します。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

[RequireComponent(typeof(ARRaycastManager))]
public class AppControler : MonoBehaviour
{
    public  GameObject spawnPrefab;
    static List<ARRaycastHit> Hits;
    private ARRaycastManager mRaycastManager;
    private GameObject spawnedObject = null;
    private void Start()
    {
        Hits = new List<ARRaycastHit>();
        mRaycastManager = GetComponent<ARRaycastManager>();
    }

    void Update()
    {
        if (Input.touchCount == 0)
            return;
        var touch = Input.GetTouch(0);
        if (mRaycastManager.Raycast(touch.position, Hits, TrackableType.PlaneWithinPolygon | TrackableType.PlaneWithinBounds))
        {
            var hitPose = Hits[0].pose;
            if (spawnedObject == null)
            {
                spawnedObject = Instantiate(spawnPrefab, hitPose.position, hitPose.rotation);
            }
            else
            {
                spawnedObject.transform.position = hitPose.position;
            }
        }
    }
}

  上記のコードでは、我々はmRaycastManager.Raycastを使用()メソッドは、仮想物体の配置を検出線作るありません。位置が自動的に配置され必要とされない場合を除き、実際には、ARで、(例えば、検出面上の草)、時の仮想物体の正確な配置、通常位置を決定するために、X線検出器を行います。

(B)詳細線検出器

  ARFoundation、唯一面と点群を検出するための電流線検出器です。検出対象物を検出する放射線は、そのように同じ座標空間内にする必要があるためARFoundation同様の物理モジュール内線検出器ユニティ放射線検出するが、別のインタフェースを提供するが、X線検出器を使用して、ARRaycastManagerアセンブリARFoundationを必要としますコンポーネントはARSessionOriginオブジェクトに搭載する必要があります。

  ARFoundation線検出器は、次の表にプロトタイプを機能する2つの方法のいずれかを使用することができます。

線の検出方法 説明
パブリックブールレイキャスト(ベクトル2 screenPoint、リストhitResults、TrackableType trackableTypeMask = TrackableType.All) 特許文献1点、2本の光線がパラメータ型マスク3トラッキング可能(すなわちのみカテゴリ又はカテゴリが撮影対象を追跡することができる)、ターゲットに衝突するすべてのパラメータのリストを座標、方法は、ブール値を返す画面でありますタイプ、衝突の真の表現、虚偽の表現の衝突が発生しました。
パブリックブールレイキャスト(レイ・レイ、リストhitResults、TrackableType trackableTypeMask = TrackableType.All) 光線1は、2オブジェクト線と衝突するすべてのパラメータのリスト、パラメータ3追跡可能型マスク(すなわち、唯一のクラスまたはオブジェクトのクラスを追跡することができるX線検出器)(位置及び向きを含む)は、基準線の一種でありますこの方法は、タイプブール値を返し、真が偽が衝突しない示し、衝突を示します。

  TrackableType.FeaturePoint | trackableTypeMask衝突検出は、オブジェクトタイプをフィルタするために必要とされ、追跡可能な値のタイプは、次の属性値の一つであってもよいし、いくつかであってもよいし、いくつかの場合、TrackableType.PlaneWithinPolygonとして、ビット単位を採用したりすることができます。

trackableTypeプロパティ 説明
すべて 衝突検出に置かれたすべてのオブジェクトの値。私たちは、この値を記入した場合は、ARFoundationで、放出される放射線は、我々は、多角形を囲むシーンの全ての面、衝突検出と特徴点の正常な動作します。
FeaturePoint 点群内の現在のフレーム内のすべての特徴点の衝突検出。
無し この値は、レイキャストに渡された場合、この値は、ノーリターンのtrackableHit衝突がないことを示すために使用され、衝突のいずれかの結果を与えることはありません。
PlaneWithinPolygon 凸多角形の境界が検出され、衝突検出面されています。
PlaneWithinBounds これは、衝突検出のための平面バウンディングボックス内の現在のフレームで検出されました。
PlaneWithinInfinity 衝突検出面は検出されたが、境界ボックス検出または多角形に限定されないが、衝突検出平面検出面で拡張することができるされています。
FeaturePointWithSurfaceNormal 光線と評価面衝突の検出は、評価は必ずしも平坦面を形成することができます。
飛行機 衝突検出面の上記すべての種類のレイ。
画像 2D画像を撮影します。
レントゲン検出と顔。

  ARRaycastHitクラスは、衝突に保存され、その主な属性は次の表に示し、衝突体の情報を検出します。

ARRaycastHitプロパティ 説明
距離 float型、ヒットポイントを得るために、放射線源からの距離。
trackableId 衝突は、オブジェクトIDを追跡することができます。
ポーズ タイプ、ユニティオブジェクトのワールド座標の投影姿勢に当たる光をもたらします。
hitType 追跡可能なタイプ、ヒットが追跡可能なオブジェクト、すなわち7つの以前に記載されたタイプは、(実際には、現在ARFoundation面のみ特徴点検出放射を行うことができる)トラックのいずれであってもよいです。
sessionRelativeDistance セッション・スペースにおける衝突点まで線原点からの距離。
sessionRelativePose スペースの衝突点でのセッション姿勢。

  財団の後、我々は簡単に前のセクションでコードを理解することができます以上、私たちは最初にすべてを保存するために使用される配列の一覧ARRaycastHit型はオブジェクトが放射線検出と衝突追跡初期化すると、リストにはないように、初期化する必要があります前後にメモリを割り当てるために、ガベージコレクションメカニズム(ガベージコレクション、GC)を避けるためですNULL値、。その後、衝突が発生した場合に、[0](これは最近で追跡可能なオブジェクトは、放射線源からの光線と衝突する第一の予選ヒットである、オブジェクトの衝突検出を追跡することができ、指定線検出メソッドを呼び出し、通常、これは、我々は通常、第一の目的は、仮想オブジェクトの配置の場所)の光線と衝突選択し、必要な結果です。

リファレンス

AR財団についてAR財団について

おすすめ

転載: blog.csdn.net/yolon3000/article/details/94458183