OSDN Git Service

Merge branch 'git-svn'
[nyartoolkit-and/nyartoolkit-and.git] / tags / 0.8 / sample / jogl / jp / nyatla / nyartoolkit / jogl / utils / NyARGLUtil.java
1 /**\r
2  * NyARToolkit用のJOGL支援関数群\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 import java.nio.ByteBuffer;\r
9 import java.nio.IntBuffer;\r
10 \r
11 import javax.media.opengl.GL;\r
12 import javax.media.opengl.glu.GLU;\r
13 \r
14 import jp.nyatla.nyartoolkit.core.*;\r
15 \r
16 public class NyARGLUtil\r
17 {\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
22     {\r
23         this.ar_param=i_camera_param;\r
24         this.gl=i_gl;\r
25         this.glu=new GLU();\r
26     }\r
27     /**\r
28      * GLNyARRaster_RGBをバックグラウンドに書き出す。\r
29      * @param image\r
30      * @param zoom\r
31      */\r
32     public void drawBackGround(GLNyARRaster_RGB i_raster,double i_zoom)\r
33     {\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
38         \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
43         }\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
47         }\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
51         }\r
52         gl_.glMatrixMode(GL.GL_PROJECTION);\r
53         gl_.glPushMatrix();\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
57         gl_.glPushMatrix();\r
58         gl_.glLoadIdentity();\r
59         arglDispImageStateful(i_raster,i_zoom);\r
60 \r
61 \r
62         // Restore previous projection, camera position, and GL state.\r
63         gl_.glMatrixMode(GL.GL_PROJECTION);\r
64         gl_.glPopMatrix();\r
65         gl_.glMatrixMode(GL.GL_MODELVIEW);\r
66         gl_.glPopMatrix();\r
67         if (depthTestSave){\r
68             gl_.glEnable(GL.GL_DEPTH_TEST);                     // Restore enabled state of depth test.\r
69         }\r
70         if (lightingSave){\r
71             gl_.glEnable(GL.GL_LIGHTING);                       // Restore enabled state of lighting.\r
72         }\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
75         }\r
76         gl_.glEnd();\r
77     }\r
78     /**\r
79      * arglDispImageStateful関数モドキ\r
80      * @param image\r
81      * @param zoom\r
82      */\r
83     private void arglDispImageStateful(GLNyARRaster_RGB i_raster,double zoom)\r
84     {\r
85         javax.media.opengl.GL gl_=this.gl;\r
86         int width =i_raster.getWidth();\r
87         int height=i_raster.getHeight();\r
88         float zoomf;\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
98     }     \r
99 }\r