Beispiel #1
0
 ///<smmary>
 ///指定したIDを持つオブジェクトのインデックスを返す
 ///</summary>
 public static int GetAnimalIndex(int search_id, GameObject[] animals)
 {
     for (int i = 0; i < animals.Length; i++)
     {
         animalMaster animal_script = animals[i].GetComponent <animalMaster>();
         if (search_id == animal_script.id)
         {
             return(i);
         }
     }
     return(0);
 }
Beispiel #2
0
 ///<summary>
 ///指定したIDを持つオブジェクトが存在しているのか判定する関数
 ///</summary>
 public static bool CheckTargetObject(int search_id, GameObject[] animals)
 {
     foreach (GameObject animal in animals)
     {
         animalMaster animal_script = animal.GetComponent <animalMaster>();
         if (search_id == animal_script.id)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #3
0
 ///<summary>
 ///すでに存在するオブジェクトと同じIDのマーカが検出されているか判定する関数
 ///</summary>
 public static bool CheckSameID(GameObject animal, int[] search_ids)
 {
     foreach (int id in search_ids)
     {
         animalMaster animal_script = animal.GetComponent <animalMaster>();
         if (animal_script.id == id)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #4
0
 ///<summarry>
 /// 登録されたマーカが存在しているか調べる関数
 /// True 存在している, False 存在していない
 ///</summarry>
 public static bool CheckLiveMarker(int id, GameObject[] animals)
 {
     foreach (GameObject animal in animals)
     {
         animalMaster animal_script = animal.GetComponent <animalMaster>();
         if (id == animal_script.id)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #5
0
    void Update()
    {
        //Leapmotionのカメラの映像を取得
        readLeftRightFrame();

        Point2f[][] maker_corners;
        int[]       maker_ids;
        Point2f[][] reject_points;

        //ARマーカの検出
        CvAruco.DetectMarkers(leftRight_frame[0], ar_dict, out maker_corners, out maker_ids, detect_param, out reject_points);
        GameObject[] animals = GameObject.FindGameObjectsWithTag("animal");

        //マーカが検出されない場合はすべてのanimalオブジェクトを削除
        if (maker_ids.Length == 0)
        {
            foreach (GameObject animal in animals)
            {
                animalMaster animal_script = animal.GetComponent <animalMaster>();
                animal_script.destoryThis();
                Debug.Log("destroy");
            }
        }
        //マーカが検出されなかったanimalオブジェクトを削除
        else
        {
            foreach (GameObject animal in animals)
            {
                //検出されたIDと一致するゲームオブジェクトが存在しなかったら
                if (DetObj.CheckSameID(animal, maker_ids) == false)
                {
                    animalMaster animal_script = animal.GetComponent <animalMaster>();
                    animal_script.destoryThis();
                }
            }
        }

        if (maker_ids.Length > 0)
        {
            //検出されたマーカ情報の描画
            CvAruco.DrawDetectedMarkers(leftRight_frame[0], maker_corners, maker_ids, new Scalar(0, 255, 0));
            //マーカの姿勢推定
            OutputArray tvec = new Mat(), rvec = new Mat();
            CvAruco.EstimatePoseSingleMarkers(maker_corners, 0.6f, cameraMatrix, distCoefficients, rvec, tvec, null);


            //検出されたIDに対する操作
            for (int i = 0; i < maker_ids.Length; i++)
            {
                //ID辞書と一致するマーカが検出されたら
                if (DetObj.CheckTargetMarker(maker_ids[i], id_dict) == true)
                {
                    if (animals != null)
                    {
                        //すでにオブジェクトが存在していたら
                        if (DetObj.CheckTargetObject(maker_ids[i], animals) == true)
                        {
                            int          animal_index  = DetObj.GetAnimalIndex(maker_ids[i], animals);
                            animalMaster animal_script = animals[animal_index].GetComponent <animalMaster>();
                            animal_script.moveModel(i, tvec, rvec);
                        }

                        //オブジェクトが存在しない場合
                        else
                        {
                            GameObject   newAnimal     = Instantiate(animal);
                            animalMaster animal_script = newAnimal.GetComponent <animalMaster>();
                            int          animal_index  = DetObj.GetAnimalIndex(maker_ids[i], animals);
                            animal_script.setParam(maker_ids[i], i, tvec, rvec);
                        }
                    }

                    else
                    {
                        GameObject   newAnimal     = Instantiate(animal);
                        animalMaster animal_script = newAnimal.GetComponent <animalMaster>();
                        animal_script.setParam(maker_ids[i], 0, tvec, rvec);
                    }
                }
            }
        }
    }