元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

Java3D対応2

変換行列はお勉強と力技でなんとかなった。
とりあえず動いてて、今こんな感じ。

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);


今のところの問題点。

  1. Java3DのBackgroundにBGRのラスタをそのまま送りつけてるから青と赤が反転してる。(NyARToolkit自体はRGBで評価してるから問題ないんだけど…)→カラーモデルちゃんと作らないと。
  2. マーカーが画面の端っこにいくと、位置がズレる。多分カメラのPROJECTION設定して無いから歪んでるのかな?というか、PROJECTIONってなんですかというレベル…。
  3. めっさおそい。→Java3Dに2Dイメージ転送する部分の負荷が尋常じゃない。AMD64x2 5200+で、30fpsで50%近く持ってかれる。→低負荷で画像転送する方法探さなきゃ…。

カラー反転問題と歪み問題を解消したらリリースできるとおもいますが、もし早く触ってみたい人いたら連絡下さい。とりあえずソースだけ公開しますので。