{"id":76,"date":"2005-05-14T07:39:00","date_gmt":"2005-05-14T07:39:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=76"},"modified":"2017-01-29T20:09:18","modified_gmt":"2017-01-29T11:09:18","slug":"opengl-tutorial-display-list","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=76","title":{"rendered":"[OpenGL Tutorial] Display List"},"content":{"rendered":"<p><P><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1365166505.jpg\" class=\"alignleft\" width=\"200\" height=\"150\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/>\uc774\ubc88\uc7a5\uc5d0\uc11c\ub294 \uc624\ub7ac\ub3d9\uc548 \uae38\uac8c \ub04c\uc5b4\uc628 OpenGL\uc758 \ub80c\ub354\ub9c1 \uc131\ub2a5\uc744 \ud5a5\uc0c1 \uc2dc\ucf1c\uc8fc\ub294 Display List\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uace0\uc790 \ud55c\ub2e4. \uc0ac\uc2e4 \uc774 \ubd80\ubd84\uc744 16\uc7a5\uc5d0 \uc704\uce58\uc2dc\ud0a4\uae30\uc5d0\ub294 \uadf8 \ub0b4\uc6a9\uc774 \uae30\ubcf8\uc801\uc774\uae34 \ud558\uc9c0\ub9cc \ud544\uc790 \uc2a4\uc2a4\ub85c\uc758 \ud63c\ub780\uc744 \uc904\uc774\uae30 \uc704\ud574 \uadf8\ub0e5 \uc21c\uc11c\ub300\ub85c \ubc88\ud638\ub97c \ub9e4\uacbc\ub2e4. \uc774 \uac15\uc88c\ub294 1\uc7a5\uc5d0 \uc774\uc5ec \ub450\ubc88\uc9f8\ub85c NeHe\uc758 Display List\ub97c \uadf8\ub300\ub85c \ubc88\uc5ed\ud55c\ub2e4. \uc774\uc81c \uc2dc\uc791\ud574 \ubcf4\uc790. <BR><BR>\uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Display List\uc5d0 \ub300\ud55c \uc124\uba85\uc774\ub2e4. \uac04\ub2e8\ud55c \uc7a5\uba74\uc744 \uc5f0\ucd9c\ud558\uace0\uc790 \ud560\ub54c Display List\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368 \uc18d\ub3c4\uc758 \uac1c\uc120 \ubfd0\ub9cc\uc774 \uc544\ub2c8\ub77c \ucf54\ub4dc \uc904\uc218 \ub610\ud55c \uc904\uc77c \uc218 \uc788\ub2e4.<\/P><P>\uc608\ub97c \ub4e4\uc5b4\uc11c, \uc18c\ud589\uc131 \uac8c\uc784\uc744 \ub9cc\ub4e4\uace0 \uc788\ub2e4\uace0 \ud574 \ubcf4\uc790. \uac01 \ub808\ubca8\uc740 \ucd5c\uc18c\ud55c 2\uac1c \uc774\uc0c1\uc758 \uc18c\ud589\uc131\uc73c\ub85c \uc2dc\uc791\ub41c\ub2e4. \uadf8\ub798\uc11c \ub2f9\uc2e0\uc740 3\ucc28\uc6d0\uc758 \uc18c\ud589\uc131\uc744 \uc5b4\ub5bb\uac8c \ub9cc\ub4e4 \uac83\uc778\uc9c0 \uacc4\uc0b0\ud55c\ub2e4. \uc77c\ub2e8 \uacc4\uc0b0\uc774 \ub05d\ub09c\ud6c4 \ud3f4\ub9ac\uace4\uc774\ub098 Quad\ub97c \uc774\uc6a9\ud558\uc5ec \uc18c\ud589\uc131\uc744 \ub9cc\ub4e0\ub2e4. \uc774 \uc18c\ud589\uc131\uc774 \uc5ec\ub35c\uac1c\uc758 \uba74\uc73c\ub85c \uc774\ub8e8\uc5b4\uc84c\ub2e4\uace0 \ud574\ubcf4\uc790. \uc774\ub807\uac8c \ub9cc\ub4e0 \ud558\ub098\uc758 \uc18c\ud589\uc131\uc744 \uc5ec\ub7ec\uac1c \ub9cc\ub4e4\uae30 \uc704\ud574, \uac04\uacb0\ud558\uac8c \ubc18\ubcf5\ubb38\uc744 \uc774\uc6a9\ud558\uc5ec \uc5ec\ub7ec\uac1c\uc758 \uc18c\ud589\uc131\ub4e4\uc744 \uadf8\ub9ac\uac8c \ub420 \uac83\uc774\ub2e4. \uc18c\ud589\uc131\uc744 \ub9cc\ub4e4\uae30 \uc704\ud574 18\uc904 \uc774\uc0c1\uc758 \ucf54\ub4dc\ub97c \uccd0 \ub123\uc744 \uac83\uc774\ub2e4. \uc18c\ud589\uc131 \ud558\ub098 \ud558\ub098\ub97c \uc2dc\uc2a4\ud15c \uc0c1\uc5d0\uc11c \uacc4\uc0b0\ud558\uc5ec \ub9e4\ubc88 \uc18c\ud589\uc131\uc744 \uadf8\ub824\ub0b4\ub294 \uac83\uc740 \ube44\ud6a8\uc728\uc801\uc774\ub2e4. \uc18c\ud589\uc131\uc774 \ubcf5\uc7a1\ud558\uba74 \ubcf5\uc7a1\ud560 \uc218\ub85d \uadf8 \ud6a8\uc728\uc740 \uadf9\uc801\uc73c\ub85c \ub5a8\uc5b4\uc9c0\uac8c \ub41c\ub2e4. <\/P><P>\uadf8\ub807\ub2e4\uba74 \uadf8 \ud574\uacb0\ucc45\uc740 \ubb34\uc5c7\uc778\uac00? \ubc14\ub85c Display Lists\uc774\ub2e4. Display List\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368, \uc18c\ud589\uc131\uc744 \ub2e8 \ud55c\ubc88\ub9cc \ub9cc\ub4e4\uae30\ub9cc \ud558\uba74 \ub41c\ub2e4. \uc5ec\uae30\uc5d0 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ud560 \uc218\ub3c4 \uc788\uace0 \uc0c9\uc744 \uc785\ud78c\ub2e4\uac70\ub098 \uc6d0\ud558\ub294 \ubaa8\ub4e0 \uac83\ub4e4\uc744 \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc774 Display List\uc5d0 \uc774\ub984\uc744 \ubd80\uc5ec\ud560 \uc218 \uc788\ub294\ub370, \uc608\ub97c \ub4e4\uc5b4 \uc18c\ud589\uc131\uc758 Display List\ub85c \uc0dd\uc131\uc744 \ud558\uace0 \uc774\ub984\uc744 &#8216;Asteroid&#8217;\ub77c\uace0 \ud55c\ud6c4\uc5d0 \ub098\uc911\uc5d0 \uc18c\ud589\uc131\uc774 \ud544\uc694\ud560\ub54c \ub9c8\ub2e4 \ub2e8\uc9c0 \uc774\ubbf8 \uc815\ud574\ub454 \uc774\ub984\uc778 &#8216;Asteroid&#8217;\ub85c\uc368 Display List\ub97c \ud638\ucd9c\ud558\uae30\ub9cc \ud558\uba74 \ub41c\ub2e4. \uc989, \uc55e\uc73c\ub85c \uc18c\ud589\uc131\uc744 \uadf8\ub9ac\uace0\uc790 \ud55c\ub2e4\uba74 \ub2e8\uc9c0 \ub2e8 \ud55c\uc904\uc758 \ucf54\ub4dc\uc778 glCallList(asteroid)\ub97c \ud638\ucd9c\ud558\uae30\ub9cc \ud558\uba74 \ub41c\ub2e4. \uc774\ubbf8 \ub9cc\ub4e4\uc5b4\uc9c4 \uc18c\ud589\uc131\uc740 \uc989\uc2dc \ud654\uba74\uc5d0 \ub098\ud0c0\ub098\uac8c \ub41c\ub2e4. \uc18c\ud589\uc131\uc740 \uc774\ubbf8 Display List\uc5d0\uc11c \ubaa8\ub4e0 \uacc4\uc0b0\uc774 \uc774\ub8e8\uc5b4\uc838 \uc0dd\uc131\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 OpenGL\uc740 \ub2e4\uc2dc \uc18c\ud589\uc131\uc744 \uadf8\ub9ac\uae30 \uc704\ud574 \uacc4\uc0b0\ud560 \ud544\uc694\uac00 \uc5c6\uc5b4\uc9c4\ub2e4. \uc774\uac83\uc740 \uba54\ubaa8\ub9ac \uc0c1\uc5d0 \uc774\ubbf8 \uacc4\uc0b0\uc758 \uacb0\uacfc\ub97c \uc800\uc7a5\ud574 \ub193\uc558\uae30 \ub54c\ubb38\uc774\ub2e4. \uc774\uac83\uc774 \ubc14\ub85c \uc65c Dislpay List\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368 \uc18d\ub3c4\uac00 \uadf9\uc801\uc73c\ub85c \ud5a5\uc0c1\ub418\ub294\uc9c0\ud558\ub294\uc9c0\uc5d0 \ub300\ud55c \ud574\ub2f5\ub2c8\ub2e4.<\/P><P>\uc774\uc81c Display List\uc5d0 \ub300\ud574 \ubc30\uc6cc\ubcfc \ub9c8\uc74c\uc774 \uc0dd\uae30\ub294\uac00? \ud83d\ude42 \uc6b0\ub9ac\ub294 \uc55e\uc73c\ub85c Q-Bert Display List \ub370\ubaa8 \ud504\ub85c\uadf8\ub7a8\uc744 \ub9cc\ub4e4\uc5b4 \ubcfc \uac83\uc774\ub2e4. \ud654\uba74\uc0c1\uc5d0 15\uac1c\uc758 \ud050\ube0c\ub97c \uc62c\ub824 \ub193\uc544 \ubcf4\ub294 \ub370\ubaa8\uc774\ub2e4. \uac01\uac01\uc758 \ud050\ube0c\ub294 BOX\uc640 TOP\uc73c\ub85c \uad6c\uc131\ub418\uc838 \uc788\ub2e4. TOP\uc740 \ubcc4\ub3c4\uc758 Display List\ub85c\uc11c \ub9cc\ub4e4\uc5b4\uc9c8 \uac83\uc778\ub370 \uc774\uac83\uc740 \uc774 \uac83\uc5d0 \uc880\ub354 \uc5b4\ub450\uc6b4 \uc0c9\uc73c\ub85c \uc5f0\ucd9c\ud558\uace0\uc790 \ud568\uc774\ub2e4. BOX\ub294 \uc717\uba74\uc774 \uc5c6\ub294 \ud050\ube0c\uc774\ub2e4.<\/P><P>\uc774 \ucf54\ub4dc\ub294 \uac15\uc88c 6\uc758 \uac83\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \ubb34\uc5c7\uc744 \uc804\ub2ec\ud558\uace0\uc790 \ud558\ub294\uc9c0\ub97c \uc27d\uac8c \ud558\uae30 \uc704\ud574 \ud504\ub85c\uadf8\ub7a8\uc744 \uac70\uc758 \uc804\uccb4\uc801\uc73c\ub85c \ub2e4\uc2dc \uc791\uc131\ud560 \uac83\uc774\ub2e4. \ub2e4\uc74c\uc758 \ucf54\ub4dc \ub77c\uc778\uc740 \ub300\ubd80\ubd84\uc758 \uac15\uc88c\uc5d0\uc11c\uc758 \ud45c\uc900 \ucf54\ub4dc\ub4e4\uc774\ub2e4. (\uc5ed\uc790\uc8fc: \uac15\uc88c 6\uc758 \uc18c\uc2a4 \ucf54\ub4dc\ub97c \uc77c\ub2e8 \ub2e4\uc6b4 \ub85c\ub4dc \ubc1b\uc544 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4. \ub2e8\uc9c0 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \ub2e4\ub8ec \uac83\uc774\ub2e4.)<\/P><\/p>\n<pre>#include  \/\/ Header File For Windows\r\n#include  \/\/ Header File For Standard Input\/Output \r\n#include  \/\/ Header File For The OpenGL32 Library\r\n#include  \/\/ Header File For The GLu32 Library \r\n#include  \/\/ Header File For The GLaux Library\r\n\r\nHDC hDC=NULL; \/\/ Private GDI Device Context \r\nHGLRC hRC=NULL; \/\/ Permanent Rendering Context\r\nHWND hWnd=NULL; \/\/ Holds Our Window Handle \r\nHINSTANCE hInstance; \/\/ Holds The Instance Of The Application\r\nbool keys[256]; \/\/ Array Used For The Keyboard Routine \r\nbool active=TRUE; \/\/ Window Active Flag Set To TRUE By Default \r\nbool fullscreen=TRUE; \/\/ Fullscreen Flag Set To Fullscreen Mode By Default <\/pre>\n<p>\uc774\uc81c, \uc55e\uc73c\ub85c \uc0ac\uc6a9\ud560 \ubcc0\uc218\ub97c \uc120\uc5b8\ud574 \ubcf4\uc790. \uba3c\uc800 \ud558\ub098\uc758 \ud14d\uc2a4\uccd0\ub97c \uc800\uc7a5\ud558\uae30 \uc704\ud55c \ubcc0\uc218\ub97c \uc120\uc5b8\ud558\uace0 \uc55e\uc5d0\uc11c \uc5b8\uae09\ud55c 2\uac1c\uc758 Display List\ub97c \uc704\ud55c \ubcc0\uc218 2\uac1c\ub97c \uc120\uc5b8\ud558\uc790. \uc774\ub7ec\ud55c \ubcc0\uc218\ub294 Display List\uac00 \ub7a8\uc5d0\uc11c \uc5b4\ub514\uc5d0 \uc800\uc7a5\ub418\uc5b4 \uc788\ub294\uac00 \ud558\ub294 \uc9c0\uc2dc\uc790\ub85c\uc368\uc758 \ud589\ub3d9\ud55c\ub2e4. \uc774 2\uac1c\uc758 Display List\ub97c BOX\uc640 TOP\uc774\ub77c \ubd80\ub97c \uac83\uc774\ub2e4.<br \/>\n<P>2\uac1c\uc758 \ubcc0\uc218\ub97c \uc120\uc5b8\ud55c \ud6c4\uc5d0 xloop\uc640 yloop\ub77c\ub294 \ubcc0\uc218\ub97c \uc120\uc5b8\ud558\ub294\ub370 \uc774\uac83\uc740 \ud654\uba74\uc0c1\uc758 \ud050\ube0c\ub97c \uc704\uce58\uc2dc\ud0a4\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \ub610 xrot\uc640 yrot\ub77c\ub294 2\uac1c\uc758 \ubcc0\uc218\ub97c \uc120\uc5b8\ud558\ub294\ub370 \uc774\uac83\uc740 x\uc640 y\ucd95\uc73c\ub85c \ud050\ube0c\ub4e4\uc744 \ud68c\uc804\uc2dc\ud0a4\ub294\ub370 \uc0ac\uc6a9\ub418\ub294 \ubcc0\uc218\ub4e4\uc774\ub2e4.<\/P><\/p>\n<pre>GLuint texture[1]; \/\/ Storage For One Texture \r\nGLuint box; \/\/ Storage For The Display List \r\nGLuint top; \/\/ Storage For The Second Display List \r\nGLuint xloop; \/\/ Loop For X Axis \r\nGLuint yloop; \/\/ Loop For Y Axis \r\nGLfloat xrot; \/\/ Rotates Cube On The X Axis \r\nGLfloat yrot; \/\/ Rotates Cube On The Y Axis <\/pre>\n<p>\ub2e4\uc74c\uc5d0 \uc6b0\ub9ac\ub294 2\uac1c\uc758 \uc0c9\uc0c1 \ubc30\uc5f4\uc744 \uc0dd\uc131\ud55c\ub2e4. \uccab\ubc88\uc9f8\uc758 boxcol\uc740 \ubc1d\uc740 \uacc4\uc5f4\uc758 \uc0c9\uc0c1\ub4e4\ub85c \ube68\uac04\uc0c9, \uc624\ub79c\uc9c0\uc0c9, \ucd08\ub85d\uc0c9 \uadf8\ub9ac\uace0 \ud30c\ub780\uc0c9\uc758 \uc0c9\uc0c1\uac12\uc744 \uc800\uc7a5\ud55c\ub2e4. {}\uc548\uc5d0 \uc9c0\uc815\ub41c \uac01\uac01\uc758 \uac12\uc740 Red, Green Blue \uac12\uc744 \ub098\ud0c0\ub0b8\ub2e4. \uac01\uac01\uc758 {}\uc758 \uad6c\ub8f9\uc740 \uc9c0\uc815\ub41c \uc0c9\uc774\ub2e4.<BR>\ub450\ubc88\uc9f8 \uc0c9\uc0c1\uc758 \ubc30\uc5f4\uc740 \uc5b4\ub450\uc6b4 \uacc4\uc5f4\uc758 \uc0c9\uc0c1\ub4e4\ub85c \ube68\uac04\uc0c9, \uc624\ub79c\uc9c0\uc0c9, \ucd08\ub85d\uc0c9 \uadf8\ub9ac\uace0 \ud30c\ub780\uc0c9\uc744 \uc704\ud55c \uac83\uc774\ub2e4. \uc5b4\ub450\uc6b4 \uc0c9\ub4e4\uc740 \ubc15\uc2a4\uc758 \uc717\uba74\uc744 \ub098\ud0c0\ub0b4\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \uc6b0\ub9ac\ub294 \ubc15\uc2a4\uc758 \ub098\uba38\uc9c0 \ubd80\ubd84\ubcf4\ub2e4 \ubc15\uc2a4\uc758 \ub69c\uaed1\uc744 \uc880\ub354 \uc5b4\ub461\uac8c \ud558\uace0\uc790 \ud55c\ub2e4.<\/p>\n<pre>static GLfloat boxcol[5][3]= \/\/ Array For Box Colors \r\n {\/\/ Bright: Red, Orange, Yellow, Green, Blue \r\n {1.0f,0.0f,0.0f},\r\n {1.0f,0.5f,0.0f},\r\n {1.0f,1.0f,0.0f},\r\n {0.0f,1.0f,0.0f},\r\n {0.0f,1.0f,1.0f}}; \r\n   \r\nstatic GLfloat topcol[5][3]= \/\/ Array For Top Colors \r\n { \/\/ Dark: Red, Orange, Yellow, Green, Blue \r\n {.5f,0.0f,0.0f},\r\n {0.5f,0.25f,0.0f},\r\n {0.5f,0.5f,0.0f},\r\n {0.0f,0.5f,0.0f},\r\n {0.0f,0.5f,0.5f}}; \r\n  \/\/ Declaration For WndProc\r\n LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   <\/pre>\n<p><BR>\uc774\uc81c \uc2e4\uc81c Display List\ub97c \ub9cc\ub4e4\uc5b4 \ubcf8\ub2e4. \uc774\ubbf8 \uc9d0\uc791\ud588\uaca0\uc9c0\ub9cc, \ubc15\uc2a4\ub97c \ub9cc\ub4e4\uae30 \uc704\ud55c \ubaa8\ub4e0 \ucf54\ub4dc\ub294 \uccab\ubc88\uc9f8 List\ub85c \ud558\uace0 \ub69c\uaed1\uc73c\ub85c \uc0ac\uc6a9\ud560 \ubc15\uc2a4\uc758 Top\uc740 \ub2e4\ub978 List\uc5d0 \ub4e4\uc5b4\uac00\uac8c \ub41c\ub2e4. \ub2e4\uc74c \uc808\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc124\uba85\ud558\ub3c4\ub85d \ud558\uaca0\ub2e4.<\/p>\n<pre>GLvoid BuildLists() \/\/ Build Box Display List \r\n{ <\/pre>\n<p>\uc6b0\ub9ac\ub294 OpenGL\uc5d0\uac8c \uc6b0\ub9ac\uac00 2\uac1c\uc758 List\ub97c \ud544\uc694\ub85c \ud55c\ub2e4\uace0 \uc54c\ub9ac\ub294 \uac83\uc73c\ub85c \uc2dc\uc791\ud55c\ub2e4. glGenLists(2)\ub294 \ub450\uac1c\uc758 List\ub97c \uc704\ud55c \uacf5\uac04\uc744 \uc0dd\uc131\ud558\uace0 \uccab\ubc88\uc7ac List\ub97c \uac00\ub974\ud0a4\ub294 \ud3ec\uc778\ud130\ub97c \ubc18\ud658\ud55c\ub2e4. box\uac00 \uccab\ubc88\uc9f8 List\uc758 \uc704\uce58\ub97c \uac00\uc9c0\uac8c \ub41c\ub2e4. \uc5b8\uc81c\ub4e0\uc9c0 box\ub97c \ud638\ucd9c\ud55c\ub2e4\uba74 \uccab\ubc88\uc9f8 list\uc5d0 \ub2f4\uae34 \ubb3c\uccb4\uac00 \uadf8\ub824\uc9c0\uac8c \ub41c\ub2e4.<\/p>\n<pre>    box=glGenLists(2); \/\/ Building Two Lists <\/pre>\n<p>List\ub97c \uc704\ud55c \uacf5\uac04\uc744 \ub9c8\ub828\ud588\uc73c\ubbc0\ub85c \uc2e4\uc81c List\ub97c \uc0dd\uc131\ud574 \ubcf4\uc790. \uc6b0\ub9ac\ub294 \uc774\ubbf8 \ub450\uac1c\uc758 List\ub97c \uc704\ud55c \uba54\ubaa8\ub9ac \uacf5\uac04\uc744 \ub9c8\ub828\ud588\uace0 box\uac00 \uccab\ubc88\uc9f8 list\ub97c \uc800\uc7a5\ud558\ub294 \uacf5\uac04\uc744 \uac00\ub974\ud0a8\ub2e4\ub294 \uac83\uc744 \uc54c\uace0 \uc788\ub2e4. \uc774\uc81c OpenGL\uc5d0\uac8c \uc54c\ub824\ud560 \ubaa8\ub4e0 \uac83\uc740 \ub9ac\uc2a4\ub4dc\uac00 \uc5b4\ub514\ub85c \uac00\uc57c\ud558\uba70 \ub9cc\ub4e4\uc5b4\uc9c8 \ub9ac\uc2a4\ud2b8\uac00 \uc5b4\ub5a4 \ud0c0\uc785\uc778\uac00 \ud558\ub294 \uac83\ub4e4\uc774\ub2e4.<br \/>\n<P>\uc791\uc5c5\uc744 \ud558\uae30 \uc704\ud574 glNewList() \uba85\ub839\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \uc6b0\ub9ac\ub294 \uccab\ubc88\uc9f8 \uc778\uc790\uac00 box\ub77c\ub294 \uac83\uc744 \uc54c\uac8c \ub420 \uac83\uc774\ub2e4. \uc774\uac83\uc740 box\uac00 \uac00\ub974\ud0a4\uace0 \uc788\ub294 \uba54\ubaa8\ub9ac\uc758 \uc704\uce58\uc5d0 \ub9ac\uc2a4\ud2b8\uac00 \uc800\uc7a5\ub418\uc5b4\uc838 \uc788\ub2e4\uace0 openGL\uc5d0\uac8c \uc54c\ub9ac\ub294 \uac83\uc774\ub2e4. \ub450\ubc88\uc9f8 \uc778\uc790\uc778 GL_COMPILE\ub294 OpenGL\uc5d0\uac8c \uc6b0\ub9ac\uac00 \uba54\ubaa8\ub9ac \uc0c1\uc5d0 \ubaa8\ub4e0 \uacc4\uc0b0\uc744 \ubbf8\ub9ac \ud574 \ub193\uc73c\ub77c\ub294 \uc9c0\uc2dc\uc778\ub370 \uc774\ub807\uac8c \ud568\uc73c\ub85c\uc368 \ub098\uc911\uc5d0 \ub2e4\uc2dc \ubd88\ud53c\uc694\ud55c \uc7ac\uacc4\uc0b0\uc744 \ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub3c4\ub85d \ud558\ub294 \uac83\uc774\ub2e4.<\/P><br \/>\n<P>GL_COMPILE\uc740 \ud504\ub85c\uadf8\ub798\ubc0d\uacfc \uc720\uc0ac\ud558\ub2e4. \ud504\ub85c\uadf8\ub7a8\uc744 \uc791\uc131\ud55c\ub2e4\uba74 \ucef4\ud30c\uc77c\ub7ec\uc5d0 \uc801\uc7ac\ud574\uc57c \ud55c\ub2e4. \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c \ub9e4\ubc88 \ucef4\ud30c\uc77c\uc744 \ud574\uc57c \ud55c\ub2e4. \ucf54\ub4dc\uac00 \uc774\ubbf8 \uc2e4\ud589\ud30c\uc77c \ud615\ud0dc\ub85c \ucef4\ud30c\uc77c \ub418\uc5b4\uc788\ub2e4\uba74 \uc774\ud6c4\ubd80\ud130 \ucef4\ud30c\uc77c \ud560 \ud544\uc694\uc5c6\uc774 \uc2e4\ud589\ud30c\uc77c\ub9cc\uc744 \ud074\ub9ad\ud558\uc5ec \uc2e4\ud589\ud558\uae30\ub9cc \ud558\uba74 \ub41c\ub2e4. \ucef4\ud30c\uc77c\uc774 \ud544\uc694\uc5c6\ub294 \uac83\uc774\ub2e4. \uc77c\ub2e8 GL\uc774 display list\ub97c \ucef4\ud30c\uc77c\ud588\ub2e4\uba74 \uc774\ubbf8 \ub80c\ub354\ub9c1 \uc900\ube44\uac00 \ub418\uc5b4\uc9c4 \uac83\uc774\uace0 \ub098\uc911\uc5d0 \ub610 \ucef4\ud30c\uc77c\uc774 \uc694\uad6c\ub418\uc9c0 \uc54a\ub294\ub2e4. \uc774\uac83\uc774 \ubc14\ub85c display list\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368 \uc18d\ub3c4\ub97c \ud5a5\uc0c1\uc2dc\ud0a4\ub294 \uc774\uc720\uc774\ub2e4. <\/P><\/p>\n<pre>    glNewList(box,GL_COMPILE); \/\/ New Compiled box Display List<\/pre>\n<p> <BR>\ucf54\ub4dc\uc758 \ub2e4\uc74c\ubd80\ub294 \ub69c\uaed1(top)\uc774 \uc5c6\ub294 \ubc15\uc2a4\ub97c \uadf8\ub9ac\ub294 \uac83\uc774\ub2e4. \uc774\uac83\uc740 \ud654\uba74\uc0c1\uc5d0 \ub098\ud0c0\ub098\uc9c0 \uc54a\uace0 \ub2e8\uc9c0 display list\uc0c1\uc5d0 \uc800\uc7a5\ub41c\ub2e4.<br \/>\n<P>glNewList()\uc640 glEndList()\uc0ac\uc774\uc5d0 \ub2f9\uc2e0\uc774 \uc6d0\ud558\ub294 \ucf54\ub4dc\ub4e4\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub2e4. \uc0c9\uc0c1\uc744 \uc124\uc815\ud558\uac70\ub098 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ubc14\uafbc\ub2e4\uac70\ub098 \ud558\ub294 \uac83\ub4f1. \ucd94\uac00\ud560 \uc218 \uc5c6\ub294 \uc720\uc77c\ud55c \ucf54\ub4dc\ub294 list\uc5d0 \uc9c0\uc815\ub41c \uac1d\uccb4\uc758 \ud615\ud0dc\ub97c \ubcc0\uacbd\uc2dc\ud0a4\ub294 \ucf54\ub4dc\uc774\ub2e4. \uc77c\ub2e8 list\ub85c \ub9cc\ub4e4\uc5b4\uc9c0\uba74 \ubcc0\uacbd\ud560 \uc218 \uc5c6\ub2e4.<\/P><P>\ub9cc\uc57d glColor3ub(rand()%255, rand()%255, rand()%255)\uc758 \ucf54\ub4dc\ub97c \uc544\ub798\uc5d0 \uc81c\uc2dc\ud55c \ucf54\ub4dc\uc5d0 \ucd94\uac00\ud588\ub2e4\uba74, \uc544\ub9c8\ub3c4 \ub2f9\uc2e0\uc740 \ud654\uba74\uc0c1\uc5d0 \ubb3c\uccb4\uac00 \uadf8\ub824\uc9c0\ub294 \ub54c\ub9c8\ub2e4 \uc774\uac83\uc758 \uc0c9\uc774 \ubc14\ub010\ub2e4\uace0 \uc0dd\uac01\ud560 \uac83\uc774\ub2e4. \uadf8\ub7ec\ub098 \uc774\ubbf8 \ub9ac\uc2a4\ud2b8\ub97c \uc0dd\uc131\ud560\ub54c \uc0c9\uc0c1\uc774 \uc9c0\uc815\ub418\uc84c\uae30 \ub54c\ubb38\uc5d0 \uc0c9\uc740 \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294\ub2e4. (\uc5ed\uc790\uc8fc: \ub9cc\uc57d \ubcc0\uacbd\ud558\uace0\uc790 \ud55c\ub2e4\uba74 list\ub97c \uc0dd\uc131\ud560\ub54c \uc0c9\uc0c1\uc744 \uc9c0\uc815\ud558\ub294 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud574\uc11c\ub294 \uc54a\ub41c\ub2e4)<\/P><\/p>\n<pre>    glBegin(GL_QUADS); \/\/ Start Drawing Quads \r\n    \/\/ Bottom Face \r\n    \/\/ - Top Right Of The Texture and Quad\r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); \r\n    \/\/ - Top Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);\r\n    \/\/ - Bottom Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); \r\n    \/\/ - Bottom Right Of The Texture and Quad    \r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); \r\n   \r\n    \/\/ Front Face \r\n    \/\/ - Bottom Left Of The Texture and Quad\r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); \r\n    \/\/ - Bottom Right Of The Texture and Quad \r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);\r\n    \/\/ - Top Right Of The Texture and Quad \r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);  \r\n    \/\/ - Top Left Of The Texture and Quad    \r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); \r\n    \r\n    \/\/ Back Face \r\n    \/\/ - Bottom Right Of The Texture and Quad\r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);\r\n    \/\/ - Top Right Of The Texture and Quad  \r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); \r\n    \/\/ - Top Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); \r\n    \/\/ - Bottom Left Of The Texture and Quad\r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);  \r\n   \r\n    \/\/ Right face \r\n    \/\/ - Bottom Right Of The Texture and Quad\r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);\r\n    \/\/ - Top Right Of The Texture and Quad   \r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);\r\n    \/\/ - Top Left Of The Texture and Quad  \r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); \r\n    \/\/ - Bottom Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); \r\n   \r\n    \/\/ Left Face \r\n    \/\/ - Bottom Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);\r\n    \/\/ - Bottom Right Of The Texture and Quad \r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);\r\n    \/\/ - Top Right Of The Texture and Quad   \r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); \r\n    \/\/ - Top Left Of The Texture and Quad\r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);  \r\n    glEnd(); \/\/ Done Drawing Quads <\/pre>\n<p>\uc6b0\ub9ac\ub294 List\ub97c \ub2e4 \ub9cc\ub4e4\uc5c8\ub2e4\ub294 \uac83\uc744 OpenGL\uc5d0\uac8c \uc54c\ub9ac\uae30 \uc704\ud574 glEndList() \uba85\ub839\uc744 \ub0b4\ub9b0\ub2e4. glNewList()\uc640 glEndList() \uc0ac\uc774\uc758 \ubd80\ubd84\uc740 Display list\uc758 \ubd80\ubd84\uc774\ub2e4. glNewList() \uc55e\uc758 \ubd80\ubd84\uc774\ub098 glEndList()\uc758 \ub4b7\ubd80\ubd84\uc740 \ud604\uc7ac display list\uc758 \ubd80\ubd84\uacfc\ub294 \uc0c1\uad00\uc5c6\ub294 \ubd80\ubd84\uc774\ub2e4.<\/p>\n<pre>    glEndList(); \/\/ Done Building The box List <\/pre>\n<p>\uc774\uc81c, \ub450\ubc88\uc9f8 Display list\ub97c \ub9cc\ub4e4 \uac83\uc774\ub2e4. \ub450\ubc88\uc9f8 display list\uac00 \uba54\ubaa8\ub9ac\uc5d0 \uc800\uc7a5\ub420 \uacf3\uc744 \ucc3e\uae30 \uc704\ud574 \uc6b0\ub9ac\ub294 \uc608\uc804\uc758 display list(box)\uc5d0 1\uc744 \ucd94\uac00\ud55c\ub2e4. \uc544\ub798\uc758 \ucf54\ub4dc\ub294 \ub450\ubc88\uc9f8 display list\uc758 \uc704\uce58\uc640 \uac19\uc740 &#8216;top&#8217;\uc744 \ub9cc\ub4e4 \uac83\uc774\ub2e4.<\/p>\n<pre>    top=box+1; \/\/ top List Value Is box List Value +1 <\/pre>\n<p>\uc774\uc81c \ub450\ubc88\uc9f8 display list\uc744 \uc800\uc7a5\ud560 \uacf3\uc744 \uc54c\uc558\uc73c\ubbc0\ub85c \ub69c\uaed1\uc5d0 \ub300\ud55c list\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \uccab\ubc88\uc7ac list\ub97c \ub9cc\ub4dc\ub294 \uac19\uc740 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc \uc774\ubc88\uc5d0\ub294 &#8216;box&#8217;\ub300\uc2e0 &#8216;top&#8217;\uc5d0 list\ub97c \uc800\uc7a5\ud55c\ub2e4\uace0 OpenGL\uc5d0\uac8c \uc54c\ub9b0\ub2e4.<\/p>\n<pre>    glNewList(top,GL_COMPILE); \/\/ New Compiled top Display List<\/pre>\n<p>\ub2e4\uc74c \ucf54\ub4dc\ub294 \ub2e8\uc9c0 \ubc15\uc2a4\uc758 \uaf2d\ub300\uae30\ub97c \uadf8\ub824\uc8fc\ub294 \uac83\uc774\ub2e4. Z \ud3c9\uba74 \uc0c1\uc758 \uac04\ub2e8\ud55c \uc0ac\uac01\ud615\uc774\ub2e4.<\/p>\n<pre>    glBegin(GL_QUADS); \/\/ Start Drawing Quad \r\n    \/\/ Top Face \r\n    \/\/ - Top Left Of The Texture and Quad \r\n    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);\r\n    \/\/ - Bottom Left Of The    Texture and Quad \r\n    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); \r\n    \/\/ - Bottom Right Of    The Texture and Quad \r\n    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);  \r\n    \/\/ - Top Right Of The    Texture and Quad \r\n    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); \r\n    glEnd(); \/\/ Done Drawing Quad <\/pre>\n<p>\ub2e4\uc2dc \uc6b0\ub9ac\ub294 OpenGL\uc5d0\uac8c \ub450\ubc88\uc9f8 list\ub97c \uc0dd\uc131\ud588\ub2e4\uace0 glEndList() \uba85\ub839\uc744 \uc774\uc6a9\ud574 \uc54c\ub9b0\ub2e4. \ubc14\ub85c \uc544\ub798\ucc98\ub7fc. \uc6b0\ub9ac\ub294 \uc131\uacf5\uc801\uc73c\ub85c 2\uac1c\uc758 display list\ub97c \uc0dd\uc131\ud588\ub2e4. <\/p>\n<pre>    glEndList(); \/\/ Done Building The top Display List \r\n}<\/pre>\n<p>\ube44\ud2b8\ub9f5\/\ud14d\uc2a4\uccd0\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\ub294 \uc774\uc804\uc5d0 \uac15\uc88c\uc758 \ube44\ud2b8\ub9f5\uc744 \ub85c\ub529\ud558\uace0 \ud14d\uc2a4\uccd0\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\uc640 \uac19\ub2e4. (\uc5ed\uc790\uc8fc: Dip2K\uc758 \ud29c\ud130\ub9ac\uc5bc\ub3c4 NeHe\uc758 \ud14d\uc2a4\uccd0 \ub9f5\ud551 \ubc29\ubc95\uacfc \ub3d9\uc77c\ud558\ub2e4. \uc6b0\ub9ac\ub294 \uac01\uac01\uc758 \ud050\ube0c\uc758 \ubaa8\ub4e0 6\uba74 \uc0c1\uc5d0 \ub9f5\ud551\ud560 \ud14d\uc2a4\uccd0\ub97c \uc6d0\ud55c\ub2e4.\uc880\ub354 \ubd80\ub4dc\ub7ec\uc6b4 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \uc704\ud574 Mipmapping\uc744 \uc0ac\uc6a9\ud558\uace0\uc790 \ud55c\ub2e4. \ud544\uc790\ub294 \ud53d\uc140\uc744 \ubcf4\ub294 \uac83\uc744 \ubb34\ucc99 \uc2eb\uc5b4\ud55c\ub2e4. (\uc5ed\uc790\uc8fc: \ud53d\uc140\uc744 \ubcf8\ub2e4\ub294 \uac83\uc740 \uc54c\ub9ac\uc544\uc2f1 \ud604\uc0c1\uc744 \uc758\ubbf8\ud55c\ub2e4) &#8216;cube.bmp&#8217;\ub77c\ub294 \ube44\ud2b8\ub9f5\uc744 \ub85c\ub529\ud55c\ub2e4. data \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc774 \ube44\ud2b8\ub9f5 \ud30c\uc77c\uc774 \uc704\uce58\ud55c\ub2e4. LoadBMP \ud568\uc218\ub97c \ucc3e\uc544\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ud55c\ub2e4.<\/p>\n<pre>if (TextureImage[0]=LoadBMP(\"Data\/Cube.bmp\")) \/\/ Load The Bitmap <\/pre>\n<p>\ud3fc\uc758 \ud06c\uae30\uac00 \uc7ac\uc870\uc815\ub420\ub54c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\uc758 \ucf54\ub4dc\ub294 \uac15\uc88c 6\uc758 \ucf54\ub4dc\uc640 \ub3d9\uc77c\ud558\ub2e4.<br \/>\n<P>init \ucf54\ub4dc\ub294 \uc57d\uac04\uc758 \uc218\uc815\ub9cc\uc774 \ud544\uc694\ud558\ub2e4. BuildList() \ucf54\ub4dc\ub97c \ucd94\uac00\ud55c\ub2e4. \uc774\uac83\uc740 \uc55e\uc5d0\uc11c display list\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\ub97c \ub2f4\uace0 \uc788\ub2e4. LoadGLTextures()\ud568\uc218 \uc774\ud6c4\uc5d0 BuildList() \ub97c \ud638\ucd9c\ud55c\ub2e4\ub294 \uac83\uc5d0 \uc8fc\uc758\ud574\uc57c \ud55c\ub2e4. \uc774\uac83\uc740 BuildList() \ud568\uc218\uc5d0\uc11c \ud14d\uc2a4\ucc98\ub97c \ud544\uc694\ub85c \ud558\ubbc0\ub85c \uba3c\uc800 \ud14d\uc2a4\uccd0\ub97c \uc0dd\uc131\ud574\uc57c \ud55c\ub2e4\ub294 \uac83\uc774\ub2e4. <\/P><\/p>\n<pre>int InitGL(GLvoid) \/\/ All Setup For OpenGL Goes Here \r\n{ \r\n    if (!LoadGLTextures()) \/\/ Jump To Texture Loading Routine \r\n    { \r\n        return FALSE; \/\/ If Texture Didn't Load Return FALSE \r\n    } \r\n\r\n    BuildLists(); \/\/ Jump To The Code That Creates Our Display Lists \r\n    glEnable(GL_TEXTURE_2D); \/\/ Enable Texture Mapping \r\n    glShadeModel(GL_SMOOTH); \/\/ Enable Smooth Shading \r\n    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); \/\/ Black Background \r\n    glClearDepth(1.0f); \/\/ Depth Buffer Setup \r\n    glEnable(GL_DEPTH_TEST); \/\/ Enables Depth Testing \r\n    glDepthFunc(GL_LEQUAL); \/\/ The Type Of Depth Testing To Do <\/pre>\n<p>\ub2e4\uc74c\uc758 \uc138\uc904\uc758 \ucf54\ub4dc\ub294 quick &amp; dirty \ube5b\uc744 \ud65c\uc131\ud654 \ud558\ub294 \uac83\uc774\ub2e4. (\uc5ed\uc790\uc8fc: quick &amp; dirty \uad11\uc6d0\uc740 \ube44\ub514\uc624 \uce74\ub4dc\uc5d0 \uae30\ubcf8\uc801\uc73c\ub85c \uc124\uc815\ub41c \uad11\uc6d0\uc774\ub2e4) Light0\ub294 \ub300\ubd80\ubd84\uc758 \ube44\ub514\uc624 \uce74\ub4dc\uc5d0 \ubbf8\ub9ac \uc815\uc758\ub41c \uac83\uc774\ub2e4. light0\uc744 \ud65c\uc131\ud654 \ud568\uc73c\ub85c\uc368 \ube5b\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \ub9cc\uc57d \ub3c5\uc790\uc758 \ube44\ub514\uc624 \uce74\ub4dc\uc5d0\uc11c light0\uac00 \uc791\ub3d9\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74(\ud654\uba74\uc5d0 \ub9c8\ub0e5 \uac80\ub2e4\uba74) \uadf8\ub0e5 \uad11\uc6d0\uc744 \uaebc\ub77c.<\/P<P>\ub9c8\uc9c0\ub9c9 \ub77c\uc778\uc778 GL_COLOR_MATRIAL\uc740 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc5d0 \uc0c9\uc744 \ucd94\uac00\ud558\ub3c4\ub85d \ud574 \uc900\ub2e4. \uc774 \uc7ac\uc9c8\uc758 \uceec\ub7ec\ub9c1\uc744 \uac00\ub2a5\ud558\uc9c0 \uc54a\uac8c \ud55c\ub2e4\uba74, \ud14d\uc2a4\uccd0\ub294 \ud56d\uc0c1 \uc6d0\ub798\uc758 \uc0c9\uc0c1\uc73c\ub85c \ub098\ud0c0\ub09c\ub2e4. \uc989 glColor3f(r,g,b)\uac00 \uc544\ubb34\ub7f0 \ud6a8\uacfc\ub97c \ub0b4\uc9c0 \ubabb\ud55c\ub2e4. \uadf8\ub798\uc11c \uc774\uac83\uc744 \uac00\ub2a5\ud558\uac8c \ud574\uc8fc\ub294 \uac83\uc774 \uc911\uc694\ud558\ub2e4.<\/p>\n<pre>    glEnable(GL_LIGHT0); \/\/ Quick And Dirty Lighting (Assumes Light0 Is Set Up)    \r\n    glEnable(GL_LIGHTING); \/\/ Enable Lighting \r\n    glEnable(GL_COLOR_MATERIAL); \/\/ Enable Material Coloring <\/pre>\n<p>\ucd5c\uc885\uc801\uc73c\ub85c \uba4b\uc9c0\uac8c \ubcf4\uc774\ub3c4\ub85d \ud558\uae30 \uc704\ud574\uc11c \ud22c\uc601\uc5d0 \ub300\ud55c \ud78c\ud2b8\ub97c GL\uc5d0\uac8c \uc81c\uacf5\ud558\uace0 \ucd08\uae30\ud654\uac00 \uc798\ub418\uc5c8\uc74c\uc744 \uc54c\ub9ac\uae30 \uc704\ud574 TRUE\ub97c \ubc18\ud658\ud55c\ub2e4.<\/p>\n<pre>    \/\/ Nice Perspective Correction \r\n    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); \r\n   \r\n    return TRUE; \/\/ Initialization Went OK <\/pre>\n<p><BR>\uc774\uc81c \uadf8\ub824\uc8fc\ub294 \ucf54\ub4dc\uc5d0 \ub300\ud55c \uac83\uc774\ub2e4. \uc77c\ub2e8 \ud654\uba74\uacfc Depth Buffer\ub97c \uccad\uc18c\ud558\ub294 \uc77c\ubd80\ud130 \uc2dc\uc791\ud55c\ub2e4.<br \/>\n<P>\uadf8 \ub2e4\uc74c\uc5d0 \ud050\ube0c\uc5d0 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ubc14\uc778\ub4dc\ud55c\ub2e4. Display list \uc548\uc5d0 \uc774 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ucd94\uac00\ud560 \uc218 \uc788\uc5c8\uc73c\ub098 \uadf8 \ubc16\uc73c\ub85c \ube7c \ub193\uc558\ub2e4. \uc774\uac83\uc73c\ub85c\uc368 \uc6d0\ud55c\ub2e4\uba74 \uc5b8\uc81c\ub4e0 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\ub294 \uac83\uc774\ub2e4. (\uc5ed\uc790\uc8fc: \uc774\ubbf8 \uc55e\uc5d0\uc11c \uc5b8\uae09\ud55c\ub300\ub85c List\ub97c \ub9cc\ub4e4\ub54c \uc0c9\uc0c1\uc774\ub77c\ub4e0\uc9c0 \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \uc9c0\uc815\ud558\uba74 \ub098\uc911\uc5d0 \uadf8 List\uc758 \uac1d\uccb4\uc758 \uc0c9\uc0c1, \ud14d\uc2a4\uccd0 \ub9f5\ud551\uc744 \ubcc0\uacbd\ud560 \uc218 \uc5c6\ub2e4)<\/P><\/p>\n<pre>int DrawGLScene(GLvoid) \/\/ Here's Where We Do All The Drawing \r\n{ \r\n    \/\/ Clear The Screen And The Depth Buffer\r\n    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      \r\n    glBindTexture(GL_TEXTURE_2D, texture[0]); \/\/ Select The Texture   <\/pre>\n<p>\uc774\uc81c \uc7ac\ubbf8\uc788\ub294 \uac83\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uc790. yloop\ub77c \ubd88\ub9ac\ub294 \ubc18\ubcf5\ubb38\uc774 \uc788\ub2e4. \uc774 \ubc18\ubcf5\ubb38\uc740 \ud050\ube0c\ub4e4\uc758 Y \ucd95\uc0c1(\uc704\uc5d0\uc11c \uc544\ub798)\uc5d0 \uc704\uce58\uc2dc\ud0a4\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \uc704\uc5d0\uc11c \uc544\ub798\ub85c 5\uac1c\uc758 \ud050\ube0c\ub97c \uc6d0\ud558\ubbc0\ub85c 6\ubcf4\ub2e4 \ud558\ub098 \uc791\uc740 \ubc18\ubcf5\uc744 \ud55c\ub2e4(\uc989, \ub2e4\uc12f\ubc88)<\/p>\n<pre>for (yloop=1;yloop<6;yloop++) \/\/ Loop Through The Y Plane \r\n{ <\/pre>\n<p>xloop\ub77c\ub294 \ub2e4\ub978 \ubc18\ubcf5\ubb38\uc774 \uc788\ub2e4. \uc774\uac83\uc740 X \ucd95\uc0c1(\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd)\uc5d0 \ud050\ube0c\ub4e4\uc744 \uc704\uce58\uc2dc\ud0a4\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c \uadf8\ub9ac\uace0\uc790 \ud558\ub294 \ud050\ube0c\ub294 \uc815\ud574\uc838 \uc788\uc9c0 \uc54a\ub2e4. \ub9cc\uc57d \uac00\uc7a5 \uc704\ucabd\uc758 \uc904\uc774\ub77c\uba74 xloop\ub294 0\uc5d0\uc11c 1\uae4c\uc9c0\uc758 xloop \ubc18\ubcf5\uc774\uba74 \ub41c\ub2e4. \uadf8\ub9ac\uace0 \uadf8 \ub2e4\uc74c \uc904\uc758 xloop\ub294 0\uc5d0\uc11c 2\uac00 \ub420\uac83\uc774\ub2e4(\uc989, 2\uac1c\uc758 \ud050\ube0c\uac00 \uadf8\ub824\uc838\uc57c \ud55c\ub2e4) (\uc5ed\uc790\uc8fc: \uacc4\uc18d \ud558\ub098\uc529 \uc99d\uac00\ud55c\ub2e4, \uc2e4\uc81c \uacb0\uacfc \ud504\ub85c\uadf8\ub7a8\uc744 \uc2e4\ud589\ud558\uc5ec \uc0b4\ud3b4\ubcf4\uba74 \ud655\uc2e4\ud788 \uc54c\uc218\uc788\ub2e4)<\/p>\n<pre>    \/\/ Loop Through The X Plane\r\n    for (xloop=0;xloop    { <\/pre>\n<p>glLoadIdentity()\ub97c \ud638\ucd9c\ud568\uc73c\ub85c\uc368 View\ub97c \ucd08\uae30\ud654\ud55c\ub2e4.<\/p>\n<pre>            glLoadIdentity(); \/\/ Reset The View  <\/pre>\n<p>\ub2e4\uc74c\uc740 \ud654\uba74\uc0c1\uc758 \uc9c0\uc815\ub41c \uc9c0\uc810\uc73c\ub85c \uc774\ub3d9\uc2dc\ud0a4\ub294 \ucf54\ub4dc\uc774\ub2e4. \uc774\uac83\uc740 \ub2e4\uc18c \ud5e4\uae54\ub9ac\uc9c0\ub9cc \uc2e4\uc81c\ub85c\ub294 \uadf8\ub807\uc9c0 \uc54a\ub2e4. X\ucd95 \uc0c1\uc5d0\uc11c, \ub2e4\uc74c\uc758 \ub0b4\uc6a9\uc774 \uc774\ub904\uc9c4\ub2e4 :<br \/>\n<P>\ud050\ube0c\ub4e4\uc774 \ubaa8\uc5ec \uc774\ub904\uc9c4 \ud53c\ub77c\ubbf8\ub4dc\uac00 \ud654\uba74\uc0c1\uc758 \uc911\uc2ec\uc5d0 \ub193\uc5ec\uc9c0\ub3c4\ub85d \uc624\ub978\ucabd\uc73c\ub85c 1.4 \uc720\ub2db\ub9cc\ud07c \uc774\ub3d9\ud55c\ub2e4. \uadf8 \ub2e4\uc74c\uc5d0 xloop\uc5d0 2.8\uc744 \uacf1\ud55c\ud6c4 \ub2e4\uc2dc \uc5ec\uae30\uc5d0 1.4\ub97c \ub354\ud55c\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c yloop*1.4\ub97c \ube80\ub2e4. \uc774\uac83\uc740 \ud050\ube0c\ub4e4\uc744 \uadf8\ub4e4\uc774 \uc704\uce58\ud55c \uc904\uc5d0 \ub530\ub77c \uc67c\ucabd\uc73c\ub85c \uc774\ub3d9\ud558\uac8c \ub41c\ub2e4. <\/P><P>Y\ucd95\uc0c1\uc5d0\uc11c 6\uc5d0\uc11c yloop\ub97c \ube8c\uc73c\ub85c\uc368 \uc544\ub798 \ubc29\ud5a5\uc73c\ub85c \ud53c\ub77c\ubbf8\ub4dc\uac00 \ub9cc\ub4e4\uc5b4\uc9c4\ub2e4. \ub2e4\uc74c\uc5d0 \uadf8 \uacb0\uacfc\uc5d0 2.4\ub97c \uacf1\ud55c\ub2e4. \ud050\ube0c\ub4e4\uc740 y\ucd95 \uc0c1\uc758 \uac01\uac01\uc758 \uaf2d\ub300\uae30 \uc0c1\uc5d0 \ub193\uc5ec\uc9c4\ub2e4. \ub2e4\uc74c\uc5d0 7\uc744 \ube7c\ub294\ub370 \uc774\uac83\uc740 \ud53c\ub77c\ubbf8\ub4dc\uac00 \ud654\uba74\uc758 \uc544\ub798\ucabd\uc5d0\uc11c \uc2dc\uc791\ud558\uace0 \uc708\ucabd\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc9c0\uac8c \ud55c\ub2e4.<\/P><P>\ucd5c\uc885\uc801\uc73c\ub85c Z\ucd95 \uc0c1\uc5d0\uc11c \ud654\uba74 \uc548\ucabd\uc73c\ub85c 20 \uc720\ub2db \uc774\ub3d9\ud55c\ub2e4. \uc774\uac83\uc740 \ud53c\ub77c\ubbf8\ub4dc\ub97c \uba4b\uc9c0\uac8c \ub9cc\ub4e0\ub2e4.<\/P><\/p>\n<pre>    \/\/ Position The Cubes On The Screen \r\n    glTranslatef(1.4f+(float(xloop)*2.8f)-(float(yloop)*1.4f),\r\n        ((6.0f-float(yloop))*2.4f)-7.0f,-20.0f);  <\/pre>\n<p>\uc774\uc81c x\ucd95 \uc0c1\uc73c\ub85c \ud68c\uc804\uc2dc\ucf1c \ubcf4\uc790. \uc6b0\ub9ac\ub294 \ud050\ube0c\ub97c \ubdf0\ucabd\uc73c\ub85c 45\ub3c4\uc5d0\uc11c yloop*2\ub97c \ube80 \uc0c1\ud0dc\ub85c \uae30\uc6b8\uc778\ub2e4.. \ud37c\uc2a4\ud399\ud2f0\ube0c \ubaa8\ub4dc\ub294 \uc790\ub3d9\uc73c\ub85c \ud050\ube0c\ub4e4\uc744 \uae30\uc6b8\uc774\ubbc0\ub85c \uc774 \uae30\uc6b8\uc5b4\uc9d0\uc744 \uc81c\uac70 \ud588\ub2e4. \uc774\uac83\uc740 \ucd5c\uc120\uc740 \uc544\ub2c8\uc9c0\ub9cc \uc6d0\ud558\ub294\ub300\ub85c \uc791\ub3d9\ud55c\ub2e4. \ud83d\ude42<br \/>\n<P>\ucd5c\uc885\uc801\uc73c\ub85c xrot\ub97c \ub354\ud55c\ub2e4. \uc774\uac83\uc740 \ud0a4\ubcf4\ub4dc\ub97c \ud1b5\ud574 \uac01\uc744 \uc870\uc815\ud560 \uc218\uc788\ub3c4\ub85d \ud55c\ub2e4.<\/P><P>x\ucd95\uc73c\ub85c \ud68c\uc804\ud55c\ud6c4\uc5d0 y\ucd95\uc0c1\uc73c\ub85c 45\ub3c4 \ud68c\uc804\ud558\uace0 yrot\uc744 \ub354\ud558\ub294\ub370 \uc774\uac83\uc740 \ud0a4\ubcf4\ub4dc\ub97c \ud1b5\ud574\uc11c yrot\uac12\uc744 \uc870\uc815\ud560 \uc218 \uc788\ub2e4. <\/P><\/p>\n<pre>glRotatef(45.0f-(2.0f*yloop)+xrot,1.0f,0.0f,0.0f); \/\/ Tilt The Cubes Up And Down \r\nglRotatef(45.0f+yrot,0.0f,1.0f,0.0f); \/\/ Spin Cubes Left And Right <\/pre>\n<p>\ub2e4\uc74c\uc5d0 \ud050\ube0c\ub4e4\uc774 \uc704\uce58\ud55c \uc904\uc5d0 \ub530\ub77c \ub2ec\ub9ac \uc0c9\uc0c1\uc744 \uc9c0\uc815\ud55c\ub2e4.<\/p>\n<pre>            glColor3fv(boxcol[yloop-1]); \/\/ Select A Box Color<\/pre>\n<p>\uc774\uc81c \ubc15\uc2a4\uc5d0 \ub300\ud55c List\ub97c \ud638\ucd9c\ud55c\ub2e4. <\/p>\n<pre>            glCallList(box); \/\/ Draw The Box<\/pre>\n<p>\ud050\ube0c\uc758 \uaf2d\ub300\uae30\uc5d0 \ub193\uc5ec\uc9c8 \ub69c\uaed1\uc758 \uc0c9\uc0c1\uc744 \uc9c0\uc815\ud55c\ub2e4.<\/p>\n<pre>            glColor3fv(topcol[yloop-1]); \/\/ Select The Top Color<\/pre>\n<p>\ub69c\uaed1\uc5d0 \ub300\ud55c List\ub97c \ud638\ucd9c\ud558\uace0 \ubaa8\ub4e0\uac83\uc774 \uc798\ub418\uc5c8\uc73c\ubbc0\ub85c TRUE\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/p>\n<pre>            glCallList(top); \/\/ Draw The Top \r\n        } \r\n    } \r\n    return TRUE; \/\/ Jump Back \r\n} <\/pre>\n<p>\uc774\uc81c \ub0a8\uc740 \ucf54\ub4dc\ub4e4\uc740 WinMain \ud568\uc218\uc5d0\uc11c \uc774\ub904\uc9c0\ub294\ub370 \ub2e4\uc74c\uc740 \ud0a4\ubcf4\ub4dc\uc5d0 \ub300\ud574 xrot\uc640 yrot\uc758 \uac12\uc744 \ubcc0\uacbd\ud574 \uc8fc\ub294 \ud0a4\ubcf4\ub4dc \uc785\ub825 \ucc98\ub9ac \ucf54\ub4dc\uc774\ub2e4. SwapBuffer(hDC) \ucf54\ub4dc \ub2e4\uc74c\uc5d0 \ub193\uc5ec\uc9c4\ub2e4.<\/p>\n<pre>SwapBuffers(hDC); \/\/ Swap Buffers (Double Buffering) \r\n\r\nif (keys[VK_LEFT]) \/\/ Left Arrow Being Pressed? \r\n{ \r\n    yrot-=0.2f; \/\/ If So Spin Cubes Left \r\n} \r\n\r\nif (keys[VK_RIGHT]) \/\/ Right Arrow Being Pressed? \r\n{ \r\n    yrot+=0.2f; \/\/ If So Spin Cubes Right \r\n}\r\n\r\nif (keys[VK_UP]) \/\/ Up Arrow Being Pressed? \r\n{ \r\n    xrot-=0.2f; \/\/ If So Tilt Cubes Up \r\n} \r\n\r\nif (keys[VK_DOWN]) \/\/ Down Arrow Being Pressed? \r\n{ \r\n    xrot+=0.2f; \/\/ If So Tilt Cubes Down \r\n} <\/pre>\n<p><\ubcc0\uc5ed \ub05d><br \/>\n<P>\ubcc0\uc5ed\uc744 \uc5ec\uae30\uc11c \ub05d\ub9c8\uce5c\ub2e4. \uc0ac\uc2e4 \uc774 \uac15\uc88c\ub294 Display List\uc5d0 \ub300\ud55c \uc7a5\uc774\ub2e4. Display List\uc5d0 \ub300\ud55c \uc0ac\uc6a9\ubc95\uc774 \uc27d\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\ub2e4. \ud544\uc790\ub294 \uc774 \uac15\uc88c\ub97c \ubc88\uc5ed\ud560\ub54c List\ub97c \uc81c\uc791\ud558\uace0 \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c\ub294 \ucd5c\ub300\ud55c \ubaa8\ub4e0\ub0b4\uc6a9\uc744 \ubc88\uc5ed\ud588\uc9c0\ub9cc \ud6c4\ubc18\ubd80\uc758 \ud050\ube0c\ub97c \ud654\uba74\uc0c1\uc5d0 \ud53c\ub77c\ubbf8\ub4dc \ubaa8\uc591\uc73c\ub85c \uc704\uce58\uc2dc\ud0a4\ub294 \uc138\uc138\ud55c \ub0b4\uc6a9\uc740 \uadf8\ub0e5 \uc220~ \uc220~ \ub118\uae30\uba70 \ubc88\uc5ed\ud588\uc74c\uc744 \uace0\ubc31\ud55c\ub2e4.<\/P><\/p>\n<p style='text-align:center'><a href=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1121813622.zip\"><img width='64' src='\/images\/download.svg' \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774\ubc88\uc7a5\uc5d0\uc11c\ub294 \uc624\ub7ac\ub3d9\uc548 \uae38\uac8c \ub04c\uc5b4\uc628 OpenGL\uc758 \ub80c\ub354\ub9c1 \uc131\ub2a5\uc744 \ud5a5\uc0c1 \uc2dc\ucf1c\uc8fc\ub294 Display List\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uace0\uc790 \ud55c\ub2e4. \uc0ac\uc2e4 \uc774 \ubd80\ubd84\uc744 16\uc7a5\uc5d0 \uc704\uce58\uc2dc\ud0a4\uae30\uc5d0\ub294 \uadf8 \ub0b4\uc6a9\uc774 \uae30\ubcf8\uc801\uc774\uae34 \ud558\uc9c0\ub9cc \ud544\uc790 \uc2a4\uc2a4\ub85c\uc758 \ud63c\ub780\uc744 \uc904\uc774\uae30 \uc704\ud574 \uadf8\ub0e5 \uc21c\uc11c\ub300\ub85c \ubc88\ud638\ub97c \ub9e4\uacbc\ub2e4. \uc774 \uac15\uc88c\ub294 1\uc7a5\uc5d0 \uc774\uc5ec \ub450\ubc88\uc9f8\ub85c NeHe\uc758 Display List\ub97c \uadf8\ub300\ub85c \ubc88\uc5ed\ud55c\ub2e4. \uc774\uc81c \uc2dc\uc791\ud574 \ubcf4\uc790. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 Display List\uc5d0 \ub300\ud55c \uc124\uba85\uc774\ub2e4. \uac04\ub2e8\ud55c \uc7a5\uba74\uc744 \uc5f0\ucd9c\ud558\uace0\uc790 \ud560\ub54c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=76\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[OpenGL Tutorial] Display List&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[3],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-opengl","tag-opengl"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":5,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions"}],"predecessor-version":[{"id":3817,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/76\/revisions\/3817"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}