3 OpenGL April 20, 2012 1 / 23
31 ( ) OpenGL OpenGL 2 / 23
32 OpenGL OpenGL OpenGL (Open Graphics Library) Silicon Graphics, Inc 2 3 API (Application Program Interface) [4] UNIX OS Windows Macintosh CAD CG 3 / 23
33 OpenGL GLUT (OpenGL Utility Toolkit) OpenGL GLUT GUI Toolkit 4 / 23
34 program3 1c #include <GL/gluth> static void display(void); static void display(void) { } int main(int argc, char *argv[]) { glutinit(&argc, argv); glutcreatewindow(argv[0]); glutdisplayfunc(display); glutmainloop(); return 0; } 5 / 23
34 (cnt) glutinit() #include <GL/gluth> void glutinit(int *argc, char **argv); GLUT main glutcreatewindow() #include <GL/gluth> int glutcreatewindow(char *name); name 6 / 23
34 (cnt) glutdisplayfunc() #include <GL/gluth> void glutdisplayfunc(void (*func)(void)); func glutmainloop() #include <GL/gluth> void glutmainloop(void); 7 / 23
35 program3 2c int main(int argc, char *argv[]) { /* Window */ glutinitdisplaymode(glut_rgba); glutinitwindowsize(250, 250); glutinitwindowposition(100, 200); glutcreatewindow(argv[0]); /* */ glclearcolor(00, 00, 00, 00); } /* */ glutdisplayfunc(display); 8 / 23
35 (cnt) static void display(void) { glclear(gl_color_buffer_bit); glcolor3f(10, 10, 10); glbegin(gl_polygon); glvertex2f(05, 05); glvertex2f(-05, 05); glvertex2f(-05, -05); glvertex2f(05, -05); glend(); glflush(); } 9 / 23
35 (cnt) glutinitdisplaymode() void glutinitdisplaymode(unsigned int mode); mode GLUT RGBA RGBA (,,, ) GLUT INDEX glutinitwindowsize() void glutinitwindowsize(int w, int h); ( 1, 1) 2 10 / 23
35 (cnt) glutinitwindowposition() void glutinitwindowposition(int x, int y); glclearcolor() void glclearcolor(glclampf R, GLclampf G, GLclampf B, GLclampf A); R G B A,,, α GLclampf (float ) 0 1 (0, 0, 0) (1, 1, 1) 11 / 23
35 (cnt) glclear() void glclear(glbitfield mask); mask ( ) GL COLOR BUFFER BIT GL DEPTH BUFFER BIT, glflush() void glflush(void); OpenGL 12 / 23
35 (cnt) glbegin() glend void glbegin(glnum mode); void glend(void); mode 13 / 23
35 (cnt) mode GL POINTS: GL LINES: GL LINE STRIP: GL LINE LOOP: v0 v0 v0 v2 v2 v2 v3 v3 v3 v1 v1 v1 GL LINES GL LINE STRIP GL LINE LOOP 14 / 23
35 (cnt) GL TRIANGLES / GL QUADS: 3 4 GL TRIANGLE STRIP / GL QUAD STRIP: GL TRIANGLE FAN: GL POLYGON: v0 v1 v3 v2 v5 v4 GL TRIANGLES v4 v3 v0 v2 v1 v4 v3 GL TRIANGLE STRIP v4 v3 v0 v2 v0 v2 v1 GL TRIANGLE FAN v1 GL POLYGON 15 / 23
35 (cnt) void glvertex2f(glfloat x, GLfloat y) GLfloat (float ) 3, 4 (x,y,z), (x,y,z,w) glvertex3f (), glvertex4f () double glvertex?d(), int glvertex?i() void glvertex??v() void glcolor3f(glfloat r, GLfloat g, GLfloat b) r, g, b,, 0 1 r, g, b, a void glcolor4f( ) double glcolor?d( ), int glcolor?i( ) 16 / 23
36 program3 3c void display(void) { for(i=0; i<star_num; i++){ /* */ x = 20*random_num()-10; y = 20*random_num()-10; brightness = random_num(); size = STAR_SIZE*random_num(); /* 00 STAR_SIZE */ } /* */ draw_point(x, y, brightness, size); } glflush(); 17 / 23
36 (cnt) rand int rand(void); 0 RAND MAX srand() rand() RAND MAX int 10 0 18 / 23
36 (cnt) (anti-aliasing) /* */ glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA); glenable(gl_blend); /* ON */ /* */ glenable(gl_point_smooth); glhint(gl_point_smooth_hint, GL_NICEST); 19 / 23
36 (cnt) glenable(gl POINT SMOOTH) glenable(gl LINE SMOOTH) glenable(gl POLYGON SMOOTH) glhint(gl POINT SMOOTH HINT, GL FASTEST); glhint(gl LINE SMOOTH HINT, GL FASTEST); glhint(gl POLYGON SMOOTH HINT, GL FASTEST); glhint(gl POINT SMOOTH HINT, GL NICEST); glhint(gl LINE SMOOTH HINT, GL NICEST); glhint(gl POLYGON SMOOTH HINT, GL NICEST); 20 / 23
37 program3 4c length /= 20; /* */ if(length > 001){ draw_gasket(x0, y0, length); draw_gasket(mid_point(x0, x1), mid_point(y0, y1), length); draw_gasket(mid_point(x2, x0), mid_point(y2, y0), length); } 21 / 23
38 OpenGL OpenGL 1 OpenGL 2 3 API 2 OpenGL GLUT OpenGL GLUT 3 2 22 / 23
[1] Mark J Kilgard The OpenGL Utility Toolkit (GLUT) programming interface API version 3( ) http://opengljp/glut/indexhtml [2], OpenGL 3 CG, 2003 [3] GLUT OpenGL http://wwwwakayama-uacjp/ tokoi/opengl/libgluthtml [4] OpenGL http://wwwopenglorg/ 23 / 23