NyARToolkitCS/4.0.0をリリースします。
更新内容
更新内容は以下の通りです。
- NyARToolkit/4.0.0に搭載したMarkerSystemが利用できるようになりました。
- Processingライクな簡易スケッチシステム追加しました。
- ユーティリティクラスのAPIを更新しました。C#のBitmapクラスとの互換性が向上しています。影響により、一部のユーティリティAPIの互換性がなくなっています。アプリケーションの修正して、代替APIを利用してください。
- WindowsMobileをサポートしなくなりました。(要望があれば復活します。)
ダウンロード
こちらからダウンロードしてください。
http://sourceforge.jp/projects/nyartoolkit/releases/?package_id=7672
Unityバージョンについては、NyARToolkitUnityパッケージを別途作ります。しばらくお待ちください。
サンプル
新しいMarkerSystemとスケッチシステムを使ったSimpleLiteは、従来と比較してシンプルに実装できます。
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using jp.nyatla.nyartoolkit.cs.core;
using jp.nyatla.nyartoolkit.cs.markersystem;
using NyARToolkitCSUtils;
using NyARToolkitCSUtils.Direct3d;
using NyARToolkitCSUtils.Capture;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace SimpleLite
{
class Sketch : D3dSketch
{
private const int SCREEN_WIDTH = 640;
private const int SCREEN_HEIGHT = 480;
private const String AR_CODE_FILE = "../../../../../data/patt.hiro";
private NyARD3dMarkerSystem _ms;
private NyARDirectShowCamera _ss;
private NyARD3dRender _rs;
private int mid;
public override void setup(CaptureDevice i_cap)
{
Device d3d=this.size(SCREEN_WIDTH, SCREEN_HEIGHT);
i_cap.PrepareCapture(SCREEN_WIDTH, SCREEN_HEIGHT, 30.0f);
INyARMarkerSystemConfig cf = new NyARMarkerSystemConfig(SCREEN_WIDTH, SCREEN_HEIGHT);
d3d.RenderState.ZBufferEnable = true;
d3d.RenderState.Lighting = false;
d3d.RenderState.CullMode = Cull.CounterClockwise;
this._ms = new NyARD3dMarkerSystem(cf);
this._ss = new NyARDirectShowCamera(i_cap);
this._rs = new NyARD3dRender(d3d, this._ms);
this.mid = this._ms.addARMarker(AR_CODE_FILE, 16, 25, 80);
//set View mmatrix
this._rs.loadARViewMatrix(d3d);
//set Viewport matrix
this._rs.loadARViewPort(d3d);
//setD3dProjectionMatrix
this._rs.loadARProjectionMatrix(d3d);
this._ss.start();
}
public override void loop(Device i_d3d)
{
lock (this._ss)
{
this._ms.update(this._ss);
this._rs.drawBackground(i_d3d, this._ss.getSourceImage());
i_d3d.BeginScene();
i_d3d.Clear(ClearFlags.ZBuffer, Color.DarkBlue, 1.0f, 0);
if (this._ms.isExistMarker(this.mid))
{
//立方体を20mm上(マーカーの上)にずらしておく
Matrix transform_mat2 = Matrix.Translation(0, 0, 20.0f);
//変換行列を掛ける
transform_mat2 *= this._ms.getD3dMarkerMatrix(this.mid);
// 計算したマトリックスで座標変換
i_d3d.SetTransform(TransformType.World, transform_mat2);
// レンダリング(描画)
this._rs.colorCube(i_d3d,40);
}
i_d3d.EndScene();
}
i_d3d.Present();
}
public override void cleanup()
{
this._rs.Dispose();
}
static void Main(string[] args)
{
new Sketch();
}
}
}