変換行列はお勉強と力技でなんとかなった。
とりあえず動いてて、今こんな感じ。
NyARToolkitはミリで計算しててJava3Dはメートルで計算してるから、変換行列の平行移動量をすこし弄って、回転方向がひっくり返ってる部分に-1を掛けて調整したらできた。
変換行列をJava仕様に変換する方法はこんなかんじ。視点は0,0,0で、Z+の方向を向いて、Y+を上にしたとき。描画範囲は1cm-100mに設定。
マーカーサイズは、メートル単位で0.08を指定。
NyARMat nymat=related_nya.getTransmationMatrix(); double[][] src=nymat.getArray(); Matrix4d matrix=new Matrix4d( src[0][0],-src[1][0],-src[2][0],0, -src[0][1], src[1][1], src[2][1],0, -src[0][2], src[1][2], src[2][2],0, -src[0][3], src[1][3], src[2][3],1); System.out.println(matrix.m30+","+matrix.m31+","+matrix.m32+","+"\n"); matrix.transpose();//これ省略できますな Transform3D t3d=new Transform3D(matrix); trgroup.setTransform(t3d);
今のところの問題点。
- Java3DのBackgroundにBGRのラスタをそのまま送りつけてるから青と赤が反転してる。(NyARToolkit自体はRGBで評価してるから問題ないんだけど…)→カラーモデルちゃんと作らないと。
- マーカーが画面の端っこにいくと、位置がズレる。多分カメラのPROJECTION設定して無いから歪んでるのかな?というか、PROJECTIONってなんですかというレベル…。
- めっさおそい。→Java3Dに2Dイメージ転送する部分の負荷が尋常じゃない。AMD64x2 5200+で、30fpsで50%近く持ってかれる。→低負荷で画像転送する方法探さなきゃ…。
カラー反転問題と歪み問題を解消したらリリースできるとおもいますが、もし早く触ってみたい人いたら連絡下さい。とりあえずソースだけ公開しますので。