まず更新内容から。
- 関数名のスペルミスを直しました。
- キャプチャ画像が実は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で質問を投げてください。