読者です 読者をやめる 読者になる 読者になる

元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

NyARToolkit 0.7.20080406.0移行の修正ポイント

まず更新内容から。

  • 関数名のスペルミスを直しました。
  • キャプチャ画像が実はBGRだったのに、RGBだと思い込んで処理してた部分を修正しました。
  • keiさんに指摘された不具合を直しました。


申し訳ないことにAPI変更があったので、以前のバージョンで開発を進めている方はアプリケーション側に何箇所か修正を入れる必要があります。

ちなみに…モジュールを新バージョンに入れ替えると、マーカーの認識率が見た目でわかるくらい良くなります。(個人差あり)

JavaSimpleLiteをベースに開発されている方

init関数とdisplay関数、それにonUpdate関数を修正する必要があります。
該当部分のdiffを貼っておきますので、参考にしてください。

以下のソースコードで、先頭に-がついてるところが差し替える元コード、+がついているのが差し替えた後のコードになります。

init関数
@@ -121,9 +121,8 @@
         //NyARToolkitの準備
         try{
             //キャプチャの準備
-            capture=new JmfCameraCapture(320,240,15f,JmfCameraCapture.PIXCEL_FORMAT_RGB);
+            capture=new JmfCameraCapture(320,240,15f,JmfCameraCapture.PIXEL_FORMAT_RGB);
             capture.setCaptureListener(this);
-            capture.start();
             //NyARToolkitの準備
             ar_param=new GLNyARParam();
             NyARCode ar_code  =new NyARCode(16,16);
@@ -132,8 +131,9 @@
             nya=new GLNyARSingleDetectMarker(ar_param,ar_code,80.0);
             ar_code.loadFromARFile(CARCODE_FILE);
             //GL対応のRGBラスタオブジェクト
-            cap_image=new GLNyARRaster_RGB(gl,ar_param,320,240);
-
+            cap_image=new GLNyARRaster_RGB(gl,ar_param);
+            //キャプチャ開始
+            capture.start();
        }catch(Exception e){
             e.printStackTrace();
         }
display関数
@@ -166,17 +166,10 @@
     {
         
         try{
-            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame.
-          
-    
-            //キャプチャしたイメージを加工
-            Buffer b=capture.readBuffer();
-            //BufferToImage b2i=new BufferToImage((VideoFormat)b.getFormat());
-            if(b.getData()==null){
+            if(!cap_image.hasData()){
         	return;
-            }else{
-        	//画像準備OK
-            }
+            }    
+            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame.          
             //画像チェックしてマーカー探して、背景を書く
             boolean is_marker_exist;
             synchronized(cap_image){
onUpdate関数
@@ -206,7 +199,7 @@
     {
 	try{
 	    synchronized(cap_image){
-		cap_image.setRawData((byte[])i_buffer.getData(), true);
+		cap_image.setBuffer(i_buffer, true);
 	    }
 	}catch(Exception e){
 	    e.printStackTrace();


他のサンプルをベースにしている方や、修正方法が良く判らないときは、ここのコメントかWikiで質問を投げてください。