OSDN Git Service

Copied remotely
[nyartoolkit-and/nyartoolkit-and.git] / branches / 1.2.0-last / sample / jogl / jp / nyatla / nyartoolkit / jogl / utils / GLNyARDetectMarker.java
1 /**\r
2  * NyARSingleDetectMarkerにOpenGL向け関数を追加したもの\r
3  * (c)2008 A虎@nyatla.jp\r
4  * airmail(at)ebony.plala.or.jp\r
5  * http://nyatla.jp/\r
6  */\r
7 package jp.nyatla.nyartoolkit.jogl.utils;\r
8 \r
9 import jp.nyatla.nyartoolkit.NyARException;\r
10 import jp.nyatla.nyartoolkit.core.NyARCode;\r
11 import jp.nyatla.nyartoolkit.core.NyARParam;\r
12 import jp.nyatla.nyartoolkit.core.NyARTransMatResult;\r
13 import jp.nyatla.nyartoolkit.detector.*;\r
14 \r
15 public class GLNyARDetectMarker extends NyARDetectMarker\r
16 {\r
17     private NyARTransMatResult trans_mat_result=new NyARTransMatResult();\r
18     private double view_scale_factor=0.025;//#define VIEW_SCALEFACTOR           0.025           // 1.0 ARToolKit unit becomes 0.025 of my OpenGL units.\r
19     public GLNyARDetectMarker(NyARParam i_param,NyARCode[] i_code,double[] i_marker_width,int i_number_of_code) throws NyARException\r
20     {\r
21         super(i_param,i_code,i_marker_width,i_number_of_code);  \r
22     }\r
23     public void setScaleFactor(double i_new_value)\r
24     {\r
25         view_scale_factor=i_new_value;\r
26     }\r
27     /**\r
28      * @param i_index\r
29      * マーカーのインデックス番号を指定します。\r
30      * 直前に実行したdetectMarkerLiteの戻り値未満かつ0以上である必要があります。\r
31      * @param o_result\r
32      * 結果値を格納する配列を指定してください。double[16]以上が必要です。\r
33      * @throws NyARException\r
34      */\r
35     public void getCameraViewRH(int i_index,double[] o_result) throws NyARException\r
36     {\r
37         //座標を計算\r
38         this.getTransmationMatrix(i_index,this.trans_mat_result);\r
39         //行列変換\r
40         double[][] para=this.trans_mat_result.getArray();\r
41         o_result[0 + 0*4] = para[0][0]; // R1C1\r
42         o_result[0 + 1*4] = para[0][1]; // R1C2\r
43         o_result[0 + 2*4] = para[0][2];\r
44         o_result[0 + 3*4] = para[0][3];\r
45         o_result[1 + 0*4] = -para[1][0]; // R2\r
46         o_result[1 + 1*4] = -para[1][1];\r
47         o_result[1 + 2*4] = -para[1][2];\r
48         o_result[1 + 3*4] = -para[1][3];\r
49         o_result[2 + 0*4] = -para[2][0]; // R3\r
50         o_result[2 + 1*4] = -para[2][1];\r
51         o_result[2 + 2*4] = -para[2][2];\r
52         o_result[2 + 3*4] = -para[2][3];\r
53         o_result[3 + 0*4] = 0.0;\r
54         o_result[3 + 1*4] = 0.0;\r
55         o_result[3 + 2*4] = 0.0;\r
56         o_result[3 + 3*4] = 1.0;\r
57         if (view_scale_factor != 0.0) {\r
58             o_result[12] *= view_scale_factor;\r
59             o_result[13] *= view_scale_factor;\r
60             o_result[14] *= view_scale_factor;\r
61         }\r
62         return;\r
63     }\r
64 }\r