NyARToolkit for Android 4.0.3のリリースします。
http://sourceforge.jp/projects/nyartoolkit-and/releases/?package_id=12943
更新内容
更新内容は以下の通りです。
- 基本ライブラリをNyARToolkit4.0.3へ更新
- 画処理系の更新。YUV、Bitmap形式画像への対応
- Android固有の高速化
- ProcessingのスケッチライクなActivityの追加
画処理系の最適化により、以前のものより5-10倍ほど速度が向上しています。また、スケッチシステムの採用により、簡単にアプリケーションを作ることが出来るようになりました。
サンプルコード
立方体を表示するSimpleLiteの、スケッチを使用した実装例です。
package jp.nyatla.nyartoolkit.and;
import javax.microedition.khronos.opengles.GL10;
import jp.androidgroup.nyartoolkit.R;
import jp.androidgroup.nyartoolkit.markersystem.NyARAndMarkerSystem;
import jp.androidgroup.nyartoolkit.markersystem.NyARAndSensor;
import jp.androidgroup.nyartoolkit.sketch.AndSketch;
import jp.androidgroup.nyartoolkit.utils.camera.CameraPreview;
import jp.androidgroup.nyartoolkit.utils.gl.*;
import jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystemConfig;
import android.content.res.AssetManager;
import android.hardware.Camera;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
/**
* Hiroマーカの上にカラーキューブを表示します。
* 定番のサンプルです。
*
*/
public class SimpleLiteActivity extends AndSketch implements AndGLView.IGLFunctionEvent
{
CameraPreview _camera_preview;
AndGLView _glv;
Camera.Size _cap_size;
/**
* onStartでは、Viewのセットアップをしてください。
*/
@Override
public void onStart()
{
super.onStart();
FrameLayout fr=((FrameLayout)this.findViewById(R.id.sketchLayout));
//カメラの取得
this._camera_preview=new CameraPreview(this);
this._cap_size=this._camera_preview.getRecommendPreviewSize(320,240);
//画面サイズの計算
int h = this.getWindowManager().getDefaultDisplay().getHeight();
int screen_w,screen_h;
screen_w=(this._cap_size.width*h/this._cap_size.height);
screen_h=h;
//camera
fr.addView(this._camera_preview, 0, new LayoutParams(screen_w,screen_h));
//GLview
this._glv=new AndGLView(this);
fr.addView(this._glv, 0,new LayoutParams(screen_w,screen_h));
}
NyARAndSensor _ss;
NyARAndMarkerSystem _ms;
private int _mid;
AndGLTextLabel text;
AndGLBox box;
AndGLFpsLabel fps;
public void setupGL(GL10 gl)
{
try
{
AssetManager assetMng = getResources().getAssets();
//create sensor controller.
this._ss=new NyARAndSensor(this._camera_preview,this._cap_size.width,this._cap_size.height,30);
//create marker system
this._ms=new NyARAndMarkerSystem(new NyARMarkerSystemConfig(this._cap_size.width,this._cap_size.height));
this._mid=this._ms.addARMarker(assetMng.open("AR/data/hiro.pat"),16,25,80);
this._ss.start();
//setup openGL Camera Frustum
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadMatrixf(this._ms.getGlProjectionMatrix(),0);
this.text=new AndGLTextLabel(this._glv);
this.box=new AndGLBox(this._glv,40);
this._debug=new AndGLDebugDump(this._glv);
this.fps=new AndGLFpsLabel(this._glv,"MarkerPlaneActivity");
this.fps.prefix=this._cap_size.width+"x"+this._cap_size.height+":";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
this.finish();
}
}
AndGLDebugDump _debug=null;
public void drawGL(GL10 gl)
{
try{
//背景塗り潰し色の指定
gl.glClearColor(0,0,0,0);
//背景塗り潰し
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
if(ex!=null){
_debug.draw(ex);
return;
}
fps.draw(0, 0);
synchronized(this._ss){
this._ms.update(this._ss);
if(this._ms.isExistMarker(this._mid)){
this.text.draw("found"+this._ms.getConfidence(this._mid),0,16);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadMatrixf(this._ms.getGlMarkerMatrix(this._mid),0);
this.box.draw(0,0,20);
}
}
}catch(Exception e)
{
ex=e;
}
}
Exception ex=null;
}
AndSketchは、スケッチシステムのベースクラスです。Activityを継承しています。関数は、OnStart,setupGL,drawGLの3つです。
- OnStart – ActivityのOnStartをオーバライドします。ここでは、レイアウトと、ビューを構築しています。
- setupGL – OpenGLのセットアップを書きます。text,box,debugはそれぞれ、OpenGL向けの描画クラスです。
- drawGL – OpenGLの描画処理を書きます。 synchronizedの場所に注意してください。非同期に更新されるNyARAndSensorと同期を取る為に、オブジェクトにアクセスするときはsynchronizedが必要です。
サンプルの構造は、他のNyARシリーズのスケッチシステムとほぼ同じです。