OSDN Git Service

初期インポート。
[nyartoolkit-and/nyartoolkit-android-0.9.git] / src / jp / nyatla / nyartoolkit / jogl / utils / GLNyARDetectMarker.java
diff --git a/src/jp/nyatla/nyartoolkit/jogl/utils/GLNyARDetectMarker.java b/src/jp/nyatla/nyartoolkit/jogl/utils/GLNyARDetectMarker.java
new file mode 100644 (file)
index 0000000..7425cb8
--- /dev/null
@@ -0,0 +1,64 @@
+/**\r
+ * NyARSingleDetectMarkerにOpenGL向け関数を追加したもの\r
+ * (c)2008 A虎@nyatla.jp\r
+ * airmail(at)ebony.plala.or.jp\r
+ * http://nyatla.jp/\r
+ */\r
+package jp.nyatla.nyartoolkit.jogl.utils;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARCode;\r
+import jp.nyatla.nyartoolkit.core.NyARParam;\r
+import jp.nyatla.nyartoolkit.core.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.detector.*;\r
+\r
+public class GLNyARDetectMarker extends NyARDetectMarker\r
+{\r
+    private NyARTransMatResult trans_mat_result=new NyARTransMatResult();\r
+    private double view_scale_factor=0.025;//#define VIEW_SCALEFACTOR          0.025           // 1.0 ARToolKit unit becomes 0.025 of my OpenGL units.\r
+    public GLNyARDetectMarker(NyARParam i_param,NyARCode[] i_code,double[] i_marker_width,int i_number_of_code) throws NyARException\r
+    {\r
+       super(i_param,i_code,i_marker_width,i_number_of_code);  \r
+    }\r
+    public void setScaleFactor(double i_new_value)\r
+    {\r
+       view_scale_factor=i_new_value;\r
+    }\r
+    /**\r
+     * @param i_index\r
+     * マーカーのインデックス番号を指定します。\r
+     * 直前に実行したdetectMarkerLiteの戻り値未満かつ0以上である必要があります。\r
+     * @param o_result\r
+     * 結果値を格納する配列を指定してください。double[16]以上が必要です。\r
+     * @throws NyARException\r
+     */\r
+    public void getCameraViewRH(int i_index,double[] o_result) throws NyARException\r
+    {\r
+       //座標を計算\r
+       this.getTransmationMatrix(i_index,this.trans_mat_result);\r
+       //行列変換\r
+       double[][] para=this.trans_mat_result.getArray();\r
+       o_result[0 + 0*4] = para[0][0]; // R1C1\r
+       o_result[0 + 1*4] = para[0][1]; // R1C2\r
+       o_result[0 + 2*4] = para[0][2];\r
+       o_result[0 + 3*4] = para[0][3];\r
+       o_result[1 + 0*4] = -para[1][0]; // R2\r
+       o_result[1 + 1*4] = -para[1][1];\r
+       o_result[1 + 2*4] = -para[1][2];\r
+       o_result[1 + 3*4] = -para[1][3];\r
+       o_result[2 + 0*4] = -para[2][0]; // R3\r
+       o_result[2 + 1*4] = -para[2][1];\r
+       o_result[2 + 2*4] = -para[2][2];\r
+       o_result[2 + 3*4] = -para[2][3];\r
+       o_result[3 + 0*4] = 0.0;\r
+       o_result[3 + 1*4] = 0.0;\r
+       o_result[3 + 2*4] = 0.0;\r
+       o_result[3 + 3*4] = 1.0;\r
+       if (view_scale_factor != 0.0) {\r
+           o_result[12] *= view_scale_factor;\r
+           o_result[13] *= view_scale_factor;\r
+           o_result[14] *= view_scale_factor;\r
+       }\r
+       return;\r
+    }\r
+}\r