前回はタッチした位置の深度を測り、そこにPlaneを置くことを試みましたが、今回はFloor(床)の判断を試したいと思います。

Floor認識例

Floorを認識させ、Plane(緑)を表示しています。デフォルトではもっと広いPlaneが表示されるのですが、分かり辛かったので縮小させています。
----->
Floorが(分かり難いですが)膝より上に表示されています 端末を膝より下に移動させても、Floorが足首より上に表示されています

上記のように当初膝より上に表示されていたFloor向けのPlaneがデバイスを地面に近づけても、どんどんFloor向けのPlaneが地面に近づいていきます。恐らく写っている足は認識されていないようです。

実装概要

前回作成したプロジェクトをベースに作成しています。

TangoPointCloudFloorのインスタンス化

「Tango Point Cloud Floor」Prefabを追加し、インタンス化しています。 Assets/Scripts/DepthPerceptionMainController.cs - OnTangoPermissionsメソッド
mTangoPointCloudFloor = FindObjectOfType();

// デフォルトではFloorが表示されて調査し辛かったので、一旦非表示化
mTangoPointCloudFloor.gameObject.SetActive(false);

アプリで用意したボタンを押下することで、Floorを探し始めるようにしています。
Assets/Scripts/DepthPerceptionMainController.cs - FindFloorメソッド
if (!mTangoPointCloud.m_floorFound)
{
    try
    {
        if (!mFindingFloor)
        {
            mFindingFloor = true;    // TangoPointCloud.FindFloorの多重コール抑止
            mTangoPointCloud.FindFloor();
        }

        // TangoPointCloud.m_floorFoundがON(Floorが見つかる)になるまで、コルーチンを回す
        while (!mTangoPointCloud.m_floorFound)
        {
            yield return new WaitForEndOfFrame();
        }
    }
    finally
    {
        mFindingFloor = false;
    }
}

if ((mTangoPointCloudFloor != null) && (mTangoPointCloudFloor.gameObject.activeInHierarchy == false))
{
    // TangoPointCloudFloorで管理しているPlaneを表示させる
    mTangoPointCloudFloor.gameObject.SetActive(true);
}

サンプルアプリはこちらにアップしてありますので、興味がありましたら、参照してみてください。

コメントの投稿