Example #1
0
        /**
         * 指定したシリアル番号のUnknownターゲットを、Knownターゲットへ移動します。
         * @param i_serial
         * ターゲットのシリアル番号を示す値
         * @param i_dir
         * ターゲットの予備知識。ARToolkitのdirectionでどの方位であるかを示す値
         * @param i_marker_width
         * ターゲットの予備知識。マーカーのサイズがいくらであるかを示す値[mm単位]
         * @return
         * 成功すると、trueを返します。
         * @throws NyARException
         */
        public bool changeTargetToKnownBySerial(long i_serial, int i_dir, double i_marker_width)
        {
            NyARRealityTarget item = this.target.getItemBySerial(i_serial);

            if (item == null)
            {
                return(false);
            }
            return(changeTargetToKnown(item, i_dir, i_marker_width));
        }
Example #2
0
        /**
         * 指定したシリアル番号のKnown/UnknownターゲットをDeadターゲットへ遷移します。
         * @param i_serial
         * @throws NyARException
         */
        public NyARRealityTarget changeTargetToDeadBySerial(long i_serial)
        {
            NyARRealityTarget item = this.target.getItemBySerial(i_serial);

            if (item == null)
            {
                return(null);
            }
            changeTargetToDead(item);
            return(item);
        }
Example #3
0
        /**
         * Realityターゲットリストの全ての項目のアップグレード処理を行います。この関数内でリスト要素の加算/減算/種別変更処理を行います。
         * {@link #progress}のサブ関数です。
         * @throws NyARException
         */
        private void updateLists()
        {
            NyARRealityTarget[] rt_array = this.target.getArray();

            for (int i = this.target.getLength() - 1; i >= 0; i--)
            {
                NyARRealityTarget tar = rt_array[i];
                if (tar._ref_tracktarget._delay_tick == 0)
                {
                    //30fps前後で1秒間の認識率とする。
                    tar.grab_rate += 3;
                    if (tar.grab_rate > 100)
                    {
                        tar.grab_rate = 100;
                    }
                    switch (tar._target_type)
                    {
                    case NyARRealityTarget.RT_DEAD:
                        //何もしない
                        continue;

                    case NyARRealityTarget.RT_KNOWN:
                        //矩形座標計算
                        setSquare(((NyARRectTargetStatus)(tar._ref_tracktarget._ref_status)).vertex, tar._screen_square);
                        //3d座標計算
                        //					this._transmat.transMat(tar._screen_square,tar._offset,tar._transform_matrix);
                        this._transmat.transMatContinue(tar._screen_square, tar._offset, tar._transform_matrix, tar._transform_matrix);
                        continue;

                    case NyARRealityTarget.RT_UNKNOWN:
                        continue;

                    default:
                        break;
                    }
                }
                else
                {
                    //更新をパスして補足レートの再計算(混ぜて8で割る)
                    tar.grab_rate = tar.grab_rate - (3 * tar._ref_tracktarget._delay_tick);
                    if (tar.grab_rate < 0)
                    {
                        tar.grab_rate = 0;
                    }
                }
            }
        }
Example #4
0
        //RealityTargetの編集関数

        /**
         * Realityターゲットリストへ新しい{@link NyARRealityTarget}を追加する。
         * @param i_track_target
         * UnknownTargetに関連付ける{@link NyARTarget}.このターゲットは、{@link NyARTargetStatus#ST_RECT}であること?
         */
        private NyARRealityTarget addUnknownTarget(NyARTarget i_track_target)
        {
            Debug.Assert(i_track_target._st_type == NyARTargetStatus.ST_RECT);
            NyARRealityTarget rt = this._pool.newNewTarget(i_track_target);

            if (rt == null)
            {
                return(null);
            }
            //個数制限
            if (this._number_of_unknown >= this.MAX_LIMIT_UNKNOWN)
            {
                return(null);
            }
            rt._target_type = NyARRealityTarget.RT_UNKNOWN;
            this.target.pushAssert(rt);
            this._number_of_unknown++;
            return(rt);
        }
