2 * NyARToolkit用のJOGL支援関数群
\r
3 * (c)2008 A虎@nyatla.jp
\r
4 * airmail(at)ebony.plala.or.jp
\r
7 package jp.nyatla.nyartoolkit.jogl.utils;
\r
8 import java.nio.ByteBuffer;
\r
9 import java.nio.IntBuffer;
\r
11 import javax.media.opengl.GL;
\r
12 import javax.media.opengl.glu.GLU;
\r
14 import jp.nyatla.nyartoolkit.core.*;
\r
16 public class NyARGLUtil
\r
18 private NyARParam ar_param;
\r
19 private javax.media.opengl.GL gl;
\r
20 private javax.media.opengl.glu.GLU glu;
\r
21 public NyARGLUtil(javax.media.opengl.GL i_gl,NyARParam i_camera_param)
\r
23 this.ar_param=i_camera_param;
\r
28 * GLNyARRaster_RGBをバックグラウンドに書き出す。
\r
32 public void drawBackGround(GLNyARRaster_RGB i_raster,double i_zoom)
\r
34 IntBuffer texEnvModeSave=IntBuffer.allocate(1);
\r
35 boolean lightingSave;
\r
36 boolean depthTestSave;
\r
37 javax.media.opengl.GL gl_=this.gl;
\r
39 // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state.
\r
40 gl_.glGetTexEnviv(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave); // Save GL texture environment mode.
\r
41 if (texEnvModeSave.array()[0] != GL.GL_REPLACE){
\r
42 gl_.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);
\r
44 lightingSave = gl_.glIsEnabled(GL.GL_LIGHTING); // Save enabled state of lighting.
\r
45 if (lightingSave == true){
\r
46 gl_.glDisable(GL.GL_LIGHTING);
\r
48 depthTestSave = gl_.glIsEnabled(GL.GL_DEPTH_TEST); // Save enabled state of depth test.
\r
49 if (depthTestSave == true){
\r
50 gl_.glDisable(GL.GL_DEPTH_TEST);
\r
52 gl_.glMatrixMode(GL.GL_PROJECTION);
\r
54 gl_.glLoadIdentity();
\r
55 glu.gluOrtho2D(0.0,ar_param.getX(),0.0,ar_param.getY());
\r
56 gl_.glMatrixMode(GL.GL_MODELVIEW);
\r
58 gl_.glLoadIdentity();
\r
59 arglDispImageStateful(i_raster,i_zoom);
\r
62 // Restore previous projection, camera position, and GL state.
\r
63 gl_.glMatrixMode(GL.GL_PROJECTION);
\r
65 gl_.glMatrixMode(GL.GL_MODELVIEW);
\r
68 gl_.glEnable(GL.GL_DEPTH_TEST); // Restore enabled state of depth test.
\r
71 gl_.glEnable(GL.GL_LIGHTING); // Restore enabled state of lighting.
\r
73 if (texEnvModeSave.get(0) != GL.GL_REPLACE){
\r
74 gl_.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave.get(0)); // Restore GL texture environment mode.
\r
79 * arglDispImageStateful関数モドキ
\r
83 private void arglDispImageStateful(GLNyARRaster_RGB i_raster,double zoom)
\r
85 javax.media.opengl.GL gl_=this.gl;
\r
86 int width =i_raster.getWidth();
\r
87 int height=i_raster.getHeight();
\r
89 IntBuffer params=IntBuffer.allocate(4);
\r
90 zoomf = (float)zoom;
\r
91 gl_.glDisable(GL.GL_TEXTURE_2D);
\r
92 gl_.glGetIntegerv(GL.GL_VIEWPORT,params);
\r
93 gl_.glPixelZoom(zoomf * ((float)(params.get(2)) / (float)width),-zoomf * ((float)(params.get(3)) / (float)height));
\r
94 gl_.glRasterPos2f(0.0f,(float)height);
\r
95 gl_.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
\r
96 ByteBuffer buf=ByteBuffer.wrap(i_raster.getGLRgbArray());
\r
97 gl_.glDrawPixels(width,height,i_raster.getGLPixelFlag(),GL.GL_UNSIGNED_BYTE,buf);
\r