OSDN Git Service

Merge branch 'git-svn'
[nyartoolkit-and/nyartoolkit-and.git] / tags / 1.3.1 / src.utils / jogl / jp / nyatla / nyartoolkit / jogl / utils / GLNyARSingleDetectMarker.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 GLNyARSingleDetectMarker extends NyARSingleDetectMarker\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 GLNyARSingleDetectMarker(NyARParam i_param,NyARCode i_code,double i_marker_width) throws NyARException\r
20     {\r
21         super(i_param,i_code,i_marker_width);   \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     //    public static void arglCameraViewRH(const double para[3][4], GLdouble m_modelview[16], const double scale)\r
28     public double[] getCameraViewRH() throws NyARException\r
29     {\r
30         double[] result=new double[16];\r
31         getCameraViewRH(result);\r
32         return result;\r
33     }\r
34     /**\r
35      * \r
36      * @param o_result\r
37      * 結果値を格納する配列を指定してください。double[16]以上が必要です。\r
38      * @throws NyARException\r
39      */\r
40     public void getCameraViewRH(double[] o_result) throws NyARException\r
41     {\r
42         //座標を計算\r
43         this.getTransmationMatrix(this.trans_mat_result);\r
44         //行列変換\r
45         double[][] para=this.trans_mat_result.getArray();\r
46         o_result[0 + 0*4] = para[0][0]; // R1C1\r
47         o_result[0 + 1*4] = para[0][1]; // R1C2\r
48         o_result[0 + 2*4] = para[0][2];\r
49         o_result[0 + 3*4] = para[0][3];\r
50         o_result[1 + 0*4] = -para[1][0]; // R2\r
51         o_result[1 + 1*4] = -para[1][1];\r
52         o_result[1 + 2*4] = -para[1][2];\r
53         o_result[1 + 3*4] = -para[1][3];\r
54         o_result[2 + 0*4] = -para[2][0]; // R3\r
55         o_result[2 + 1*4] = -para[2][1];\r
56         o_result[2 + 2*4] = -para[2][2];\r
57         o_result[2 + 3*4] = -para[2][3];\r
58         o_result[3 + 0*4] = 0.0;\r
59         o_result[3 + 1*4] = 0.0;\r
60         o_result[3 + 2*4] = 0.0;\r
61         o_result[3 + 3*4] = 1.0;\r
62         if (view_scale_factor != 0.0) {\r
63             o_result[12] *= view_scale_factor;\r
64             o_result[13] *= view_scale_factor;\r
65             o_result[14] *= view_scale_factor;\r
66         }\r
67         return;\r
68     }\r
69 }\r