Example #5
0
        /**
         * 指定したターゲットを、UnknownターゲットからKnownターゲットへ遷移させます。
         * @param i_item
         * 移動するターゲット
         * @param i_dir
         * ターゲットの予備知識。ARToolkitのdirectionでどの方位であるかを示す値
         * @param i_marker_width
         * ターゲットの予備知識。マーカーの高さがいくらであるかを示す値[mm単位]
         * @param i_marker_height
         * ターゲットの予備知識。マーカーの幅がいくらであるかを示す値[mm単位]
         * @return
         * 成功するとtrueを返します。
         * @throws NyARException
         */
        public bool changeTargetToKnown(NyARRealityTarget i_item, int i_dir, double i_marker_width, double i_marker_height)
        {
            //遷移元制限
            if (i_item._target_type != NyARRealityTarget.RT_UNKNOWN)
            {
                return(false);
            }
            //ステータス制限
            if (i_item._ref_tracktarget._st_type != NyARTargetStatus.ST_RECT)
            {
                return(false);
            }
            //個数制限
            if (this._number_of_known >= this.MAX_LIMIT_KNOWN)
            {
                return(false);
            }
            //ステータス制限
            i_item._target_type = NyARRealityTarget.RT_KNOWN;

            //マーカのサイズを決めておく。
            i_item._offset.setSquare(i_marker_width, i_marker_height);

            //directionに応じて、元矩形のrectを回転しておく。
            ((NyARRectTargetStatus)(i_item._ref_tracktarget._ref_status)).shiftByArtkDirection((4 - i_dir) % 4);
            //矩形セット
            NyARDoublePoint2d[] vx = ((NyARRectTargetStatus)(i_item._ref_tracktarget._ref_status)).vertex;
            for (int i = 3; i >= 0; i--)
            {
                i_item._screen_square.sqvertex[i].setValue(vx[i]);
                i_item._screen_square.line[i].makeLinearWithNormalize(vx[i], vx[(i + 1) % 4]);
            }
            //3d座標計算
            this._transmat.transMat(i_item._screen_square, i_item._offset, i_item._transform_matrix);

            //数の調整
            this._number_of_unknown--;
            this._number_of_known++;
            return(true);
        }
Example #6
0
 /**
  * 指定したKnown,またはUnknownターゲットを、Deadターゲットにします。
  * Deadターゲットは次回のサイクルでRealityターゲットリストから削除され、一定のサイクル期間の間システムから無視されます。
  * @param i_item
  * @param i_dead_cycle
  * 無視するサイクルを指定します。1サイクルは1フレームです。デフォルトは50です。
  * @throws NyARException
  */
 public void changeTargetToDead(NyARRealityTarget i_item, int i_dead_cycle)
 {
     Debug.Assert(i_item._target_type == NyARRealityTarget.RT_UNKNOWN || i_item._target_type == NyARRealityTarget.RT_KNOWN);
     //IG検出して遷移した場合
     if (i_item._ref_tracktarget._st_type != NyARTargetStatus.ST_IGNORE)
     {
         //所有するトラックターゲットがIGNOREに設定
         this._tracker.changeStatusToIgnore(i_item._ref_tracktarget, i_dead_cycle);
     }
     //数の調整
     if (i_item._target_type == NyARRealityTarget.RT_UNKNOWN)
     {
         this._number_of_unknown--;
     }
     else
     {
         this._number_of_known--;
     }
     i_item._target_type = NyARRealityTarget.RT_DEAD;
     this._number_of_dead++;
     return;
 }
Example #7
0
 /**
  * 指定したKnown,またはUnknownターゲットを、50サイクルの間Deadターゲットにします。
  * Deadターゲットは次回のサイクルでRealityターゲットリストから削除され、一定のサイクル期間の間システムから無視されます。
  * @param i_item
  * @throws NyARException
  */
 public void changeTargetToDead(NyARRealityTarget i_item)
 {
     changeTargetToDead(i_item, 50);
 }
Example #8
0
        ////////////////////////////////////////////////////////////////////////////////
        //Public:
        //RealityTargetの操作関数
        //
        ////////////////////////////////////////////////////////////////////////////////

        /**
         * 指定したターゲットを、UnknownターゲットからKnownターゲットへ遷移させます。
         * @param i_item
         * 移動するターゲット
         * @param i_dir
         * ターゲットの予備知識。ARToolkitのdirectionでどの方位であるかを示す値
         * @param i_marker_size
         * ターゲットの予備知識。マーカーの高さ/幅がいくらであるかを示す値[mm単位]
         * @return
         * 成功するとtrueを返します。
         * @throws NyARException
         */
        public bool changeTargetToKnown(NyARRealityTarget i_item, int i_dir, double i_marker_size)
        {
            return(changeTargetToKnown(i_item, i_dir, i_marker_size, i_marker_size));
        }
Example #9
0
 /**
  * Unknown/Knownを維持できる条件を書きます。
  * @param i_target
  * @return
  */
 private bool isTargetAlive(NyARRealityTarget i_target)
 {
     return(i_target._ref_tracktarget._st_type == NyARTargetStatus.ST_RECT);
 }