NyARToolKit for Android licence has been updated

NyARToolkit for Android licence was updated to LGPLv3.

Source code header and bundled licence text were updated in NyARTK4.nyatla branch.

https://osdn.jp/projects/nyartoolkit-and/scm/git/NyARTK4.nyatla/

Source code header and bundled licence text has been updated in NyARTK4.nyatla branch.
Other branches are not updated.
These branch will probably available on LGPLv3. However,should contact to commiter if you require completeness.

 

NyARToolkit for Android 4.1.1 Released

NyARToolkit for Android 4.1.1をリリースしました。更新内容は、ライブラリの差し替えのみです。

NyARToolKit for Android – Android 2.2をチェックしてください。

http://sourceforge.jp/projects/nyartoolkit-and/releases/

English

NyARToolkit for Android 4.1.1 is released. Change is having updated the library to NyARToolkit 4.1.1.

Check NyARToolKit for Android – Android 2.2.

http://sourceforge.jp/projects/nyartoolkit-and/releases/

NyARToolkit/4.1.1(Java/C#/Unity) & NyAR4psg 1.3.2 Released

NyARToolkit/4.1.1(Java/C#/Unity) と NyAR4psg/1.3.2をリリースします。

更新内容

NyARToolkit/4.1.1

  • 4.1.0の致命的な不具合 #30297 のバグフィクスです。

NyAR4psg/1.3.2

  • NyARToolkitを4.1.1へ更新しました。
  • Processing2.0Betaへ対応しました。(1.5系と2.0系は別のライブラリ・サンプルを用意しました。) 既知の問題点として、2.0Beta版は、文字列表示処理が完全に動作しません。

 

English

NyARToolkit/4.1.1(Java/C#/Unity)  and NyAR4psg/1.3.2 are released.

Update details

NyARToolkit/4.1.1

NyAR4psg/1.3.2

  • Updated NyARToolkit library to 4.1.1.
  • Supported Processing2.0Beta (1.5 and 2.0 libraries and samples are separated.)
    A known issue is text-rendering does not work correctly.

NyARToolkit for Android demoのソースコードと使い方

NyARToolkit for Android のデモで紹介したAndroidアプリのソースコードと、その組み立て方を説明します。

準備

Android開発環境を事前にセットアップしてあるものとして説明します。API はAPI8を使えるようにしてください。

セットアップ

  1. 以下のURLから、ソースコードのセットをダウンロードします。
    andmmd-fileset-20120612
  2. Eclipseへ必要なプロジェクトをImportします。


    必要なのは次の4つです。

    • AndMmd – アプリケーションスケッチ本体
    • NyARToolkit for Android – AndUtils Android用のお道具箱
    • NyARToolkit for Android – NyARToolkit本体
    • NyMmdForAndroid – Android用のNyMmd

    NyMmc,NyMmdTest,src.pc.JOGLはPC用ですので、インポートするとエラーになります。

  3. もしかしたらエラーが発生するかもしれません。その時は文字コードをチェックしてください。NyMmd/NyARToolKitは、UTF-8で書かれています。

実行

通常のAndroidアプリケーションと同じように実行します。なお、実機/エミュレータでのデバック実行は、実行速度が1/100くらいになってしまうので、大変ストレス(起動まで1分くらい)があります。

Androidから直接起動すると、それなりの速度で動作します。

ライセンスについて

NyMmd(GPLv2)+NyARToolkit(GPLv3)のため、GPLv3となります。改造してアプリケーションを配布するときは、GPLの表示と、ソースコードの取得方法(問い合わせメールアドレスか、配布URLの表示)をお願いします。

English

This is explanation of how to make NyARToolkit for android demo program with NyMmd for Android.

Preparation

NyARToolkit for Android requires API8. Please prepare the development environment of API8 before setup.

Setup

  1. Download a fileset from below  URL. The file contains NyARToolkit, NyMmd and Application file.
    andmmd-fileset-20120612
  2. Import projects to Eclipse. Required projects are in list.
    • AndMmd – Application activity
    • NyARToolkit for Android – library
    • NyARToolkit for Android – NyARToolkit library
    • NyMmdForAndroid – NyMmd library
  3. If an error occurs, check  a character code is UTF-8.

Start Application

Start debug the AndMmd project.
In debug mode or an emulation, application is very a slow (100 times slower).
When it is started from Android, it runs at usual speed.

NyARToolkit for Android のデモ

NyARToolkit for Androidのパフォーマンスが劇的に上がったので、NyMmdと組み合わせて、ありがちなデモを作ってみました。

はい。Nyanyanyanyanya!!!です。モーションとかモデルとかBGMは使わしてもらってます。(BGMは編集です。)

ソフトウェアは、NyARToolkit for Android 4.0.3と、Android向けチューニングしたNyMmd 2.0(trunk)です。

気になる動作速度は、Nexus oneで30fps程度。Xperia miniで50fpsくらいでした。1万頂点未満のモデルで物理演算無しなら、MMDのモデルをリアルタイムに動かしても余裕があります。

ソースコード

ソースコードはNyARToolkitのAndSketchを使って書きましたので、大変コンパクトです。
SimpleLiteのコードに、NyMmdの初期化処理と描画処理を足しただけですね。

package jp.nyatla.andnya3;

import javax.microedition.khronos.opengles.GL10;

import jp.androidgroup.nyartoolkit.markersystem.*;
import jp.androidgroup.nyartoolkit.sketch.*;
import jp.androidgroup.nyartoolkit.utils.camera.CameraPreview;
import jp.androidgroup.nyartoolkit.utils.gl.*;
import jp.nyatla.arbozu.R;
import jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystemConfig;
import jp.nyatla.nymmd.*;
import android.content.res.AssetManager;
import android.hardware.Camera;
import android.view.ViewGroup.LayoutParams;
import android.widget.*;

public class AndMmdActivity 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));
    int sw=this.getWindowManager().getDefaultDisplay().getWidth();
    int sh=this.getWindowManager().getDefaultDisplay().getHeight();
    if(sw>640){
      sw/=2;
      sh/=2;
    }
    //カメラの取得
    this._camera_preview=new CameraPreview(this);
    this._cap_size=this._camera_preview.getRecommendPreviewSize(sw,sh);
    //画面サイズの計算
    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));
  }
  private int _mid;
  AndGLTextLabel text;
  AndGLBox box;
  AndGLFpsLabel fps;
  AndMmdMotionPlayer _player;
  NyARAndMarkerSystem _ms;
  NyARAndSensor _ss;
  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._player=new AndMmdMotionPlayer(gl);
      this._player.setPmd(new AndMmdPmdModel(assetMng,"Model/1052siki.pmd"));
      this._player.setVmd(new AndMmdVmdMotion(assetMng,"Motion/nyanyanya.vmd"));

      this._debug=new AndGLDebugDump(this._glv);
      this.text=new AndGLTextLabel(this._glv);
      this.fps=new AndGLFpsLabel(this._glv,"MarkerPlaneActivity");
      this.box=new AndGLBox(this._glv,1);
      gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
      gl.glEnable(GL10.GL_DEPTH_TEST);

      gl.glEnable(GL10.GL_BLEND);
      gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

      gl.glEnable(GL10.GL_ALPHA_TEST);
      gl.glAlphaFunc(GL10.GL_GEQUAL, 0.05f);

      float[] fLightPos = { 0.45f, 0.55f, 1.0f, 0.0f };
      float[] fLightDif = { 0.9f, 0.9f, 0.9f, 0.0f };
      float[] fLightAmb = { 1.0f, 1.0f, 1.0f, 0.0f };
      float[] fLightSpq = { 0.9f, 0.9f, 0.9f, 0.0f };
      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, fLightPos, 0);
      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, fLightDif, 0);
      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, fLightAmb, 0);
      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, fLightSpq, 0);
      gl.glEnable(GL10.GL_LIGHT0);
      gl.glEnable(GL10.GL_LIGHTING);
      this.animation_start_time=System.currentTimeMillis();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      this.finish();
    }
  }
  AndGLDebugDump _debug=null;
  private long animation_start_time;
  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;
      }
      this._player.updateMotion((System.currentTimeMillis()-this.animation_start_time)%this._player.getTimeLength());

      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.glPushMatrix();
          gl.glMatrixMode(GL10.GL_MODELVIEW);
          gl.glEnable(GL10.GL_LIGHTING);
          gl.glLoadIdentity();
          gl.glLoadMatrixf(this._ms.getGlMarkerMatrix(this._mid),0);
          gl.glRotatef(90,1,0,0);
          gl.glScalef(8.0f, 8.0f, -8.0f); // 左手系 → 右手系
          this._player.render();
          gl.glPopMatrix();
        }
      }
      fps.draw(0, 0);
    }catch(Exception e)
    {
      ex=e;
    }
  }
  Exception ex=null;
}

NyARToolkit for AndroidとNyMmdのソースコードは、以下のURLから取得できます。

Source code

NyARToolkit for Android demoのソースコードと使い方で公開しました。