OSDN Git Service

git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit/trunk@811 7cac0...
[nyartoolkit-and/nyartoolkit-and.git] / utils / jogl / src.rpf / jp / nyatla / nyartoolkit / rpf / reality / nyartk / gl / NyARRealityGl.java
1 package jp.nyatla.nyartoolkit.rpf.reality.nyartk.gl;\r
2 \r
3 import javax.media.opengl.GL;\r
4 \r
5 import jp.nyatla.nyartoolkit.NyARException;\r
6 import jp.nyatla.nyartoolkit.core.param.NyARParam;\r
7 import jp.nyatla.nyartoolkit.core.param.NyARPerspectiveProjectionMatrix;\r
8 import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
9 import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;\r
10 import jp.nyatla.nyartoolkit.rpf.reality.nyartk.NyARReality;\r
11 import jp.nyatla.nyartoolkit.rpf.realitysource.nyartk.NyARRealitySource;\r
12 import jp.nyatla.nyartoolkit.jogl.utils.NyARGLDrawUtil;\r
13 import jp.nyatla.nyartoolkit.jogl.utils.NyARGLUtil;\r
14 \r
15 /**\r
16  * このクラスは、OpenGLに特化した{@link NyARReality}クラスです。\r
17  * OpenGL形式の値をそのまま扱う関数を定義しています。\r
18  */\r
19 public class NyARRealityGl extends NyARReality\r
20 {\r
21         private double[] _gl_frustum_rh=new double[16];\r
22         /**\r
23          * この関数は、 ARToolKitスタイルのModelView行列を、OpenGLスタイルのモデルビュー行列に変換します。\r
24          * @param i_ny_style_mat\r
25          * NyARToolkitスタイルの行列を指定します。\r
26          * @param o_gl_style_mat\r
27          * OpenGL形式の行列を受け取る配列を指定します。16要素である必要があります。\r
28          */\r
29         public static void toGLViewMat(NyARDoubleMatrix44 i_ny_style_mat,double[] o_gl_style_mat)\r
30         {\r
31                 NyARGLUtil.toCameraViewRH(i_ny_style_mat, 1, o_gl_style_mat);\r
32         }\r
33         /**\r
34          * コンストラクタです。\r
35          * カメラパラメータ、視錐体パラメータを元に、インスタンスを作成します。\r
36          * @param i_param\r
37          * カメラパラメータを指定します。\r
38          * @param i_near\r
39          * 視錐体のnear-pointをmm単位で指定します。\r
40          * 標準値は{@link #FRASTRAM_ARTK_NEAR}です。\r
41          * @param i_far\r
42          * 視錐体のfar-pointをmm単位で指定します。\r
43          * 標準値は{@link #FRASTRAM_ARTK_FAR}です。\r
44          * @param i_max_known_target\r
45          * KnownステータスのRTターゲットの最大数を指定します。\r
46          * @param i_max_unknown_target\r
47          * UnKnownステータスのRTターゲットの最大数を指定します。\r
48          */\r
49         public NyARRealityGl(NyARParam i_param,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target) throws NyARException\r
50         {\r
51                 super(i_param,i_near,i_far,i_max_known_target,i_max_unknown_target);\r
52                 //カメラパラメータを取得しておく。\r
53                 this._frustum.refMatrix().getValueT(this._gl_frustum_rh);\r
54         }\r
55         /**\r
56          * この関数は、透視投影行列と視錐体パラメータを元に、インスタンスを作成します。\r
57          * 初期状態のインスタンスを生成します。\r
58          * この関数は、樽型歪み矯正を行わないインスタンスを生成できます。\r
59          * @param i_prjmat\r
60          * ARToolKit形式の射影変換パラメータを指定します。\r
61          * @param i_screen_size\r
62          * スクリーン(入力画像)のサイズを指定します。\r
63          * @param i_near\r
64          * {@link NyARReality#NyARReality(NyARParam i_param,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target)}を参照\r
65          * @param i_far\r
66          * {@link NyARReality#NyARReality(NyARParam i_param,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target)}を参照\r
67          * @param i_max_known_target\r
68          * {@link NyARReality#NyARReality(NyARParam i_param,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target)}を参照\r
69          * @param i_max_unknown_target\r
70          * {@link NyARReality#NyARReality(NyARParam i_param,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target)}を参照\r
71          * @throws NyARException\r
72          */\r
73         public NyARRealityGl(NyARPerspectiveProjectionMatrix i_prjmat,NyARIntSize i_screen_size,double i_near,double i_far,int i_max_known_target,int i_max_unknown_target) throws NyARException\r
74         {\r
75                 super(i_screen_size,i_near,i_far,i_prjmat,null,i_max_known_target,i_max_unknown_target);\r
76                 //カメラパラメータを取得しておく。\r
77                 this._frustum.refMatrix().getValueT(this._gl_frustum_rh);\r
78         }\r
79         \r
80         private double[] _temp=new double[16];\r
81         /**\r
82          * この関数は、NyARToolKitの姿勢変換行列をOpenGL行列スタックへロードします。\r
83          * @param i_gl\r
84          * OpenGLのインスタンス\r
85          * @param i_mat\r
86          * NyARToolkit形式の姿勢変換行列\r
87          * @throws NyARException\r
88          */\r
89         public void glLoadModelViewMatrix(GL i_gl,NyARDoubleMatrix44 i_mat) throws NyARException\r
90         {\r
91                 NyARGLUtil.toCameraViewRH(i_mat,1,this._temp);\r
92                 i_gl.glLoadMatrixd(this._temp,0);\r
93                 return;\r
94         }\r
95         \r
96         /**\r
97          * この関数は、NyARToolKitの射影変換行列をOpenGL行列スタックへロードします。\r
98          * @param i_gl\r
99          * OpenGLのインスタンス\r
100          */\r
101         public void glLoadCameraFrustum(GL i_gl)\r
102         {\r
103                 i_gl.glLoadMatrixd(this._gl_frustum_rh,0);\r
104                 return;\r
105         }\r
106         /**\r
107          * この関数は、現在のViewPortに、i_rtsourceの元画像の内容を描画します。\r
108          * 背景画像の描画に使います。\r
109          * @param i_gl\r
110          * OpenGLインスタンスを指定します。\r
111          * @param i_rtsource\r
112          * 描画するRealitySource\r
113          * @throws NyARException\r
114          */\r
115         public void glDrawRealitySource(GL i_gl,NyARRealitySource i_rtsource) throws NyARException\r
116         {\r
117                 NyARGLDrawUtil.drawBackGround(i_gl,i_rtsource.refRgbSource(),1.0);\r
118                 return;\r
119         }\r
120 }