• R/O
  • HTTP
  • SSH
  • HTTPS

nyartoolkit-and: コミット

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.


コミットメタ情報

リビジョンa6ec8a06e00feafd56fb379727868a0bc01ccf09 (tree)
日時2011-04-15 16:30:02
作者Atsuo Igarashi <atsuoigarashi@gmai...>
コミッターAtsuo Igarashi

ログメッセージ

Fix compile error for Android SDK.

Signed-off-by: Atsuo Igarashi <atsuoigarashi@gmail.com>

変更サマリ

差分

--- a/.classpath
+++ b/.classpath
@@ -2,6 +2,8 @@
22 <classpath>
33 <classpathentry kind="src" path="src"/>
44 <classpathentry kind="src" path="gen"/>
5+ <classpathentry kind="src" path="lib\src"/>
6+ <classpathentry kind="src" path="utils\jogl\src"/>
57 <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
68 <classpathentry kind="output" path="bin"/>
79 </classpath>
--- a/src/jp/androidgroup/nyartoolkit/ARToolkitDrawer.java
+++ b/src/jp/androidgroup/nyartoolkit/ARToolkitDrawer.java
@@ -54,6 +54,7 @@ import jp.nyatla.nyartoolkit.core.param.NyARParam;
5454 import jp.nyatla.nyartoolkit.core.raster.rgb.NyARRgbRaster_RGB;
5555 import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;
5656 import jp.nyatla.nyartoolkit.core.types.NyARBufferType;
57+import jp.nyatla.nyartoolkit.core.types.matrix.NyARDoubleMatrix44;
5758 import jp.nyatla.nyartoolkit.detector.NyARDetectMarker;
5859 import jp.nyatla.nyartoolkit.jogl.utils.NyARGLUtil;
5960
@@ -84,11 +85,6 @@ public class ARToolkitDrawer
8485 private NyARRgbRaster_RGB raster = null;
8586
8687 /**
87- * @see jp.nyatla.nyartoolkit.jogl.utils.NyARGLUtil
88- */
89- private NyARGLUtil ar_util = null;
90-
91- /**
9288 * カメラパラメータを保持するクラス
9389 * @see jp.nyatla.nyartoolkit.core.param.NyARParam
9490 */
@@ -179,7 +175,6 @@ public class ARToolkitDrawer
179175 // NyARToolkit setting.
180176 try {
181177 if (nya == null) {
182- ar_util = new NyARGLUtil();
183178 ar_param.changeScreenSize(w, h);
184179
185180 // マーカーの枠線幅を変えることは可能。
@@ -203,6 +198,36 @@ public class ARToolkitDrawer
203198 }
204199
205200 /**
201+ * NyARGLUtil.toCameraFrustumRH()の出力double[]をfloat[]に変換する
202+ * @param i_arparam
203+ * @param o_gl_projection
204+ */
205+ public static void toCameraFrustumRHf(NyARParam i_arparam, float[] o_gl_projection)
206+ {
207+ double[] mf = new double[16];
208+ NyARGLUtil.toCameraFrustumRH(i_arparam, NyARGLUtil.SCALE_FACTOR_toCameraFrustumRH_NYAR2, 10, 10000, mf);
209+
210+ for (int i = 0; i < mf.length; i++) {
211+ o_gl_projection[i] = (float) mf[i];
212+ }
213+ }
214+
215+ /**
216+ * NyARGLUtil.toCameraViewRH()の出力double[]をfloat[]に変換する
217+ * @param i_ny_result
218+ * @param o_gl_result
219+ */
220+ public static void toCameraViewRHf(NyARDoubleMatrix44 i_ny_result, float[] o_gl_result)
221+ {
222+ double[] mf = new double[16];
223+ NyARGLUtil.toCameraViewRH(i_ny_result, NyARGLUtil.SCALE_FACTOR_toCameraViewRH_NYAR2, mf);
224+
225+ for (int i = 0; i < mf.length; i++) {
226+ o_gl_result[i] = (float) mf[i];
227+ }
228+ }
229+
230+ /**
206231 * 描画処理部分
207232 * メインループ処理と読み替えても良い
208233 * @param data
@@ -251,7 +276,7 @@ public class ARToolkitDrawer
251276 Log.d("AR draw", "!!!!!!!!!!!exist marker." + found_markers + "!!!!!!!!!!!");
252277 // Projection transformation.
253278 float[] cameraRHf = new float[16];
254- ar_util.toCameraFrustumRHf(ar_param, cameraRHf);
279+ toCameraFrustumRHf(ar_param, cameraRHf);
255280
256281 if (found_markers > MARKER_MAX)
257282 found_markers = MARKER_MAX;
@@ -262,7 +287,7 @@ public class ARToolkitDrawer
262287 ar_code_index[i] = nya.getARCodeIndex(i);
263288 NyARTransMatResult transmat_result = ar_transmat_result;
264289 nya.getTransmationMatrix(i, transmat_result);
265- ar_util.toCameraViewRHf(transmat_result, resultf[i]);
290+ toCameraViewRHf(transmat_result, resultf[i]);
266291 isDetect = true;
267292 } catch (NyARException e) {
268293 Log.e("AR draw", "getCameraViewRH failed", e);
--- a/utils/jogl/src/jp/nyatla/nyartoolkit/jogl/utils/NyARGLDrawUtil.java
+++ /dev/null
@@ -1,245 +0,0 @@
1-package jp.nyatla.nyartoolkit.jogl.utils;
2-
3-import java.awt.Color;
4-import java.awt.Font;
5-import java.nio.ByteBuffer;
6-import java.nio.IntBuffer;
7-
8-import javax.media.opengl.GL;
9-
10-import jp.nyatla.nyartoolkit.NyARException;
11-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;
12-import jp.nyatla.nyartoolkit.core.types.NyARBufferType;
13-import jp.nyatla.nyartoolkit.core.types.NyARIntSize;
14-
15-import com.sun.opengl.util.j2d.TextRenderer;
16-
17-/**
18- * このクラスには、アプリケーションの為のOpenGL用のヘルパー関数を定義します。
19- * NyARToolKitを使ったアプリケーションを実装するのに役立ちます。
20- * ほとんどの関数はstatic宣言です。このクラスのインスタンスを作る必要はありません。
21- *
22- *
23- */
24-public class NyARGLDrawUtil
25-{
26- private static TextRenderer _tr=new TextRenderer(new Font("SansSerif", Font.PLAIN, 10));
27- /**
28- * この関数は、指定サイズの立方体を現在のビューポートへ描画します。
29- * ARToolKitのサンプルで使われているカラーキューブを描画します。
30- * @param i_gl
31- * OpenGLのインスタンス
32- * @param i_size_per_mm
33- * 立方体の辺の長さ。[mm単位]
34- * ARシステムをmmオーダーで構築していない場合は、別単位になります。
35- */
36- public static void drawColorCube(GL i_gl,float i_size_per_mm)
37- {
38- // Colour cube data.
39- int polyList = 0;
40- float fSize =i_size_per_mm/2f;
41- int f, i;
42- float[][] cube_vertices = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { -1.0f, -1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, -1.0f }, { 1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f }, { -1.0f, 1.0f, -1.0f } };
43- float[][] cube_vertex_colors = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f } };
44- int cube_num_faces = 6;
45- short[][] cube_faces = new short[][] { { 3, 2, 1, 0 }, { 2, 3, 7, 6 }, { 0, 1, 5, 4 }, { 3, 0, 4, 7 }, { 1, 2, 6, 5 }, { 4, 5, 6, 7 } };
46-
47- if (polyList == 0) {
48- polyList = i_gl.glGenLists(1);
49- i_gl.glNewList(polyList, GL.GL_COMPILE);
50- i_gl.glBegin(GL.GL_QUADS);
51- for (f = 0; f < cube_num_faces; f++)
52- for (i = 0; i < 4; i++) {
53- i_gl.glColor3f(cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]);
54- i_gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);
55- }
56- i_gl.glEnd();
57- i_gl.glColor3f(0.0f, 0.0f, 0.0f);
58- for (f = 0; f < cube_num_faces; f++) {
59- i_gl.glBegin(GL.GL_LINE_LOOP);
60- for (i = 0; i < 4; i++)
61- i_gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);
62- i_gl.glEnd();
63- }
64- i_gl.glEndList();
65- }
66- i_gl.glCallList(polyList); // Draw the cube.
67- }
68- /**
69- * この関数は、{@link NyARGLDrawUtil}の描画する文字列の、フォントカラーを設定します。
70- * フォントカラーはOpenGL固有のものではなく、{@link NyARGLDrawUtil}固有のものです。
71- * @param i_c
72- * 設定する色。
73- */
74- public static void setFontColor(Color i_c)
75- {
76- NyARGLDrawUtil._tr.setColor(i_c);
77- }
78- /**
79- * この関数は、{@link NyARGLDrawUtil}の描画する文字列の、フォントスタイルを設定します。
80- * フォントスタイルはOpenGL固有のものではなく、{@link NyARGLDrawUtil}固有のものです。
81- * @param i_font_name
82- * フォントの名前を指定します。デフォルト値は、"SansSerif"です。
83- * @param i_font_style
84- * フォントスタイルを指定します。デフォルト値は、{@link Font#PLAIN}です。
85- * @param i_size
86- * フォントサイズを指定します。デフォルト値は、10です。
87- */
88- public static void setFontStyle(String i_font_name,int i_font_style,int i_size)
89- {
90- NyARGLDrawUtil._tr=new TextRenderer(new Font(i_font_name,i_font_style, i_size));
91- }
92- /**
93- * この関数は、文字列を描画します。
94- * この関数は、ちらつきが発生したり、あまり品質が良くありません。品質を求められる環境では、別途実装をして下さい。
95- * @param i_str
96- * 描画する文字列。
97- * @param i_scale
98- * 文字列のスケール値。
99- */
100- public static void drawText(String i_str,float i_scale)
101- {
102- NyARGLDrawUtil._tr.begin3DRendering();
103- NyARGLDrawUtil._tr.draw3D(i_str, 0f,0f,0f,i_scale);
104- NyARGLDrawUtil._tr.end3DRendering();
105- return;
106- }
107- /**
108- * この関数は、{@link INyARRaster}の内容を、現在のビューポートへ描画します。
109- * カメラ画像の背景を描画するのに使用できます。
110- * @param i_gl
111- * OpenGLのインスタンス
112- * @param i_raster
113- * 描画するラスタオブジェクト。何れかのバッファ形式である必要があります。
114- * <ol>
115- * <li>{@link NyARBufferType#BYTE1D_B8G8R8_24}
116- * <li>{@link NyARBufferType#BYTE1D_R8G8B8_24}
117- * <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}
118- * </ol>
119- * @param i_zoom
120- * @throws NyARException
121- */
122- public static void drawBackGround(javax.media.opengl.GL i_gl,INyARRaster i_raster, double i_zoom) throws NyARException
123- {
124- IntBuffer texEnvModeSave = IntBuffer.allocate(1);
125- boolean lightingSave;
126- boolean depthTestSave;
127- final NyARIntSize rsize=i_raster.getSize();
128- // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state.
129- i_gl.glGetTexEnviv(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave); // Save GL texture environment mode.
130- if (texEnvModeSave.array()[0] != GL.GL_REPLACE) {
131- i_gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);
132- }
133- lightingSave = i_gl.glIsEnabled(GL.GL_LIGHTING); // Save enabled state of lighting.
134- if (lightingSave == true) {
135- i_gl.glDisable(GL.GL_LIGHTING);
136- }
137- depthTestSave = i_gl.glIsEnabled(GL.GL_DEPTH_TEST); // Save enabled state of depth test.
138- if (depthTestSave == true) {
139- i_gl.glDisable(GL.GL_DEPTH_TEST);
140- }
141- //ProjectionMatrixとModelViewMatrixを初期化
142- i_gl.glMatrixMode(GL.GL_PROJECTION);
143- i_gl.glPushMatrix();
144- i_gl.glLoadIdentity();
145- i_gl.glOrtho(0.0,rsize.w, 0.0,rsize.h,0,1);
146- i_gl.glMatrixMode(GL.GL_MODELVIEW);
147- i_gl.glPushMatrix();
148- i_gl.glLoadIdentity();
149- arglDispImageStateful(i_gl,rsize,i_raster.getBuffer(),i_raster.getBufferType(),i_zoom);
150- //ProjectionMatrixとModelViewMatrixを回復
151- i_gl.glMatrixMode(GL.GL_PROJECTION);
152- i_gl.glPopMatrix();
153- i_gl.glMatrixMode(GL.GL_MODELVIEW);
154- i_gl.glPopMatrix();
155- if (depthTestSave) {
156- i_gl.glEnable(GL.GL_DEPTH_TEST); // Restore enabled state of depth test.
157- }
158- if (lightingSave) {
159- i_gl.glEnable(GL.GL_LIGHTING); // Restore enabled state of lighting.
160- }
161- if (texEnvModeSave.get(0) != GL.GL_REPLACE) {
162- i_gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave.get(0)); // Restore GL texture environment mode.
163- }
164- i_gl.glEnd();
165- }
166-
167- /**
168- * arglDispImageStateful関数モドキ
169- * @param image
170- * @param zoom
171- */
172- private static void arglDispImageStateful(GL gl,NyARIntSize i_size,Object i_buffer,int i_buffer_type, double zoom) throws NyARException
173- {
174- float zoomf;
175- IntBuffer params = IntBuffer.allocate(4);
176- zoomf = (float) zoom;
177- gl.glDisable(GL.GL_TEXTURE_2D);
178- gl.glGetIntegerv(GL.GL_VIEWPORT, params);
179- gl.glPixelZoom(zoomf * ((float) (params.get(2)) / (float) i_size.w), -zoomf * ((float) (params.get(3)) / (float) i_size.h));
180- gl.glWindowPos2f(0.0f, (float) i_size.h);
181- gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
182- //BufferTypeの変換
183- switch(i_buffer_type)
184- {
185- case NyARBufferType.BYTE1D_B8G8R8_24:
186- gl.glDrawPixels(i_size.w,i_size.h,GL.GL_BGR, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap((byte[])i_buffer));
187- break;
188- case NyARBufferType.BYTE1D_R8G8B8_24:
189- gl.glDrawPixels(i_size.w,i_size.h,GL.GL_RGB, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap((byte[])i_buffer));
190- break;
191- case NyARBufferType.BYTE1D_B8G8R8X8_32:
192- gl.glDrawPixels(i_size.w,i_size.h,GL.GL_BGRA, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap((byte[])i_buffer));
193- break;
194- case NyARBufferType.INT1D_GRAY_8:
195- /** @bug don't work*/
196- gl.glDrawPixels(i_size.w,i_size.h,GL.GL_LUMINANCE, GL.GL_UNSIGNED_INT, IntBuffer.wrap((int[])i_buffer));
197- break;
198- default:
199- throw new NyARException();
200- }
201- }
202- /**
203- * この関数は、スクリーン座標系をOpenGLにロードします。
204- * スクリーンに二次元系の情報をそのまま書きこむときに使います。
205- * この関数は、PROJECTIONとMODELVIEWスタックをそれぞれ1づつpushします。
206- * スクリーン座標系を使用し終わったら、{@link #endScreenCoordinateSystem}を必ず呼び出してください。
207- * @param i_gl
208- * OpenGLのインスタンス
209- * @param i_width
210- * スクリーンの幅
211- * @param i_height
212- * スクリーンの高さ
213- * @param i_revers_y_direction
214- * Y軸の反転フラグ。trueならばtop->bottom、falseならばbottom->top方向になります。
215- */
216- public static void beginScreenCoordinateSystem(GL i_gl,int i_width,int i_height,boolean i_revers_y_direction)
217- {
218- i_gl.glMatrixMode(GL.GL_PROJECTION);
219- i_gl.glPushMatrix(); // Save world coordinate system.
220- i_gl.glLoadIdentity();
221- if(i_revers_y_direction){
222- i_gl.glOrtho(0.0,i_width,i_height,0,-1,1);
223- }else{
224- i_gl.glOrtho(0.0,i_width,0,i_height,-1,1);
225- }
226- i_gl.glMatrixMode(GL.GL_MODELVIEW);
227- i_gl.glPushMatrix(); // Save world coordinate system.
228- i_gl.glLoadIdentity();
229- return;
230- }
231- /**
232- * この関数は、ロードしたスクリーン座標系を元に戻します。
233- * {@link #beginScreenCoordinateSystem}の後に呼び出してください。
234- * @param i_gl
235- * OpenGLのインスタンス
236- */
237- public static void endScreenCoordinateSystem(GL i_gl)
238- {
239- i_gl.glMatrixMode(GL.GL_PROJECTION);
240- i_gl.glPopMatrix();
241- i_gl.glMatrixMode(GL.GL_MODELVIEW);
242- i_gl.glPopMatrix();
243- return;
244- }
245-}
旧リポジトリブラウザで表示