• R/O
  • HTTP
  • SSH
  • HTTPS

nyartoolkit-and: Commit

NyARToolkit for Android v2.x, 3.x mainline.

master: NyARToolkit core.
android-1.6: for Android 1.6. obsolete version.
android-2.2: for Android 2.2. current version.


Commit MetaInfo

Revision8f073244cec1ab865bb96ef2708a0302e80ed44e (tree)
Time2012-05-26 01:18:33
Authornyatla <nyatla@user...>
Commiternyatla

Log Message

backup

Change Summary

Incremental Difference

--- a/NyARToolKit for Android -Utils/src/jp/androidgroup/nyartoolkit/markersystem/NyARAndMarkerSystem.java
+++ b/NyARToolKit for Android -Utils/src/jp/androidgroup/nyartoolkit/markersystem/NyARAndMarkerSystem.java
@@ -1,7 +1,7 @@
11 package jp.androidgroup.nyartoolkit.markersystem;
22
3+import jp.androidgroup.nyartoolkit.utils.gl.NyARGLUtil;
34 import jp.nyatla.nyartoolkit.core.NyARException;
4-import jp.nyatla.nyartoolkit.jogl.utils.NyARGLUtil;
55 import jp.nyatla.nyartoolkit.markersystem.INyARMarkerSystemConfig;
66 import jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystem;
77
--- /dev/null
+++ b/NyARToolKit for Android -Utils/src/jp/androidgroup/nyartoolkit/utils/gl/NyARGLUtil.java
@@ -0,0 +1,212 @@
1+/*
2+ * PROJECT: NyARToolkit JOGL utilities.
3+ * --------------------------------------------------------------------------------
4+ * This work is based on the original ARToolKit developed by
5+ * Hirokazu Kato
6+ * Mark Billinghurst
7+ * HITLab, University of Washington, Seattle
8+ * http://www.hitl.washington.edu/artoolkit/
9+ *
10+ * The NyARToolkit is Java edition ARToolKit class library.
11+ * Copyright (C)2008-2009 Ryo Iizuka
12+ *
13+ * This program is free software: you can redistribute it and/or modify
14+ * it under the terms of the GNU General Public License as published by
15+ * the Free Software Foundation, either version 3 of the License, or
16+ * (at your option) any later version.
17+ *
18+ * This program is distributed in the hope that it will be useful,
19+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21+ * GNU General Public License for more details.
22+ *
23+ * You should have received a copy of the GNU General Public License
24+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
25+ *
26+ * For further information please contact.
27+ * http://nyatla.jp/nyatoolkit/
28+ * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
29+ *
30+ */
31+package jp.androidgroup.nyartoolkit.utils.gl;
32+
33+import jp.nyatla.nyartoolkit.core.param.NyARParam;
34+import jp.nyatla.nyartoolkit.core.param.NyARPerspectiveProjectionMatrix;
35+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;
36+import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;
37+/**
38+ * このクラスは、NyARToolkitのデータ型と、OpenGLデータ型を変換する関数を定義します。
39+ * 描画系関数は{@link NyARGLDrawUtil}を参照してください。
40+ */
41+public class NyARGLUtil
42+{
43+ /**
44+ * NyARToolKit 2.53以前のコードと互換性を持たせるためのスケール値。
45+ * {@link #toCameraFrustumRH}のi_scaleに設定することで、以前のバージョンの数値系と互換性を保ちます。
46+ */
47+ public final static double SCALE_FACTOR_toCameraFrustumRH_NYAR2=1.0;
48+ /**
49+ * NyARToolKit 2.53以前のコードと互換性を持たせるためのスケール値。
50+ * {@link #toCameraViewRH}のi_scaleに設定することで、以前のバージョンの数値系と互換性を保ちます。
51+ */
52+ public final static double SCALE_FACTOR_toCameraViewRH_NYAR2=1/0.025;
53+
54+ private NyARGLUtil()
55+ {//生成の禁止
56+ }
57+
58+
59+ /**
60+ * この関数は、ARToolKitスタイルのカメラパラメータから、 CameraFrustamを計算します。
61+ * カメラパラメータの要素のうち、ProjectionMatrix成分のみを使います。
62+ * @param i_arparam
63+ * ARToolKitスタイルのカメラパラメータ。
64+ * @param i_scale
65+ * スケール値を指定します。1=1mmです。10ならば1=1cm,1000ならば1=1mです。
66+ * 2.53以前のNyARToolkitと互換性を持たせるときは、{@link #SCALE_FACTOR_toCameraFrustumRH_NYAR2}を指定してください。
67+ * @param i_near
68+ * 視錐体のnearPointを指定します。単位は、i_scaleに設定した値で決まります。
69+ * @param i_far
70+ * 視錐体のfarPointを指定します。単位は、i_scaleに設定した値で決まります。
71+ * @param o_gl_projection
72+ * OpenGLスタイルのProjectionMatrixです。double[16]を指定します。
73+ */
74+ public static void toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)
75+ {
76+ toCameraFrustumRH(i_arparam.getPerspectiveProjectionMatrix(),i_arparam.getScreenSize(),i_scale,i_near,i_far,o_gl_projection);
77+ return;
78+ }
79+ /**
80+ * この関数は、ARToolKitスタイルのProjectionMatrixから、 CameraFrustamを計算します。
81+ * @param i_promat
82+ * @param i_size
83+ * スクリーンサイズを指定します。
84+ * @param i_scale
85+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
86+ * @param i_near
87+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
88+ * @param i_far
89+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
90+ * @param o_gl_projection
91+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
92+ */
93+ public static void toCameraFrustumRH(NyARPerspectiveProjectionMatrix i_promat,NyARIntSize i_size,double i_scale,double i_near,double i_far,double[] o_gl_projection)
94+ {
95+ NyARDoubleMatrix44 m=new NyARDoubleMatrix44();
96+ i_promat.makeCameraFrustumRH(i_size.w,i_size.h,i_near*i_scale,i_far*i_scale,m);
97+ m.getValueT(o_gl_projection);
98+ return;
99+ }
100+
101+ /**
102+ * この関数は、ARToolKitスタイルのカメラパラメータから、 CameraFrustamを計算します。
103+ * カメラパラメータの要素のうち、ProjectionMatrix成分のみを使います。
104+ * @param i_arparam
105+ * ARToolKitスタイルのカメラパラメータ。
106+ * @param i_scale
107+ * スケール値を指定します。1=1mmです。10ならば1=1cm,1000ならば1=1mです。
108+ * 2.53以前のNyARToolkitと互換性を持たせるときは、{@link #SCALE_FACTOR_toCameraFrustumRH_NYAR2}を指定してください。
109+ * @param i_near
110+ * 視錐体のnearPointを指定します。単位は、i_scaleに設定した値で決まります。
111+ * @param i_far
112+ * 視錐体のfarPointを指定します。単位は、i_scaleに設定した値で決まります。
113+ * @param o_gl_projection
114+ * OpenGLスタイルのProjectionMatrixです。double[16]を指定します。
115+ */
116+ public static void toCameraFrustumRH(NyARParam i_arparam, double i_scale, double i_near, double i_far, float[] o_gl_projection)
117+ {
118+ toCameraFrustumRH(i_arparam.getPerspectiveProjectionMatrix(),i_arparam.getScreenSize(),i_scale,i_near,i_far,o_gl_projection);
119+ return;
120+ }
121+ /**
122+ * この関数は、ARToolKitスタイルのProjectionMatrixから、 CameraFrustamを計算します。
123+ * @param i_promat
124+ * @param i_size
125+ * スクリーンサイズを指定します。
126+ * @param i_scale
127+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
128+ * @param i_near
129+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
130+ * @param i_far
131+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
132+ * @param o_gl_projection
133+ * {@link #toCameraFrustumRH(NyARParam i_arparam,double i_scale,double i_near,double i_far,double[] o_gl_projection)}を参照。
134+ */
135+ public static void toCameraFrustumRH(NyARPerspectiveProjectionMatrix i_promat, NyARIntSize i_size, double i_scale, double i_near, double i_far, float[] o_gl_projection)
136+ {
137+ NyARDoubleMatrix44 m = new NyARDoubleMatrix44();
138+ i_promat.makeCameraFrustumRH(i_size.w, i_size. h, i_near*i_scale, i_far*i_scale, m);
139+ double[] _gl_projection = new double[16];
140+ m.getValueT(_gl_projection);
141+ for (int i=0; i<_gl_projection.length; i++) {
142+ o_gl_projection[i] = (float)_gl_projection[i];
143+ }
144+ return;
145+ }
146+
147+ /**
148+ * この関数は、NyARTransMatResultをOpenGLのModelView行列へ変換します。
149+ * @param mat
150+ * 変換元の行列
151+ * @param i_scale
152+ * 座標系のスケール値を指定します。1=1mmです。10ならば1=1cm,1000ならば1=1mです。
153+ * 2.53以前のNyARToolkitと互換性を持たせるときは、{@link #SCALE_FACTOR_toCameraViewRH_NYAR2}を指定してください。
154+ * @param o_gl_result
155+ * OpenGLスタイルのProjectionMatrixです。double[16]を指定します。
156+ */
157+ public static void toCameraViewRH(NyARDoubleMatrix44 mat,double i_scale, double[] o_gl_result)
158+ {
159+ o_gl_result[0 + 0 * 4] = mat.m00;
160+ o_gl_result[1 + 0 * 4] = -mat.m10;
161+ o_gl_result[2 + 0 * 4] = -mat.m20;
162+ o_gl_result[3 + 0 * 4] = 0.0;
163+ o_gl_result[0 + 1 * 4] = mat.m01;
164+ o_gl_result[1 + 1 * 4] = -mat.m11;
165+ o_gl_result[2 + 1 * 4] = -mat.m21;
166+ o_gl_result[3 + 1 * 4] = 0.0;
167+ o_gl_result[0 + 2 * 4] = mat.m02;
168+ o_gl_result[1 + 2 * 4] = -mat.m12;
169+ o_gl_result[2 + 2 * 4] = -mat.m22;
170+ o_gl_result[3 + 2 * 4] = 0.0;
171+
172+ double scale=1/i_scale;
173+ o_gl_result[0 + 3 * 4] = mat.m03*scale;
174+ o_gl_result[1 + 3 * 4] = -mat.m13*scale;
175+ o_gl_result[2 + 3 * 4] = -mat.m23*scale;
176+ o_gl_result[3 + 3 * 4] = 1.0;
177+ return;
178+ }
179+
180+ /**
181+ * この関数は、NyARTransMatResultをOpenGLのModelView行列へ変換します。
182+ * @param mat
183+ * 変換元の行列
184+ * @param i_scale
185+ * 座標系のスケール値を指定します。1=1mmです。10ならば1=1cm,1000ならば1=1mです。
186+ * 2.53以前のNyARToolkitと互換性を持たせるときは、{@link #SCALE_FACTOR_toCameraViewRH_NYAR2}を指定してください。
187+ * @param o_gl_result
188+ * OpenGLスタイルのProjectionMatrixです。double[16]を指定します。
189+ */
190+ public static void toCameraViewRH(NyARDoubleMatrix44 mat, double i_scale, float[] o_gl_result)
191+ {
192+ o_gl_result[0 + 0 * 4] = (float)mat.m00;
193+ o_gl_result[1 + 0 * 4] = (float)-mat.m10;
194+ o_gl_result[2 + 0 * 4] = (float)-mat.m20;
195+ o_gl_result[3 + 0 * 4] = (float)0.0;
196+ o_gl_result[0 + 1 * 4] = (float)mat.m01;
197+ o_gl_result[1 + 1 * 4] = (float)-mat.m11;
198+ o_gl_result[2 + 1 * 4] = (float)-mat.m21;
199+ o_gl_result[3 + 1 * 4] = (float)0.0;
200+ o_gl_result[0 + 2 * 4] = (float)mat.m02;
201+ o_gl_result[1 + 2 * 4] = (float)-mat.m12;
202+ o_gl_result[2 + 2 * 4] = (float)-mat.m22;
203+ o_gl_result[3 + 2 * 4] = (float)0.0;
204+
205+ float scale= 1.0f/(float)i_scale;
206+ o_gl_result[0 + 3 * 4] = (float)mat.m03*scale;
207+ o_gl_result[1 + 3 * 4] = (float)-mat.m13*scale;
208+ o_gl_result[2 + 3 * 4] = (float)-mat.m23*scale;
209+ o_gl_result[3 + 3 * 4] = (float)1.0;
210+ return;
211+ }
212+}
Show on old repository browser