OSDN Git Service

[bugfix]nyartoolkit
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Wed, 27 Jan 2010 14:53:42 +0000 (14:53 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Wed, 27 Jan 2010 14:53:42 +0000 (14:53 +0000)
+SingleARMarkerProcesserが複数マーカ登録時に正常動作しないバグを修正
+SingleARMarkerProcesserのサンプルを修正。2種のマーカーを扱うようにした。

git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit@418 7cac0a50-4618-4814-88d0-24b83990f816

trunk/sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/SingleARMarker.java
trunk/src/jp/nyatla/nyartoolkit/processor/SingleARMarkerProcesser.java

index c617940..3ec35be 100644 (file)
@@ -114,6 +114,7 @@ public class SingleARMarker implements GLEventListener, JmfCaptureListener
        }\r
        \r
        private final String CARCODE_FILE1 = "../../Data/patt.hiro";\r
+       private final String CARCODE_FILE2 = "../../Data/patt.kanji";\r
        \r
        \r
        private Animator _animator;\r
@@ -132,7 +133,7 @@ public class SingleARMarker implements GLEventListener, JmfCaptureListener
        \r
        private Object _sync_object=new Object();\r
        private MarkerProcessor _processor;\r
-       private NyARCode[] _code_table=new NyARCode[1];\r
+       private NyARCode[] _code_table=new NyARCode[2];\r
 \r
        public SingleARMarker(NyARParam i_cparam) throws NyARException\r
        {\r
@@ -149,6 +150,8 @@ public class SingleARMarker implements GLEventListener, JmfCaptureListener
 \r
                this._code_table[0]=new NyARCode(16,16);\r
                this._code_table[0].loadARPattFromFile(CARCODE_FILE1);\r
+               this._code_table[1]=new NyARCode(16,16);\r
+               this._code_table[1].loadARPattFromFile(CARCODE_FILE2);\r
                \r
                //OpenGLフレームの準備(OpenGLリソースの初期化、カメラの撮影開始は、initコールバック関数内で実行)\r
                Frame frame = new Frame("Java simpleLite with NyARToolkit");\r
index 19fb191..7341d7c 100644 (file)
@@ -89,12 +89,14 @@ public abstract class SingleARMarkerProcesser
                        }\r
                }\r
                private NyARIntPoint2d[] __tmp_vertex=NyARIntPoint2d.createArray(4);\r
+               private int _target_id;\r
                /**\r
                 * Initialize call back handler.\r
                 */\r
-               public void init(INyARRgbRaster i_raster)\r
+               public void init(INyARRgbRaster i_raster,int i_target_id)\r
                {\r
                        this._ref_raster=i_raster;\r
+                       this._target_id=i_target_id;\r
                        this.code_index=-1;\r
                        this.confidence=Double.MIN_NORMAL;\r
                }\r
@@ -143,7 +145,7 @@ public abstract class SingleARMarkerProcesser
                        }\r
                        \r
                        //認識処理\r
-                       if (this.code_index == -1) { // マーカ未認識\r
+                       if (this._target_id == -1) { // マーカ未認識\r
                                //現在は未認識\r
                                if (c1 < this.cf_threshold_new) {\r
                                        return;\r
@@ -157,7 +159,7 @@ public abstract class SingleARMarkerProcesser
                        }else{\r
                                //現在はマーカ認識中                           \r
                                // 現在のマーカを認識したか?\r
-                               if (lcode_index != this.code_index) {\r
+                               if (lcode_index != this._target_id) {\r
                                        // 認識中のマーカではないので無視\r
                                        return;\r
                                }\r
@@ -169,6 +171,7 @@ public abstract class SingleARMarkerProcesser
                                if (this.confidence>c1) {\r
                                        return;\r
                                }\r
+                               this.code_index=this._target_id;\r
                        }\r
                        //新しく認識、または継続認識中に更新があったときだけ、Square情報を更新する。\r
                        //ココから先はこの条件でしか実行されない。\r
@@ -283,7 +286,7 @@ public abstract class SingleARMarkerProcesser
                this._tobin_filter.doFilter(i_raster, this._bin_raster);\r
 \r
                // スクエアコードを探す\r
-               this._detectmarker_cb.init(i_raster);\r
+               this._detectmarker_cb.init(i_raster,this._current_arcode_index);\r
                this._square_detect.detectMarkerCB(this._bin_raster,this._detectmarker_cb);\r
                \r
                // 認識状態を更新\r