6. OpenGL$B%W%m%0%i%_%s%0F~Lg(B

$B!Z7W;;5!=xO@#2!&$BL\, $B7W;;5!=xO@#2(B, $B, www.kameda-lab.org 2012/11/07e

$B$3$3$+$i$O!"(BOpenGL$B$r;H$C$?;fOpenGL$B$O(BCG$B$r%j%"%k%?%$%`I=<($9$k$?$a$N%W%m%0%i%_%s%0%i%$%V%i%j$G$9!#(B
$B3'$5$s$K$O!"?t3X%i%$%V%i%j0J30$NBg5,LO$J%i%$%V%i%j$r;H$&=i$a$F$N5!2q$K$J$j$^$9!#(B

OpenGL$B%i%$%V%i%j$O$=$l<+BN$h$/$G$-$?%i%$%V%i%j$J$N$G$9$,!"$=$l$@$1$G$O$B$=$3$G!"(BOpenGL$B%i%$%V%i%j$r$h$j4JC1$K;H$($k$h$&$K(BOpenGL Utility (GLU)$B%i%$%V%i%j$,MQ0U$5$l$F$$$^$9!#(B
$B$7$+$7!"(BGLU$B%i%$%V%i%j$N=u$1$rOpenGL Utility Toolkit (GLUT)$B%i%$%V%i%j$,MQ0U$5$l$F$$$^$9!#(B

  1. OpenGL: CG$B$r4JC1$KIA$-!"$+$D%O!<%I%&%'%"$rM-8z$KMxMQ$9$k$?$a$N%i%$%V%i%j(B
  2. GLU: OpenGL$B$N4X?t$rAH$_9g$o$;$F!"$h$jCj>]EY$N9b$$!J;H$$$d$9$$!K4X?t$rB7$($?%i%$%V%i%j(B
  3. GLUT: OpenGL$B$+$i(Bwindow$B:n@.!&@)8f$KH<$&ItJ,$r4JC1$K;H$($k$h$&$K$9$k$?$a$N%i%$%V%i%j(B

$B$H$$$&$3$H$G!"4JC1$K(BOpenGL$B%i%$%V%i%j$r;H$&!"$H8@$C$F$b!"$B$^$:$O(BOpenGL$B$G$N%W%m%0%i%_%s%0$N=iJb$r$B;29M%j%s%/(B

$B!&(BOpenGL(ver.2.1)$B$N3F4X?t(B($B>.J8;z$N(Bgl$B$N#2J8;z$G;O$^$k4X?t(B)$B$N@bL@(B
$B!&(BOpenGL$B$N(BProgramming Guide Book (ver1.1, $BDL>N@VK\(B)
$B!&(BGLUT - The OpenGL Utility Toolkit
$B!&(BThe OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3


06.01. $B$O$8$a$F$N(BOpenGL - $B%W%m%0%i%`$NOH$@$1(B -

OpenGL/glut$B%i%$%V%i%j!J0J8e$OC1=c$K(BOpenGL$B$HN,$7$^$9!K$r;H$C$F(BCG$BIA2h$N%W%m%0%i%`$r:n@.$9$k$H$-$O!"(Bglut$B%i%$%V%i%j$,?d>)$9$k%W%m%0%i%_%s%0%9%?%$%k(B$B$K=>$&I,MW$,$"$j$^$9!#(B
glut$B%i%$%V%i%j$r;H$C$?%W%m%0%i%`$G$O!"(BglutMainLoop()$B4X?t$rCf?4$H$7$?%$%Y%s%H!A%3!<%k%P%C%/J}<0$N%W%m%0%i%_%s%0$,?d>)$5$l$F$$$^$9!#(B

$B%$%Y%s%H=hM}%k!<%W(B

$B%&%#%s%I%&$r2p$7$F%f!<%6$H%$%s%?%i%/%7%g%s$9$k%W%m%0%i%`$G$O!"$7$P$7$P%$%Y%s%H6nF07?$N%"%k%4%j%:%`$,;H$o$l$^$9!#(B
$B$3$l$^$G3X=,$7$F$-$?DL>o$N%W%m%0%i%`$O!"(Bmain()$B4X?t$NF,$+$i=g$K=hM}$7$F:G8e$^$G9T$C$F=*N;$7$F$$$^$7$?!J%U%m!<6nF07?$H8F$P$l$^$9!K!#(B

$B$3$l$KBP$7$F!"%$%Y%s%H6nF07?%W%m%0%i%_%s%0$K$h$k$B!V$I$N$h$&$J%$%Y%s%H$,H/@8$7$?$i$I$s$J=hM}$r$9$k$+!W(B
$B$rA4$F7h$a$F$*$-$^$9!#(B

$B@_Dj$,:Q$`$H!"%W%m%0%i%`$O%$%Y%s%HBT$A$NL58B%k!<%W$KF~$j$^$9!#(B
$B0lC6L58B%k!<%W$r3+;O8e$O!"%$%Y%s%H$K1~$8$FDj$a$i$l$?F0:n$r$9$k!"$H$$$&$3$H0J300l@Z$7$^$;$s!#(B
glut$B%i%$%V%i%j$K$h$k%W%m%0%i%_%s%0$G$O!"$3$NJ}<0$K1h$C$F%W%m%0%i%_%s%0$9$k$3$H$,A0Ds$H$J$C$F$$$^$9!#(B
$B!J$=$l0J30$N%W%m%0%i%_%s%0%9%?%$%k$b2DG=$G$O$"$k$N$G$9$,!"$"$^$jA[Dj$5$l$F$$$J$$$h$&$G$9$M!#!K(B

$B%W%m%0%i%`$N;EMM(B

$B%W%m%0%i%`$N30It;EMM$OC1=c$G$9!#(B
1. $BL58B%k!<%W3+;OA0$N=`Hw(B
2. $BL58B%k!<%W3+;O(B

$B%W%m%0%i%`$r0J2<$K<($7$^$9!#(B
06-01-Preparation.c

ic2_BootWindow()$B4X?t$G=i4|2=$r$7$F$$$^$9!#(B
$B0J8e!"K\$O(Bic2_$B$G;O$^$k$h$&$K7h$a$F$*$-$^$9!#(B
$B!J$3$&$$$&LsB+$r(B $B%M!<%_%s%0%9%-!<%`(B/naming scheme$B$H8@$$$^$9!#Bg5,LO$J%W%m%0%i%`$r=q$$$F$$$/>e$G!"C1=c$J!"$G$b=EMW$J5;=Q$G$9!K(B
ic2_BootWindow()$B$G$b$C$H$b=EMW$JLr3d$O(BglutCreateWindow()$B$r;H$C$F(Bwindow$B$rN)$A>e$2$k$3$H$G$9!#(B
window$B$K$OL>A0$,$D$1$i$l$k$N$G!"%3%^%s%I%i%$%s$G$NBh#00z?t!J!a(Bargv[0]$B!a%3%^%s%IL>!K$r;XDj$9$k$h$&$K$7$F$$$^$9!#(B
$BB>$K$O!"(BglutInitDisplayMode()$B$G!"#C#GIA2h$N%9%?%$%k$r;XDj$7$F$$$^$9!#(B
GLUT_DOUBLE$B$G!"IA2h$K%P%C%U%!$r#2KgMQ0U$9$k$3$H$r@k8@$7$F$$$^$9!#(B
$B!J$3$l$r%@%V%k%P%C%U%!%j%s%0$H8@$$$^$9!#!K(B
$B!JIqBf$J$I$G2sE>IqBf$rMQ0U$7$F!"N"$G$$$m$$$m=`Hw$7$F@0$C$?$i$0$k$C$H#1#8#0EY2sE>$7$F0l5$$K>lLLE>49$9$k$N$H35G0$OF1$8$G$9!K(B
$B!JEvA3!"IqBf>e$G9u;R$?$A$,$$$m$s$J=`Hw$9$k$N$KMW$9$k;~4V$h$j!"IqBf$N2sE>$K$+$+$k;~4V$N$[$&$,$:$C$HC;$$$H$$$&$N$,$3$NJ}<0$r:NMQ$9$k$?$a$NA0Ds$G$9!K(B

glutMainLoop()$B$H$$$&%$%Y%s%HBT$AL58B%k!<%W$KF~$kA0$K!"!V%$%Y%s%H!AF0:n!W$N%Z%"$r;XDj$9$kI,MW$,$"$j$^$9$,!"$3$N%W%m%0%i%`$G$O2?$b;XDj$7$F$$$^$;$s!#(B
$B$=$N$?$a!"%W%m%0%i%`$O2?$b$7$J$$!J(Bwindow$BMQ$K3NJ]$7$?%P%C%U%!$r%/%j%"$9$i$7$J$$!K$N$G!"(Bwindow$B$NOH$,8=$l$k$@$1$GL58B%k!<%W$KF~$j$^$9!#(B
$B$B%3%s%Q%$%k$H%j%s%/$N35G0(B

OpenGL$B$N%i%$%V%i%j$O$B$?$@!"$h$/;H$o$l$k%i%$%V%i%j$G$b$"$k$N$G!"@0M}$,?J$s$G$$$^$9!#(B

$B%3%s%Q%$%k;~!'(B
$BI,MW$J$N$O(B #include <GL/glut.h> $B$H$7$F(BGL/glut.h$B$r%$%s%/%k!<%I$9$k$3$H$@$1$G$9!#(B
$B!J
$B!J;n$7$K(B /usr/include/GL/glut.h $B$NCf$rGA$/$H!"(B/usr/include/GL/freeglut_std.h $B$r%$%s%/%k!<%I$7$J$5$$$H=q$$$F$"$j$^$9!#!K(B
$B!J$5$i$K(B /usr/include/GL/freeglut_std.h $B$rGA$/$H!"$$$m$$$m$"$C$?$j!"(B/usr/include/GL/gl.h$B$d(B/usr/include/GL/glu.h$B$r%$%s%/%k!<%I$7$J$5$$$H=q$$$F$"$C$?$j$7$^$9!#!K(B
$B!J$5$i$K(B /usr/include/GL/gl.h $B$rGA$/$H!"!E0J2
$B!J$J$*!"$3$N@bL@FbMF$O(BOpenGL$B$N%i%$%V%i%j$N%$%s%9%H!<%kJ}K!$K0M$C$FJQ$o$j$^$9!#!K(B
$B!J$3$3$G$N@bL@$O$3$N

$B%j%s%/;~!'(B
$BI,MW$J$N$O(B libGLU $B$H(B libglut $B$H$$$$D$N30It%i%$%V%i%j$rL@<(E*$K%j%s%/$9$k$3$H$@$1$G$9!#(B
gcc$B$N0z?t$H$7$F$O!"(B -lGLU $B$H(B -lglut $B$H$J$j$^$9!#(B
$B!J$"$H$O%j%s%/;~$K%j%s%+$,0MB84X78$r2r@O$7$F!"$5$i$KI,MW$J30It%i%$%V%i%j$r<+F0E*$KIU$1B-$7$F$/$l$^$9!K(B
$B!J$3$3$G$N@bL@$b$3$N
$B!J(Blinux$B$N%G%#%9%H%j%S%e!<%7%g%s$K$h$C$F$O!"(B-lglut$B$@$1$G:Q$`>l9g$b$"$j$^$9!K(B
$B!J(Bgcc$B$,!"$K$I$N$h$&$J%i%$%V%i%j$,I,MW$+D4$Y$F!"$=$l$i$b<+F0$G%j%s%/$7$F$/$l$F$$$^$9!K(B

$B%3%s%Q%$%k$H%j%s%/$N:n6H(B

[1] $B%3%^%s%I%i%$%s(B
$BC10l%=!<%9%U%!%$%k$G(BOpenGL$B$N%W%m%0%i%`$r=q$$$F$$$k$&$A$O!"%3%^%s%I%i%$%s$G$N4.3$B@a(B$B$rI|=,$7$F$*$$$F$/$@$5$$!#(B
$B:n6H$O$I$3$+$N!J(Beclipse$B$,;H$C$F$$$J$$!K%G%#%l%/%H%j$rMQ0U$7$F $ gcc -Wall -o 06-01 06-01-Preparation.c -lGLU -lglut $ ./06-01

[2] eclipse
$BA0@a$H$N0c$$$O!"%j%s%/$N0z?t$r(Beclipse$B$KEA$($kI,MW$,$"$k$3$H$G$9!#(B
$B%W%m%8%'%/%HL>$O(B 06-01 $B$H$7$^$7$g$&!#(B

06-03-A $B?75,%W%m%8%'%/%H$NEPO?(B (05-4-2-A$B;2>H(B)
1 $B%a%K%e! 2 New Project/Managed Make C Project$B!'%W%m%8%'%/%HL>!'(B06-01 $B"*(B $B$B!J!V%G%U%)%k%H!&%m%1!<%7%g%s$N;HMQ!W$K%A%'%C%/$,F~$C$F$$$k$3$H$b3NG'$7$F$/$@$5$$!K(B
$B!J%0%l%$%"%&%H$5$l$F$$$k%m%1!<%7%g%s$,(B .../workspace-ic2/06-01 $B$K$J$C$F$$$-$^$9!K(B
3 New Project/Select a type of project$B!'"*=*N;(B
$B!J(BProject Type: Executable(Gnu), Configurations: Debug $B$H(B Release $B$NN>J}$K$J$C$F$k$O$:$G$9!K(B
4 a. $B%a%K%e!$r;XDj$7$F3+$$$F!"%=!<%9%3!<%I$r5-=R(B
b. $B2?$i$+$N$B!J$$$:$l$K$;$h$3$NCJ3,$G$O%3%s%Q%$%k$,DL$j$^$;$s!K(B
5 $B:8$N!V(BC/C++ Projects$B!W$G(B 06-01 $B$N:G>e0L3,AX$r%/%j%C%/$7$FA*Br(B
6 $B%a%K%e! 7 $B:8B&$G!V(BC/C++ Build$B!WA*Br(B
8 $B1&B&>e$N(BConfiguration: $B$G!V(BDebug$B!WA*Br(B
9 $B1&B&2<$N(BConfiguration Settings: $B$G!V(BTool Settings$B!W%Q%M%kA*Br(B
10 $B!V(BTool Settings$B!W%Q%M%kFb:8B&$N!V(BGCC C Linker$B!W$N2<0L$N!V(BLibraries$B!W$rA*Br(B
11 $B$=$N1&$N!V(BLibraries$B!W$G!V!\!W%"%$%3%s%/%j%C%/(B
12 $B!V(BEnter Value$B!W%&%#%s%I%&$G!V(BGLU$B!W$HF~NO"*(BOK
11 $B$=$N1&$N!V(BLibraries$B!W$G!V!\!W%"%$%3%s%/%j%C%/(B
12 $B!V(BEnter Value$B!W%&%#%s%I%&$G!V(Bglut$B!W$HF~NO"*(BOK
13 $B!V%W%m%Q%F%#! 14 $B85$N%S%e!<$KLa$k$H!"%3%s%Q%$%k!&%j%s%/$,:FC$($F$$$k$O$:(B
$B!J1&2<$N!V%3%s%=!<%k$G%3%s%Q%$%k
$B!J0J8e!"FC$K@bL@$7$^$;$s$,(B06-02$B0J9_$bF1MM$K9T$C$F$/$@$5$$!K(B

06-3-B $B!V9=@.$*$h$S%G%P%C%0!W(B(05-4-5-A$B;2>H(B)
1 $B%W%m%8%'%/%H%S%e!<$G 2 $B%a%K%e! 3 $B9=@.$*$h$S%G%P%C%0!J:8!K!'(BC/C++ Local Application$B$r%@%V%k%/%j%C%/(B
$B!J(Beclipse$B$K!":#$3$3$G?7$7$/%G%P%C%0$,[email protected]=$G$-$=$&$J%W%m%8%'%/%H$rC5$5$;$^$9!K(B
4 $B9=@.$*$h$S%G%P%C%0!J:8!K!'(BC/C++ Local Application$B$N#13,AX2<$K8=:_$N%W%m%8%'%/%HL>$HF1$8L>[email protected]!J%G%P%C%09=@.!K$,?7$7$/8=$l$k$N$G$=$l$r%/%j%C%/!J$3$3$G$O(B06-01$B$G$9$M!K(B
5 $B9=@.$*$h$S%G%P%C%0!J1&!K!'L>A0!'$3$l$O$3$N%G%P%C%09=@.$K$D$1$kL>A0$G$9!#8=:_$O%W%m%8%'%/%HL>$,(B$B;CDjE*$K(B$BF~$C$F$$$^$9$,!":.Mp$N85$J$N$GJL$NL>A0$K$7$F$*$-$^$7$g$&!#$3$3$G$O(B 06-01-DebugRun $B$H$G$b$7$F$*$-$^$9!#(B
6 $B9=@.$*$h$S%G%P%C%0!J1&!K!'(BMain$B%?%V!'(BC/C++ Application: $B$,6uMs$K$J$C$F$$$k$N$G!"(BSearch Project$B$r%/%j%C%/(B
7 Program Selection$B!'(BBinaries$B!'$NMsFb$K(B 06-01 $B$,$"$k$N$G!"$=$l$r%/%j%C%/"*(BOK
$B!J$3$l$K$h$C$F(B workspace-ic2/06-01/Debug/06-01 $B$H$$$&%G%P%C%0MQ
$B!J!V9=@.$*$h$S%G%P%C%0!J1&!K!W$N(BMain$B%?%V$K$D$$$F$$$?@V$$!_0u$,$3$l$G>C$($^$9!K(B
8 $B9=@.$*$h$S%G%P%C%0!J1&!K!'A4$F$N@_Dj$,=*$o$C$?$i!"!VE,MQ!W$r%/%j%C%/$7$F@_Dj$rJ]B8$7$^$9!#(B
9 $B9=@.$*$h$S%G%P%C%0!J1&!K!'A4$F$N@_Dj$,=*$o$C$?$N$G!"1&2<$N!V%G%P%C%0!W$r%/%j%C%/$7$F

$B$3$N$"$H!"(B05-4-7-A$BF1MM$K%9%F%C%W
06-3-C $B%*%s%i%$%s%G%P%C%0$N6/@)Dd;_(B
1 a. $B%a%K%e!b. $B:8>e$N%"%$%3%sJB$S$N$"$?$j$NDd;_%\%?%s$r%/%j%C%/(B

$BDd;_$5$;$?$"$H$O!"(B05-4-8-A$B$HF1$8$B

$B;XDj$7$J$+$C$?!J%j%s%+$N<+F02r@O$KG$$;$?!K30It%i%$%V%i%j$NB?$/$OF0E*%i%$%V%i%j$H$7$F$B!J(BGL, GLU, glut $B$r$O$8$a!"(BX window$B%7%9%F%`$HO"7H$9$k$?$a$N%i%$%V%i%j$H$+$,;3$N$h$&$K$/$C$D$$$F$$$k$3$H$,$o$+$j$^$9!K(B
$B!J(B4$B>O$^$G$N%W%m%0%i%`$,0MB8$9$kF0E*%i%$%V%i%j$N5,LO$HHf$Y$F$_$F$/$@$5$$!K(B

$  ldd 06-01

$B1i=,(B

06-01-ex1: window$B$K<+J,$NL>A0$r$D$1$F$_$^$7$g$&!#%"%k%U%!%Y%C%HI=5-$9$k$3$H!#(B($B2rEzNc!'(B06-01-ex1.c)
06-01-ex2: 01-2-HelloESYS-Better.c$B$H(B06-01-Preparation.c$B$H$K$D$$$F!"06-01-ex3: 06-3-B$B$N$"$H$G%9%F%C%W


06.02. $B$O$8$a$F$N(BOpenGL - $B%P%C%U%!$r@Z$jBX$($h$&(B -

$BB3$$$F!"!V%$%Y%s%H!AF0:n!W$r;XDj$7$^$9!#(B

$B%W%m%0%i%`2r@b(B

06-02-SwapBuffers.c
06-01$B$+$i$N:9J,(B

ic2_BootWindow()$B$NCf$G!"(Bwindow$B$r3+$$$?$"$H!"$3$N(Bwindow$B$KBP$7$F!V%$%Y%s%H!AF0:n!W$r;XDj$7$^$9!#(B
$B$H8@$C$F$b!"$3$3$G$O(B glutIdleFunc() $B$H$$$&4X?t$r;H$C$F!"!V2K$@$C$?$i(B ic2_DrawFrame()$B$H$$$&4X?t$r8F$S=P$7$F;E;v$7$J$5$$!W$H;XDj$9$k$@$1$G$9!#(B
$B!J$3$3$N(Bidle$B$O!"
$B$3$N$h$&$K!"(Bglut$B%i%$%V%i%j$G$O!"!V%$%Y%s%H!AF0:n!W$NF0:n;XDj$N;~$K$O4X?tL>$r;XDj$7$^$9!#(B
$B$3$N%W%m%0%i%`$G$OB>$K2?$N%$%Y%s%H$bo$K2K$K$J$j$^$9!#(B
$B$D$^$j!"%$%Y%s%HBT$AL58B%k!<%W3+;O"*2K"*$9$0(Bic2_DrawFrame()$Bo$K(Bic2_DrawFrame()$B$ric2_DrawFrame()$B$G:G=*E*$K$9$Y$-$3$H$O!"#1%U%l!<%`J,$N#C#GIA2h$G$9!#(B
$B$^$@#C#GJ*BN$NIA2h$H$+$^$G%W%m%0%i%`$,?J$s$G$J$$$N$G!"$3$3$G$O$H$j$"$($:%P%C%U%!$N2$B$"$H!"(BglutSwapBuffers()$B$G!"$=$l$^$GIA2h$7$F$$$?%P%C%U%!$HI=<($7$F$$$?%P%C%U%!$H$r=V4VE*$K@Z$jBX$($^$9!#(B

$B$B$7$+$7!"%7%9%F%`$NIiC4$OBg0c$$$G$9!#(B
$B%G%9%/%H%C%W"*%7%9%F%`"*%7%9%F%`4IM}"*%7%9%F%`!&%b%K%?$rN)$A>e$2$F!"(BCPU$B;HMQN($r8+$J$,$i!"(B06.01$B@a$N%W%m%0%i%`(B$B$H(B06.02$B@a$N%W%m%0%i%`(B$B$H$r$BA0e$,$j$^$;$s$,!"8e$B!J$3$N(BCPU$B;HMQN($N>e>:6q9g$O4D6-$K$h$C$FBg$-$/0c$$$^$9!K(B

$B%$%Y%s%H%k!<%WJ}<0$N%W%m%0%i%`$G$N%G%P%C%0

glutMainLoop()$B$r;H$&%W%m%0%i%`$G$O!"(B05-4-7-A/B, 05-4-9$B$N$h$&$K%G%P%C%0$B$3$N$H$-!"$C$F!"@_Dj$5$l$?%3!<%k%P%C%/4X?t$,8F$S=P$5$l$?$H$-$G$9!#(B
$B$=$3$G!"%G%P%C%0$9$kA4$F$N!K%3!<%k%P%C%/4X?t$NF~8}$K%V%l!<%/%]%$%s%H$r@_Dj$7$^$9!#(B
$B%G%P%C%0
06-2-C $B%V%l!<%/%]%$%s%H$N@_Dj$H 1 $B@_Dj$7$?$$4X?t$N9T$N:8C 2 $B$=$N$^$^1&%/%j%C%/"*(BToggle Breakpoint
$B!J%A%'%C%/%^!<%/$H@D4]$,IU$-$^$9!K(B
$B!J%A%'%C%/%^!<%/$O$3$N9T$K(BBreakpoint$B$,IU$$$F$$$k$3$H$r<($7$^$9!K(B
$B!J@D4]$O$3$N(BBreakpoint$B$G;_$^$kM=Dj$H$$$&$3$H$r<($7$^$9!K(B
$BB>$K$b0l;~Dd;_$7$?$$9T$,$"$l$PF1MM$K$7$F(BBreakpoint$B$r@_Dj$7$^$9!#(B
2 a. F8$B$J$I$G:F3+(B
b. F5$B$J$I$G%9%F%C%W
3 $B3:Ev$9$k(BBreakpoint$B$^$GE~C#$9$k$HDd;_$7$^$9!#(B
$B!J3:Ev9T$N@hF,$KLp0u$,Mh$k$N$G$9$0$o$+$j$^$9!K(B

$B1i=,(B

06-02-ex1:06.01$B@a$N%W%m%0%i%`(B$B$G$O(BCPU$BMxMQN($,
06-02-ex2:06.02$B@a$N%W%m%0%i%`(B$B$G$O(BCPU$BMxMQN($,o$K(Bic2_DrawFrame()$B$r


06.03. $B$O$8$a$F$N(BOpenGL - $B%P%C%U%!@ZBX$N3NG'(B -

CPU$B;HMQN($,9b$$$N$K!"%f!<%6$K2?$b;k3PE*JQ2=$,$J$$$N$O$B$J$s$H$+2D;k2=$r9M$($F$_$^$7$g$&!#(B

$B$3$3$G$O!"EI$j$D$V$9?'$r;~!9JQ$($k$3$H$r9M$($^$9!#(B
$B#32s$K#12s$ONP?'$K!";D$j#22s$O=>MhDL$j9u?'$K$7$F$_$^$9!#(B

$B%W%m%0%i%`2r@b(B

06-03-SwapBuffersCheck.c
06-02$B$+$i$N:9J,(B

ic2_DrawFrame()$BFb$K(Bstatic$B@0?tJQ?t$rMQ0U$7$F!":#$,2?2sL\$NIA2h$+$r?t$($F5-21$7$F$$$^$9!#(B

$B$5$F!"4|BT$H$7$F$ONP"*9u"*9u"*NP"*9u"*9u"*NP"*9u"*9u"*NP"*9u"*9u"*$H$$$&?'JQ2=$,8+$($k$O$:$G$9$,!E!)(B
$B$s$s!)$*$=$i$/;W$$IA$$$F$$$kDL$j$K8+$($F$J$$$H;W$$$^$9!#$I$&$7$F$G$7$g$&$M!)(B

$B!ZCm0U!'2<5-$N:n6H$O!"9)3X%7%9%F%`3XN`#53,7W;;5!%7%9%F%`$G$+$J$j9b$$3NN($G%7%9%F%`$r%U%j!<%:$5$;$k$h$&$G$9!#l9g$O>/$J$/$H$b(Beclipse$BEy%(%G%#%?$O=*N;$5$;$F$*$-$^$7$g$&![(B
$BF0BN;kNO$K<+?.$N$J$$?M$O!"%3%^%s%I%i%$%s$G$B!J?7$7$/@8@.$7$?%&%#%s%I%&$G$O$J$/!"%W%m%0%i%`$r5/F0$7$?Ce$G%-!<$rF~NO$7$F$/$@$5$$!K(B
Ctrl-z$B$G%W%m%0%i%`$,0l;~Dd;_$7$^$9!#(B
$B!J(BCtrl$B%-!<$r2!$7$J$,$i(Bz$B%-!<$G$9$h!"$h$b$d$H$O;W$$$^$9$,G0$N$?$a!K(B
fg$B$HBG$D$H!"0l;~Dd;_$7$F$$$?%W%m%0%i%`$N$B!J3NN(E*$K$O(B33%$B$GNP2hLL$r8+$l$k$O$:!#L\2!$7$G(BCtrl-z$B=PMh$k?M$,$$$?$i<+K}$7$F$$$$$G$7$g$&!K(B

$B1i=,(B

06-03-ex1: $B>e5-%W%m%0%i%`$rJQ99$7$F!"#52s$K#12sNP$K$J$k$h$&$K$7$J$5$$!#(B
06-03-ex2: $B>e5-%W%m%0%i%`$rJQ99$7$F!"#1#02s$K#12s@V$K$J$k$h$&$K$7$J$5$$!#(B
06-03-ex3: $B>e5-%W%m%0%i%`$rJQ99$7$F!"NP"*9u"*9u"*9u"*Gr"*9u"*9u"*9u$K$7$F$_$J$5$$!#(B
06-03-ex4: $B8=:_;HMQ$7$F$$$k%G%9%/%H%C%W4D6-$G!"%b%K%?$N%j%U%l%C%7%e%l!<%H$rD4$Y$J$5$$!#(B
06-03-ex5: $B>e5-%W%m%0%i%`$rJQ99$7$F!"(Bic2_DrawFrame()$B4X?t$,(Bex4$B$N%l!<%H!_#1#0#02s06-03-ex6: ex5$B$N%W%m%0%i%`$re$G(B date; ./06-03-ex5; date $B$N$h$&$K$9$l$P2DG=$G$9!K(B


06.04. $B$O$8$a$F$N(BOpenGL - $B%P%C%U%!$r;~4V$G@Z$jBX$((B -

$BA0@a$G$O!"(Bglut$B$K!V2K$@$C$?$i(Bic2_DrawFrame()$B!W$H;XDj$7$F$$$^$7$?$,!"$3$N!V2K$@$C$?$i!W$,linux$B$G;H$C$F$$$k(BX$B%5!<%P$O!J4D6-$K$b$h$j$^$9$,!K%G%9%/%H%C%WA4BN$K$D$$$F!"(B60Hz$B$0$i$$$NIQEY$GIA2h$7D>$7$F$$$^$9!#(B
$B:#2s$N$h$&$K!"(Bic2_DrawFrame()$B$G$N:n6HNL$,>.$5$$>l9g$O$=$N$B$H$$$&$3$H$O!"!V2K$J$N$G(Bic2_DrawFrame()$B$r$B$^$?!"$3$NJ}<0$G$OIA2h;~4V4V3V$b0lDj$7$^$;$s!#(B
$B!J(Bic2_DrawFrame()$B4X?t$NIi2Y$,F1$8$G$b!"(BOS$B>e$GB>$K=E$$%8%g%V$,Av$j;O$a$?$j$9$k$H(B1/60$BIC$N$&$A$K2?2sEv3:4X?t$r

$B$=$3$G!";XDj$9$k%$%Y%s%H$Nglut$B%i%$%V%i%j$N?d>)N.57(B($B=q$-J}(B)$B$K=>$C$F!"0J2<$N$h$&$K$7$^$9!#(B

(1) $B$^$:(BglutDisplayFunc()$B$G!"!J$J$s$K$;$h!K!VIA2h$9$k$J$i$3$N4X?t!W$H$$$&$3$H$r;XDj$7$^$9!#!J$3$l<+?H$O%$%Y%s%H!AF0:n$NDj5A$H$O4X78$"$j$^$;$s!K(B
(2) glutTimerFunc()$B$G!"!V:#$+$i#t(B[ms]$B8e$K5/F0$7$?$$4X?t(B($B$3$3$G$O(Bic2_timerhandler()$B4X?t(B)$B$r;XDj!W$7$^$9!#(B
(3) $B$=$N(B(2)$B$G5/F0$9$k!J(Bic2_timerhandler()$B!K4X?t$NCf$G!"!V(4) $B$B!J0l8+LLE]$J$3$N;EAH$_$NMxE@$O!":FIA2h$7$F$[$7$$$H$$$&%j%/%(%9%H$,$4$/C;;~4V$N$&$A$KJ#?tN/$^$C$?$H$-$K!"$=$l$>$l$GIA2h$7$F$7$^$&$N$G$O$J$/$^$H$a$F#12s$NIA2h$@$1$KM^$(9~$a$k$3$H$H!"IA2h$9$k4X?t$r%W%m%0%i%_%s%0>e#1$D$@$1MQ0U$7$F$*$1$P$$$$$h$&$K$7$F$*$1$k$3$H!"$N#2$D$G$9$M!K(B
$B!J!V%j%/%(%9%H$,$4$/C;;~4V$N$&$A$KJ#?tN/$^$k!J$+$b$7$l$J$$!K!WNc$O!"$=$N$&$A$K=P$F$/$k$3$H$G$7$g$&!K(B

$B%W%m%0%i%`2r@b(B

06-04-SwapByTimer.c
06-03$B$+$i$N:9J,(B

glutDisplayFunc(ic2_DrawFrame());$B$K$h$C$F!"%P%C%U%!$KIA2h$9$k>l9g$O!J86B'$H$7$F!K(Bic2_DrawFrame()$B$r;H$&$H$$$&@k8@$r$7$^$9!J>e5-(B(1)$B!K!#(B
glutTimerFunc(250, ic2_timerhandler, 0);$B$K$h$C$F!"$=$N;~E@$+$i(B250[ms]$B8e$K(B ic2_timerhandler() $B4X?t$r!J0z?t$r(B0$B$H$7$F!K8F$S=P$9$h$&M=Ls$7$F$*$-$^$9!J>e5-(B(2)$B!K!#(B

$B%$%Y%s%HBT$AL58B%k!<%W$KF~$C$?8e!"(B250[ms]$B8e$K(Bic2_timerhandler()$B$,ic2_timerhandler()$B4X?tFb$G$O!"!Ve5-(B(3)$B!K!#(B
$B$=$N$"$H!"$3$l$+$i(B250[ms]$B8e$K$^$?<+J,$r(B(ic2_timerhandler()$B4X?t$r(B)$B8F$S=P$9$h$&M=Ls$7$F$*$-$^$9!J>e5-(B(2)$B!K!#(B

ic2_timerhandler()$B$Nl9g$3$l$O$9$0$KMh$^$9!K(Bic2_DrawFrame()$B$,$B:#2s$O7k2L$H$7$F(B250[ms]$B4V3V$GIA2h$,99?7$5$l$k$N$G!"%P%C%U%!$N?'JQ2=$,4Q;!$7$d$9$/$J$C$F$$$k$3$H$G$7$g$&!#(B
$B$^$?!"A0@a$N%W%m%0%i%`$h$j(BCPU$B;HMQN($b$:$C$HDc$/$J$j$^$9!#(B

$B1i=,(B

06-04-ex1: $B>e5-%W%m%0%i%`$,A0@a$N%W%m%0%i%`$h$j(BCPU$B;HMQN($O2<$,$k798~$K$J$j$^$9$,!"=hM}NL$O$I$l$0$i$$:o8:$5$l$k$N$G$7$g$&$+!)(B06-03-ex$B$N7k2L$H9g$o$;$F9M;!$9$k$H$5$i$K$h$$$G$7$g$&!#(B
06-04-ex2: $B<+J,$,:#;HMQ$7$F$k%b%K%?$N%j%U%l%C%7%e%l!<%H$K9g$o$;$F!">e5-%W%m%0%i%`$NIA2h;~4V4V3V$rJQ99$7$J$5$$!#(B
06-04-ex3: $B>e5-%W%m%0%i%`$NIA2h;~4V4V3V$r$$$m$$$m$HJQ$($F$_$F!"IA2h;~4V463P$H(BCPU$BIi2Y$H$N4X78$G8@$($k$3$H$r<($7$J$5$$!#(B
06-04-ex4: $B$3$N$3$H$+$i!"%?%$%^!<%O%s%I%i$r;H$o$J$$%W%m%0%i%`$N06-04-ex5: $B87L)$K$O!">e5-$N%W%m%0%i%`$G$O(B4Hz(250ms$BKh(B)$B$G$NIA2h4V3V$K$J$kJ]>Z$O$"$j$^$;$s!#$=$NM}M3$K$D$$$F=R$Y$F$_$J$5$$!#(B
06-04-ex6: $B87L)$K$O!">e5-$N%W%m%0%i%`$G$O(B4Hz(250ms$BKh(B)$B$h$j>.$5$/$J$k!J4V3V$,D9$/$J$k!K798~$,$"$j$^$9!#$=$NM}M3$K$D$$$F=R$Y!"9M$($i$l$kBP:vJ}K!$r<($7$J$5$$!#(B
06-04-ex7: $B>e5-%W%m%0%i%`$r2~NI$7$F!"<~4|$H(Bbpm$B$r%3%^%s%I%i%$%s$G;XDj$G$-$k$h$&$K$7$J$5$$!#(Bbpm$B$O#1J,Ev$?$j$N%U%l!<%`@Z$jBX$(2s?t(B(beat per minute)$B$H$7$^$9!#(B


06.05. $B$O$8$a$F$N(BOpenGL - $BD>8rEj1F%+%a%i(B -

$B$3$3$^$G$G$d$C$H%P%C%U%!$HI=<($NLdBj$,JRIU$$$?$N$G!"$B$7$+$7!"#C#G$NIA2h$K$O!"!V%+%a%i!&8w8;!&J*BN(B($BLL$N0LCV$HK!@~$HH?$BK\@a$G$O!"4v2?E*$JLdBj$rJRIU$1$F!"7A>u$@$1$G$b7A$,8+$($k$h$&$K$7$^$7$g$&!#(B

$B$=$N$?$a$K!"%+%a%i$N@_Dj$r$7$^$9!#(B
$BD>8rEj1F%+%a%i$K$h$k#3$BEj1F$N35G0(B

$B$^$:$O?t3XE*$JI=8=$NI|=,$G$9!#(B

$BJ?LL$X$NPcamera$B$GI=5-$7$^$9!#(B
$BEj1F@h$NJ?LL$r;#A|LL$H8F$S!"$=$N#2pcamera$B$GI=5-$7$^$9!#(B
$B#3P
$B$GI=8=$7$^$9!#(B

pcamera = P Pcamera

$B$3$3$G!"(BPcamera$B$O#3MWAG!"(Bpcamera$B$O#2MWAG$GK\Mh$O==J,$J$N$G$9$,!"7W;;9=B$$N4JAG2=$r9MN8$7$F!"$9$Y$F#4MWAG$N@F$B$3$l$K$h$C$F!"(BP$B$O(B4x4$B$N9TNs$H$J$j$^$9!#(B

$B?t3XE*$K$O>e5-$G:Q$`$N$G$9$,!"$B$3$3$G$O(BOpenGL$B$G$N5,Dj$K1h$C$F@bL@$7$^$9!#(B

$B!&(BOpenGL$B$G$O#3$B!&%+%a%i#3GE@$O86E@$K8GDj$5$l$^$9!#(B
$B!&%+%a%i#3$B!&%+%a%i#3eJ}$,@5!"%+%a%i$N2#J}8~$O(BX$B<4$G1&J}$,@5$G$9!#(B

$B;29M!'(BRed Book Chapter 3, Figure 3-9: Object and Viewpoint at the Origin

$BD>8rEj1F(B

$BD>8rEj1F$O!"6u4V>e$N:BI8$r(BZ=0$B$NJ?LL$K@5Ej1F$9$k$b$N$G$9!#(B
$BEvA3!";#A|LL$NBg$-$5$OJ*BN$NBg$-$5$@$1I,MW$G$9!#(B
$B!J(B170cm$B$N?HD9$N?M4V$rD>8rEj1F$K$h$C$FA|$rF@$k$N$J$i!"9b$5(B170cm$B$N;#A|LL(B(!)$B$rMQ0U$9$kI,MW$,$"$j$^$9!K(B
$B$^$?!"86M}E*$K$OG$0U$N(BZ$BCM$N:BI8E@$rEj1F$9$k$3$H$,2DG=$G$9$,!"$B!J(BOpenGL$B%O!<%I%&%'%"$,DL>o;H$C$F$$$k(BZ-buffer$BK!$H$$$&1s6aH=DjK!$r$9$k$H$-$K!"HO0O$,9-$9$.$k$H1s6aH=Dj$N@:EY$,Dc2<$7$^$9!K(B

$B;29M!'(BRed Book Chapter 3, Orthograhic Projection

$B%W%m%0%i%`2r@b(B

06-05-OrthogonalCamera.c
06-04$B$+$i$N:9J,(B

$B%+%a%i$N@_Dj$O!"#1%U%l!<%`J,$NIA2h$r9T$&(Bic2_DrawFrame()$B$N:G=i$K9T$$$^$9!#(B
$B$=$3$G(Bic2_SetUpCamera_Ortho()$B$r8rEj1FMQ$N(B4x4$B9TNs$r5a$a$^$9!#(B

glOrtho(-1, 1, -1, 1, -1, 1)
$B$3$N%W%m%0%i%`$G$O!"2#(B(X$B:BI8(B) -1.0$B!A(B1.0$B!"=D(B(Y$B:BI8(B) -1.0$B!A(B1.0$B$,D>8rEj1F$NHO0O$H$7$F$$$^$9!#(B($BBh#1!A#40z?t!K(B
$B$3$N%W%m%0%i%`$G$O!"1|9T(B(Z$B:BI8(B) -1.0$B!A(B1.0$B$rD>8rEj1F$NHO0O$H$7$F$$$^$9!#!JBh#5!A#60z?t!K(B

$B;29M!'(BRed Book Appendix F. Orthographic Projection

$BCm0UE@(B

glOrtho()$B$GM?$($k;#A|LL$N=D2#Hf$H!"$B$=$&$7$J$$$H!"OD$s$@!J4v2?E*$K@5$7$/$J$$!KIA2h$H$J$C$F$7$^$$$^$9!#(B
glutCreateWindow()$B$G$O%G%U%)%k%H$G@5J}$J(Bwindow$B$,MQ0U$5$l$k$N$G!"$3$N%W%m%0%i%`$G$O(BglOrtho()$B$N%"%9%Z%/%HHf$,(B1.0$B$N@5J}$K$J$k$h$&$K;XDj$7$F$$$^$9!#(B
$B
$BH/E8!J$3$NItJ,$O$O$8$a$N$&$A$OFI$_Ht$P$7$F$b9=$$$^$;$s!K(B
OpenGL$B$G$O!"#C#GIA2h$r7W;;$9$k:]$K$O!"4pK\E*$K(B4x4$B$N9TNs1i;;$r9T$$$^$9!#(B
OpenGL$B$G07$&(B4x4$B$N9TNs$OBgJL$7$F#4OpenGL$B$G$O!"$3$l$i$N9TNs$K4X$7$F$O!"FC$K%9%?%C%/9=B$$rMQ$$$FMM!9$JA`:n$,=PMh$k$h$&$K9)IW$5$l$F$$$^$9!#(B
$B$l$N9TNs%9%?%C%/$N%H%C%W$K$"$k9TNs$@$1$G$9!#(B

$B#4$B$=$3$G!"$^$:(B glMatrixMode(GL_PROJECTION); $B$K$h$C$F$^$:(BPROJECTION$B9TNs%9%?%C%/$KMQ;v$,$"$k$3$H$r<($7$^$9!#(B
$BB3$$$F!$(BglLoadIdentity(); $B$G8=:_A`:nCf$N!J!a(BPROJECTION$B9TNs$N!K%9%?%C%/$N%H%C%W$rC10L9TNs2=$7$^$9!#(B
$B;29M(B: Red Book Chapter 3, Figure 3-1, 3-2

$B1i=,(B

06-05-ex1: $BD>8rEj1F%+%a%i$K$D$$$F!"(BOpenGL$B$ND>8rJQ49(B(glOrtho()$B4X?t(B)$BA0$N@$3&:BI87O$G$N(B3$B06-05-ex2: $B>e5-(Bex1$B$K$*$$$F!"JQ498e$N%+%a%i:BI87O%Y%/%H%kCf$N(BZ$BCMMWAG$O$I$N$h$&$J0UL#$r;}$D$+@bL@$7$J$5$$!#(B


06.06. $B$O$8$a$F$N(BOpenGL - $B@~2hJ*BN$rIA2h(B -

$BD>8rEj1F$N%+%a%i$^$GMQ0U$7$?$N$G!"$"$H$OJ*BN$N7A>u$rM?$($l$P!"4v2?E*$K@5$7$$IA2h$,2DG=$K$J$j$^$9!#(B
$B!J8w8;$b!"J*BN$NH?

06.05$B@a$N%W%m%0%i%`$G$O!"IA2h$G$-$k6u4V$O(BX,Y,Z$B<4$H$b(B -1.0 $B!A(B 1.0 $B$G$9!#(B
$B$=$3$G!"$3$NHO0O$KF~$k@~2hJ*BN$NIA2h$rMQ0U$7$^$7$g$&!#(B

$B%W%m%0%i%`2r@b(B

06-06-LogoOpenGL.c
06-05$B$+$i$N:9J,(B

ic2_OpenGLLogo()$B4X?t$O!"(BZ=0$B$NJ?LL>e$N(BX$BCM(B -1.0 $B!A(B 1.0 $B!"(BY$BCM(B -1.0 $B!A(B 1.0 $B$NHO0OFb$G(BOpenGL$B$r@~2h$GIA2h$7$^$9!#(B
$B$"$H$GI=<(%5%$%:$,JQ$($i$l$k$h$&$K!"%9%1!<%k%U%!%/%?$r0z?t$H$7$F$B%W%m%0%i%`2r@b!J@~$NIA2h!K(B

OpenGL$B$G$O!"2?$B$3$3$G$O!"!V(BGL_LINES$B!W$H$$$&!"E@Ns$r7R$$$G@~J,$rIA2h$9$k7A<0$rMxMQ$7$^$9!#(B

GL_LINES object
glDisable(GL_LIGHTING);   // $B0J8e(BRGB$B$N?';XDj$,$"$l$PCM0h$r(B0.0$B!A(B1.0$B$H2>Dj$7$FCe?'(B
glColor3f(1.0, 1.0, 1.0); // $B=g$K(BR,G,B
glLineWidth(1.0); // $B@~$NB@$5!JC10L$O(B[$B2hAG(B]$B!K(B

glBegin(GL_LINES); // $BIA2h3+;O(B ($B@~J,(BAB, $B@~J,(BBC$B$rIA2h(B)
glVertex3f(s * -0.8, s *  0.8, 0.0); glVertex3f(s * -0.8, s *  0.2, 0.0); // $B@~J,(BAB
glVertex3f(s * -0.8, s *  0.2, 0.0); glVertex3f(s * -0.8, s *  0.2, 0.0); // $B@~J,(BBC
glEnd(); // $BIA2h=*N;(B

$B!J$A$J$_$KE@72$r7R$$$G@~J,$rIA$$$F$$$/$H$-$O(B GL_LINE_STRIP $B$r;H$$$^$9!K(B

$B;29M!'(BRed Book Chapter 2, Describing Points, Lines, and Polygons, $B"*(B Lines

$B1i=,(B

06-06-ex1: $B@~$NB@$5$r#2G\$K$7$F$_$^$7$g$&!#(B
06-06-ex2: $B<+J,$GJ}4c;f$rMQ0U$7$F!"%*%j%8%J%k$N%m%4$r:n$j$^$7$g$&!#%9%1!<%kD4@02DG=$K$7$F$*$/$3$H!#(B


06.07. $B$O$8$a$F$N(BOpenGL - $B<~4|E*F0:n(B -

$B$;$C$+$/(BOpenGL LOGO $B$rIA$$$F$$$k$N$G!"$3$A$i$b2?$+F0$-$,M_$7$$$H$3$m$G$9!#(B
ic2_OpenGLLogo()$B4X?t$N8F$S=P$7;~$K;XDj$9$k%9%1!<%k%U%!%/%?$r!"GX7J$N?'@ZBX$HF14|$7$FJQ2=$5$;$k$h$&$K$7$^$9!#(B

$B%W%m%0%i%`2r@b(B

06-07-Periodic.c
06-06$B$+$i$N:9J,(B

$B1i=,(B

06-07-ex1: $B>e5-%W%m%0%i%`$r2~B$$7$F!"=q3dJQ?t(Bsplitnumber$B!J@5@0?t!K$rF3F~$7$F!"$J$a$i$+$K%m%4$,3HBg$7$F$$$k$h$&$K8+$($k(BCG$B$r$B!J(B06-07-Periodic.c$B$O<~4|(B2500[ms]$B$G(Bsplitnumber=10$B$KAjEv!K(B
06-07-ex2: $B%9%1!<%k%U%!%/%?!J(Bic2_OpenGLLogo()$B$N0z?t(Bs$B!K$H!"%U%l!<%`%+%&%s%H!J(Bloopcounter$B!K$NCM$H$N4X78$r%W%m%0%i%`$rFI$s$G@53N$K2r@O$7$J$5$$!#(Bloopcounter$B$O#0$+$iCM$r$l$NCM$KBP$7$F$N(Bs$B$NCM$O5a$a$k$3$H!#(B
$B!J$b$H$N(B06-07-Periodic.c$B$KBP$7$F$G$b!"(B06-07-ex1$B$N%W%m%0%i%`$KBP$7$F$G$b!"$I$A$i$G$b$h$$!#:NMQ$7$?$[$&$,$I$A$i$+$OL@5-$9$k$3$H!K(B
06-07-ex3: $B>e5-$N(Bex2$B$GD4$Y$?$h$&$K!"(Bloopcounter$B$H(Bs$B$H$N4X78$O@~7A$G$"$k!#$3$N@~7A4X78$r<0$GI=5-$7$J$5$$!#(B
06-07-ex4: loopcounter$B$H(Bs$B$H$,@5HfNc$@$H%m%4$,0lDj%9%T!<%I$G6a$E$$$F$-$F$$$k$h$&$K$_$($J$$!J1s$/$N$&$A$OB.$/!"6a$E$/$HCY$/0\F0$7$F$$$k$h$&$K8+$($k!K!#$=$NM}M3$rEj1F4v2?$N<0$rMQ$$$F@bL@$7$J$5$$!#(B
06-07-ex5: $B;~4V7P2a(B($B%U%l!<%`%+%&%s%H(B)$B$KBP$7$F%m%4$,8+$+$1>e!"EyB.$G6a$E$$$F$/$k$h$&$K$9$k$?$a$N!"%U%l!<%`%+%&%s%H$+$i%9%1!<%k%U%!%/%?$r5a$a$k<0$rF3=P$7$J$5$$!#(B
06-07-ex6: $B>e5-$N(Bex5$B$N<0$K4p$E$$$F%W%m%0%i%`$r=$@5$7$F!"$=$NF0:n$r06-07-ex7: 06-07-Periodic.c$B$G$ONP?'%P%C%0%0%i%&%s%I$K$J$C$?$H$-$K!"%m%4$,IA2h$G$-$F$$$^$;$s!#$=$N;~$K%m%4$,(B1.0$BG\$GIA2h$5$l$k$h$&$KJQ99$7$J$5$$!#(B


06.08. $B$O$8$a$F$N(BOpenGL - $B%^%$%/%mIC%*!<%@$N7WB,(B -

unix$B$N%7%9%F%`4X?t$G$"$k(B gettimeofday()$B4X?t(B $B$r;H$($P!"%7%9%F%`;~4V$r%^%$%/%mIC%*!<%@$GD4$Y$k$3$H$,$G$-$^$9!#(B

06-08-CountTime.c

$B1i=,(B

06-08-ex1: 06-04-ex7$B$N%W%m%0%i%`$r$5$i$K2~B$$7$F!"<~4|$,@53N$K@_Dj$5$l$F$$$k$+3NG'$G$-$k%W%m%0%i%`$K$7$J$5$$!#(B


06.09. $B$O$8$a$F$N(BOpenGL - $B%3!<%I%/%j!<%K%s%0(B -

$B06-09-LogoOpenGL.c
06-06$B$+$i$N:9J,(B


kameda[at]iit.tsukuba.ac.jp.