1 20 (2) OpenGL+GUI(GLUI) 3DCG TA 2008 10 27 1 OpenGL OpenGL GUI GLUI 1.1 http://www.cyber.t.u-tokyo.ac.jp/~kuni/enshu2008/ 1.2 TA 1.3 2008/12/4( ) EyeToy
2 2 GLUI 2 GLUI 2.1 GLUI GLUI OpenGL OpenGL glut OpenGL glut C++ Linux, Windows (Visual C++, gcc), Macintosh glut glut GUI glut GUI CG glmultmatrix() glut glui glui 1 GLUI
2.1 GLUI 3 2.1.1 GLUI GLUI (Buttons) (Checkboxes) ON OFF (Radio Buttons) (Editable Text Boxes) (Spinners) (Listboxes) (Rotation Controls) (Translation Controls) 2 GLUI (Static Text) (Separators) Static Text (Columns)
4 2 GLUI (Panels) (Rollouts) 2 3 4 glui 3 4 GLUI *glui = GLUI_Master.create_glui( "GLUI" ); GLUI *glui = GLUI_Master.create_glui_subwindow(main_window, glui->set_main_gfx_window( main_window ); GLUI_SUBWINDOW_BOTTOM);
2.2 glut GLUI 5 GLUI SUBWINDOW BOTTOM GLUI SUBWINDOW TOP GLUI SUBWINDOW LEFT 2.2 glut GLUI teapot UI #include <stdio.h> #include <math.h> #include <GL/glut.h> void display(void) { glclear(gl_color_buffer_bit); glutwireteapot(1.5); glutswapbuffers(); glutpostredisplay(); int main(int argc, char *argv[]) { glutinit(&argc, argv); glutinitdisplaymode(glut_rgba GLUT_DOUBLE); glutcreatewindow(argv[0]); glutdisplayfunc(display); glclearcolor(0.0, 0.0, 1.0, 0.0); glutmainloop(); return 0; GLUI #include <stdio.h> #include <math.h> #include <GL/glut.h> #include <glui.h>
6 2 GLUI /*--- ---*/ float rotate[16] = { 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1 ; void display(void) { glclear(gl_color_buffer_bit); /*--- ---*/ glpushmatrix(); glmultmatrixf( rotate ); glutwireteapot(1.5); glpopmatrix(); /*--- ---*/ glutswapbuffers(); glutpostredisplay(); /*=== ===*/ void gluicallback(int num) { exit(0); /*=== ===*/ int main(int argc, char *argv[]) { glutinit(&argc, argv); glutinitdisplaymode(glut_rgba GLUT_DOUBLE); glutcreatewindow(argv[0]); glutdisplayfunc(display); glclearcolor(0.0, 0.0, 1.0, 0.0);
2.3 GLUI 7 /*---GLUI initialize---*/ GLUI *glui = GLUI_Master.create_glui("control"); /*---GLUI ---*/ GLUI_Rotation *view_rot= new GLUI_Rotation(glui, "Rotation",rotate); /*===GLUI ===*/ new GLUI_Button(glui, "Exit", 0, gluicallback); glutmainloop(); return 0; 5 GLUI teapot UI 2.3 GLUI GLUI example1, example2, example3, example4, example5 bin example /usr/local/src/glui-2.35/src/example/ /usr/local/src/glui-2.35/src/bin/
8 2 GLUI 1 1. sample glui.cpp sample glui teapot.cpp Makefile Teapot glutwireteapot glutsolidteapot 2. exmple5 2 Teapot Teapot 3. UI ( )
9 3 OpenGL (R,G,B,A) 3.1 OpenGL (x y) width height pixels void glreadpixels(glint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); format (RGBA ) type GL COLOR INDEX GL RGB GL RED GL GREEN GL BLUE GL ALPHA GL LUMINANCE GL LUMINANCE ALPHA GL STENCIL INDEX GL DEPTH COMPONENT 1 glreadpixels(),gldrawpixels() glrasterpos*() width height
10 3 GL UNSIGNED BYTE GL BYTE GL UNSIGNED SHORT GL SHORT GL UNSIGNED INT GL INT GL UNSIGNED BYTE 8 8 16 16 32 32 2 glreadpixels(),gldrawpixels() void gldrawpixels(glsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); void glrasterpos{234{sifd(type x, TYPE y, TYPE z, TYPE w); void glrasterpos{234{sifdv(type *coords); format type glreadpixels() glreadpixels() gldrawpixels() void glcopypixels(glint x, GLint y, GLsizei width, GLsizei height, GLenum buffer); buffer GL COLOR, GL STENCIL, GL DEPTH 1 4 fromat 2 3 glpixelstore*()
3.1 OpenGL 11 void glpixelstore{if(glenum pname TYPE param); GL UNPACK* gldrawpixels(),glteximage1d(),glteximage2d(),gltexsubimage1d(), gltexsubimage2d() GL PACK* glreadpixels(),glgetteximage() GL UNPACK SWAP BYTES, GL PACK SWAP BYTES GLboolean FALSE TRUEFALSE GL UNPACK LSB BYTES, GL PACK LSB BYTES GLboolean FALSE TRUEFALSE GL UNPACK ROW LENGTH, GL PACK ROW LENGTH GLint 0 GL UNPACK SKIP ROWS, GL PACK SKIP ROWS GLint 0 GL UNPACK SKIP PIXELS, GL PACK SKIP PIXELS GLint 0 GL UNPACK ALIGNMENT, GL PACK ALIGNMENT GLint 4 1,2,3,4 *ROW_LENGTH *SKIP_PIXELS ª æ œ *SKIP_ROWS æ œ 6 void glpixelzoom(glfloat zoom_x GLfloat zoom_y); (gldrawpixels(),glcopypixels()) x y zoom x zoom y 1.0 2.0 4
12 3 3.2 gldrawpixels() sample-image.c #include <GL/glut.h> #include <stdlib.h> #define checkimagewidth 64 #define checkimageheight 64 GLubyte checkimage[checkimageheight][checkimagewidth][3]; static GLdouble zoomfactor = 1.0; static GLint height; void makecheckimage(void) { int i, j, c; for (i = 0; i < checkimageheight; i++) { for (j = 0; j < checkimagewidth; j++) { c = ((((i&0x8)==0)^((j&0x8)==0)))*255; checkimage[i][j][0] = (GLubyte) c; checkimage[i][j][1] = (GLubyte) c; checkimage[i][j][2] = (GLubyte) c; void init(void) { glclearcolor (0.0, 0.0, 0.0, 0.0); glshademodel(gl_flat); makecheckimage(); glpixelstorei(gl_unpack_alignment, 1);
3.3 13 void display(void) { glclear(gl_color_buffer_bit); glrasterpos2i(0, 0); gldrawpixels(checkimagewidth, checkimageheight, GL_RGB, GL_UNSIGNED_BYTE, checkimage); glflush(); 3.3 Independent JPEG Group s software JPEG Linux (http://www.ijg.org/) JPEG JPEG OpenGL viewjpeg.c: OpenGL readjpeg.h, readjpeg.c: JPEG testimg.jpg: JPEG Makefile TARGET OBJS = viewjpeg = viewjpeg.o readjpeg.o CC = gcc CFLAGS = -g -Wall -O2 LIBS = -lglut -lglu -lgl -ljpeg TARGET:$(OBJS) $(CC) -o $(TARGET) $(OBJS) $(LIBS).c.o: $(CC) $(FLAGS) -c $< clean: rm -f *.o *~ $(TARGET)
14 4 4 OpenGL 6 A N J K H A 2 H E E J E L A @ A 7 5? A A I K H B =? A B > K E @ E C I K H B =? A B M = J H A A 4.1 3 0.0...1.0 void gltexcoord{1,2,3,4{s,i,d,f(type coords); void gltexcoord{1,2,3,4{s,i,d,fv(type *coords); 4.2 OpenGL ( )
4.3 15 8 1. 2. 3. 4. OpenGL 4.3 (sample-checker.c) glteximage2d() #include <GL/glut.h> #include <stdlib.h> /* Create checkerboard texture */ #define checkimagewidth 64 #define checkimageheight 64 GLubyte checkimage[checkimagewidth][checkimageheight][3]; void makecheckimage(void) { int i, j, c; for (i = 0; i < checkimagewidth; i++) { for (j = 0; j < checkimageheight; j++) { c = ((((i&0x8)==0)^((j&0x8)==0)))*255;
16 4 checkimage[i][j][0] = (GLubyte) c; checkimage[i][j][1] = (GLubyte) c; checkimage[i][j][2] = (GLubyte) c; void myinit(void) { glclearcolor (0.0, 0.0, 0.0, 0.0); glenable(gl_depth_test); gldepthfunc(gl_less); makecheckimage(); glpixelstorei(gl_unpack_alignment, 1); glteximage2d(gl_texture_2d, 0, 3, checkimagewidth, checkimageheight, 0, GL_RGB, GL_UNSIGNED_BYTE, &checkimage[0][0][0]); gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_CLAMP); gltexparameterf(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_CLAMP); gltexparameterf(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameterf(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gltexenvf(gl_texture_env, GL_TEXTURE_ENV_MODE, GL_DECAL); glenable(gl_texture_2d); glshademodel(gl_flat); void display(void) { glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glbegin(gl_quads); gltexcoord2f(0.0, 0.0); glvertex3f(-2.0, -1.0, 0.0); gltexcoord2f(0.0, 1.0); glvertex3f(-2.0, 1.0, 0.0); gltexcoord2f(1.0, 1.0); glvertex3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f(0.0, -1.0, 0.0);
4.3 17 gltexcoord2f(0.0, 0.0); glvertex3f(1.0, -1.0, 0.0); gltexcoord2f(0.0, 1.0); glvertex3f(1.0, 1.0, 0.0); gltexcoord2f(1.0, 1.0); glvertex3f(2.41421, 1.0, -1.41421); gltexcoord2f(1.0, 0.0); glvertex3f(2.41421, -1.0, -1.41421); glend(); glutswapbuffers(); void myreshape(int w, int h) { glviewport(0, 0, w, h); glmatrixmode(gl_projection); glloadidentity(); gluperspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30.0); glmatrixmode(gl_modelview); glloadidentity(); gltranslatef(0.0, 0.0, -3.6); int main(int argc, char** argv) { glutinit(&argc, argv); glutinitdisplaymode(glut_double GLUT_RGB GLUT_DEPTH); glutcreatewindow("checker"); myinit(); glutreshapefunc (myreshape); glutdisplayfunc(display); glutmainloop(); return 0; /* ANSI C requires main to return int. */
18 4 inittexture GLubyte (unsigned char) WIDTH HEIGHT 4 1 RGBA 4 2 64 64 inittexture init glpixelstorei() image[ ] gltexparameteri, gltexparameterf glteximage2d void glteximage2d(glenum target, GLint level, GLint component, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) width,height,pixel width,height 2 pixel ( image) display() glenable(gl TEXTURE 2D) gldisable(gl TEXTURE 2D)
4.4 OpenGL 19 4.4 OpenGL void glgentextures(glsizei n, GLuint *texturenames); glgentextures() n texturenames void glbindtexture(glenum target, GLuint texturename); target GL TEXTURE 1D GL TEXTURE 2D texturename void glteximage2d(glenum target, GLint level, GLint format, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); target GL TEXTURE 2D GL PROXY TEXTURE 2D level 0 format (RGBA ) GL RGB GL RGBA width height OpenGL 2 1 2 4 8 16 32 64 128 256 64x64 1024x1024 border 0 format pixels RGB GL RGB PNG GL RGBA type pixels GL UNSIGNED BYTE
20 4 2 1. sampel-checker.c sample-texbind.c 2. JPEG viewjpeg.c, readjpeg.c EyeToy EyeToy EyeToy XawTV j EyeToy 3. sample-image.c JPEG 4. glut- SolidTeapot 5. EyeToy
4.4 OpenGL 21 3 GLUI solar system ex.tar.gz 1. plant view main.cpp 2. orbit view main.cpp a Day rate b 9 3.1 10 3.1 11 3.1 12 3.2
22 4 13 3.2 () 14 3.2 ( ) 15 3.2 ( )