ù ¹ø° OpenGL ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ. ù ¿¹Á¦À̹ǷΠº¹ÀâÇÑ µµÇü ´ë½Å »ï°¢Çü Çϳª¸¸ ±×·Á º¸±â·Î ÇÑ´Ù. °³¹ß ÀýÂ÷¸¦ ½Ç½ÀÇØ º¸´Â °ÍÀÌ ÁÖµÈ ¸ñÀûÀ̹ǷΠ¼Ò½º ³»¿ëÀº ¾ÆÁ÷ ¸ô¶óµµ »ó°ü¾ø´Ù. ºñÁÖ¾ó ½ºÆ©µð¿À 2010À» ½ÇÇàÇÏ°í ´ÙÀ½ ½Ç½ÀÀ» ÁøÇàÇÑ´Ù. ¸Þ´º¿¡¼ ÆÄÀÏ/»õ·Î¸¸µé±â/ÇÁ·ÎÁ§Æ® Ç׸ñÀ» ¼±ÅÃÇÑ´Ù.
Win32 ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥À» ¼±ÅÃÇÏ°í ÇÁ·ÎÁ§Æ® À̸§Àº ConsoleOpenGL·Î ÀÔ·ÂÇÑ´Ù. Àû´çÇÑ ½Ç½À Æú´õ¸¦ ¼±ÅÃÇ쵂 ÀÌ °Á´ C:\OpenGLExam Æú´õ¿¡ ÀúÀåÇß´Ù. È®ÀÎ ¹öÆ°À» ´©¸£¸é ¸¶¹ý»ç°¡ ³ªÅ¸³ª¸ç ÀÀ¿ë ÇÁ·Î±×·¥ Á¾·ù°¡ ÄַܼΠÀÌ¹Ì ¼±ÅõǾî ÀÖ´Ù.
´Ù¸¥ ¿É¼ÇÀº °Çµå¸± ÇÊ¿ä¾ø°í Ãß°¡¿É¼Ç¿¡¼ ºó ÇÁ·ÎÁ§Æ® üũ ¹Ú½º¸¦ ¼±ÅÃÇÑ´Ù. ¹Ì¸® Á¦°øµÇ´Â ÅÛÇø´À» »ç¿ëÇÏ´Â °Íµµ °¡´ÉÀº ÇÏ´Ù. ±×·¯³ª Å©·Î½º Ç÷§ÆûÀ» °í·ÁÇØ¾ß ÇϹǷΠ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ´Ï ¸®¼Ò½º´Ï ÇÏ´Â °ÍµéÀº ¹èÁ¦ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
¸¶¹ý»ç°¡ ¸¸µé¾î ÁÖ´Â ÇÁ·¹ÀÓ¿öÅ©´Â ½Ç¹« ÇÁ·ÎÁ§Æ®½Ã¿¡ »ó´çÈ÷ Æí¸®ÇÏÁö¸¸ ÀÌ·¸°Ô ¸¸µé¸é ºñÁÖ¾ó ½ºÆ©µð¿À Àü¿ëÀÇ ¿¹Á¦°¡ µÇ¾î ¹ö¸°´Ù. ¼Ò½º Â÷¿øÀÇ À̽ļº È®º¸¸¦ À§ÇØ °¡±ÞÀûÀÌ¸é ¼ø¼öÇÑ C ÄÚµå·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ À¯¸®ÇÏ´Ù. ÇÁ·ÎÁ§Æ® ²®µ¥±â¸¸ ¸¸µç ÈÄ ÇÁ·ÎÁ§Æ®/»õ Ç׸ñ Ãß°¡¸¦ ¼±ÅÃÇÏ¿© ¼Ò½º ÆÄÀÏÀ» ¸¸µç´Ù.
¾Æ¹« ³»¿ëµµ ¾ø´Â ºó ¼Ò½º ÆÄÀÏÀÌ ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡µÈ´Ù. ÀÌ ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù. OpenGLÀÇ Hello World ¹öÀüÀ̶ó°í ÇÒ ¼ö Àִµ¥ ÃÖ´ëÇÑ °£´ÜÇÏ°Ô ÀÛ¼ºÇß´Ù.
ConsoleOpenGL |
#include <gl/glut.h>
void DoDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0.0, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
void main()
{
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutMainLoop();
}
OpenGLÀ» »ç¿ëÇÏ·Á¸é ÁÖ¿ä Çì´õ ÆÄÀÏÀÎ gl.h¿Í glu.hµµ Æ÷ÇÔ½ÃÅ°´Â °ÍÀÌ ¿øÄ¢ÀûÀ̳ª ÀÌ ¿¹Á¦´Â glut.h Çϳª¸¸ Æ÷ÇÔ½ÃÄ×´Ù. glut Çì´õ ÆÄÀÏÀ» ¿¾î º¸¸é ´ÙÀ½°ú °°Àº ±¸¹®ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ¾Ë¾Æ¼ ÇÊ¿äÇÑ ÆÄÀÏÀ» Æ÷ÇÔ½ÃÄÑ ÁֹǷΠÀÌ Çì´õ ÆÄÀÏ Çϳª¸¸ Æ÷ÇÔÇÏ¸é µÈ´Ù.
#include <GL/gl.h>
#include <GL/glu.h>
¿ÜºÎ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ·Á¸é ÀÓÆ÷Æ® ¶óÀ̺귯¸®µµ ¿¬°áÇØ¾ß ÇÑ´Ù. ÇÁ·ÎÁ§Æ® ¿É¼ÇÀÇ ¼³Á¤ ÆäÀÌÁö¿¡¼ opengl32.lib, glu32.lib, glut32.lib¸¦ ¸µÅ©ÇØ¾ß Çϴµ¥ glut.h¿¡ ´ÙÀ½ ±¸¹®ÀÌ ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ±×·¯Áö ¾Ê¾Æµµ »ó°ü¾ø´Ù.
#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */
#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
ÀÌ ±¸¹®Àº ºñÁÖ¾ó C++ÀÇ È®Àå ¹®¹ýÀ̸ç Çì´õ ÆÄÀÏ¿¡¼ ÇÊ¿äÇÑ ¼³Á¤À» Á÷Á¢ º¯°æÇϹǷΠ¾ÆÁÖ Æí¸®ÇÏ´Ù. °á±¹ OpenGLÀ» »ç¿ëÇϱâ À§ÇÑ Áغñ´Â glut.h Çì´õ ÆÄÀÏ Çϳª¸¸ Æ÷ÇÔÇÏ¸é µÇ´Â ¼ÀÀÌ´Ù. ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇØ º¸ÀÚ. ÄÜ¼Ö ÇÁ·ÎÁ§Æ®À̹ǷΠÄܼÖâÀÌ ¸ÕÀú ¶ß°í º°µµÀÇ ±×·¡ÇÈâÀÌ ½ÇÇàµÇ¾î Èò»ö »ï°¢Çü Çϳª¸¦ ±×¸± °ÍÀÌ´Ù.
µÚÂÊÀÇ ÄܼÖâÀº º° ÇÏ´Â ÀÏ ¾øÀÌ ±×³É ½ÇÇàµÈ °ÍÀÌ°í »ï°¢ÇüÀÌ ±×·ÁÁø À©µµ¿ì°¡ OpenGLâÀÌ´Ù. »ï°¢ÇüÀ» Ãâ·ÂÇϱ⸸ ÇÒ »Ó ¾ÆÁ÷ º°´Ù¸¥ Äڵ尡 ¾øÀ¸¹Ç·Î ÀԷ¿¡´Â ÀüÇô ¹ÝÀÀÇÏÁö ¾Ê´Â´Ù. âÀÇ Å©±â¸¦ Á¶Á¤ÇÏ¸é »ï°¢Çü Å©±âµµ ºñ·ÊÀûÀ¸·Î ¹Ù²ï´Ù.
ÄÜ¼Ö ÇÁ·ÎÁ§Æ®µµ Win32 ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ°í glut°¡ ±×·¡ÇÈ Ã¢À» »ý¼ºÇØ ÁֹǷΠ½Ç½À¿¡ º° ¹®Á¦´Â ¾ø´Ù. ÇüÅ°¡ ´Ü¼øÇؼ ¼Ò½º¾çÀÌ Àû°í C Ç¥ÁØÀ» ÁؼöÇϹǷΠ´Ù¸¥ ¿î¿µÃ¼Á¦³ª ÄÄÆÄÀÏ·¯¿¡¼µµ ¼öÁ¤¾øÀÌ ÄÄÆÄÀϵȴÙ. ÇѸ¶µð·Î À̽ļºÀÌ ¶Ù¾î³ª´Ù. ±×·¯³ª ÄܼÖâÀÌ ¶á ÈÄ ½ÇÇà À©µµ¿ì°¡ ¶á´Ù´Â ¸é¿¡¼ º¸±â ÁÁÁö ¾Ê°í Å×½ºÆ® ÈÄ ÄܼÖâµµ Á÷Á¢ ´Ý¾Æ¾ß ÇÑ´Ù´Â ¸é¿¡¼ ºÒÆíÇÏ´Ù.
´ÙÀ½Àº À©µµ¿ì ¹öÀüÀÇ ¿¹Á¦¸¦ ÀÛ¼ºÇØ º¸ÀÚ. »õ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µéµÇ Win32 ÇÁ·ÎÁ§Æ® Ç׸ñÀ» ¼±ÅÃÇÏ°í ÇÁ·ÎÁ§Æ® À̸§Àº WinOpenGL·Î ÀÔ·ÂÇÑ´Ù.
¸¶¹ý»ç´Â ÀÀ¿ë ÇÁ·Î±×·¥ Á¾·ù ¿É¼ÇÀ» Windows ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î ¼±ÅÃÇØ ÁØ´Ù. ÄÜ¼Ö ÇÁ·ÎÁ§Æ®¿Í ¸¶Âù°¡Áö·Î ¾Æ·¡ÂÊÀÇ ºó ÇÁ·ÎÁ§Æ® ¿É¼ÇÀ» ¼±ÅÃÇÑ´Ù.
WinOpenGL.cpp ÆÄÀÏÀ» ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÏ°í ´ÙÀ½ ¼Ò½º¸¦ ÀÛ¼ºÇÑ´Ù.
WinOpenGL |
#include <windows.h>
#include <gl/glut.h>
void DoDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0.0, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutMainLoop();
return 0;
}
ÄÜ¼Ö ÇÁ·ÎÁ§Æ®¿Í ¼Ò½º ³»¿ëÀº °ÅÀÇ µ¿ÀÏÇÏ´Ù. ÁøÀÔÁ¡ÀÌ main¿¡¼ WinMainÀ¸·Î ¹Ù²î¾ú°í WinMainÀÇ Àμö¿¡ »ç¿ëµÈ ŸÀÔµéÀ» À§ÇØ windows.h¸¦ Æ÷ÇÔÇÑ Á¤µµ¸¸ ´Ù¸£´Ù. ½ÇÇàÇØ º¸ÀÚ.
½ÇÇà °á°ú´Â µ¿ÀÏÇ쵂 ÄܼÖâÀÌ ¿¸®Áö ¾Ê°í ¹Ù·Î OpenGL À©µµ¿ì°¡ ¿¸®¹Ç·Î ÈξÀ ´õ ±ò²ûÇÏ°í Æí¸®ÇÏ´Ù. ±×·¯³ª WinMainÀº À©µµ¿ìÁî ¿î¿µÃ¼Á¦¿¡¼¸¸ Á¸ÀçÇÏ´Â ÁøÀÔÁ¡À̹ǷΠ¸®´ª½º³ª ¸ÅŲÅä½Ã¿¡¼´Â ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇØ º¼ ¼ö ¾ø´Ù´Â ¸ÍÁ¡ÀÌ ÀÖ´Ù. Ÿ ȯ°æ¿¡¼´Â WinMainÀ» mainÀ¸·Î ¹Ù²ã Áà¾ß¸¸ ÄÄÆÄÀϵȴÙ. ÄÜ¼Ö ÇÁ·ÎÁ§Æ®°¡ Á» ±¸´Ú´Ù¸®ÀÌ°í âÀÌ µÎ°³³ª ¿·Á ºÒÆíÇÏÁö¸¸ À̽ļºÀº ÈξÀ ´õ ÁÁ´Ù.
»ç½Ç µÎ ÇÁ·ÎÁ§Æ® Çü½ÄÀº °ÅÀÇ Â÷ÀÌ°¡ ¾ø´Ù. ÀÌ Ã¥¿¡¼´Â À©µµ¿ì ¹öÀüÀ¸·Î ¿¹Á¦¸¦ ¸¸µé±â·Î ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ´ëºÎºÐÀÇ »ç¶÷µéÀÌ À©µµ¿ìÁî ȯ°æ¿¡¼ ½Ç½ÀÀ» ÇÒ °ÍÀÌ°í ¸Å ½Ç½À¸¶´Ù âÀ» µÎ °³¾¿À̳ª ¿¾ú´Ù ´Ý¾Ò´Ù ÇÏ´Â °ÍÀÌ ³Ê¹« ºÒÆíÇϱ⠶§¹®ÀÌ´Ù. 2~3°³ÀÇ ¿¹Á¦¸¦ °°ÀÌ ½ÇÇàÇØ ³õ°í ºñ±³ÇÒ ¶§´Â âÀÌ 4°³, 6°³¾¿À̳ª ¿¸®¹Ç·Î Á¤½ÅÀÌ ¾öû »ç³³´Ù. ½Ç¹« ÇÁ·ÎÁ§Æ®°¡ ¾Æ´Ï¶ó ÇнÀ¿ëÀ̹ǷΠÇнÀ¿¡ È¿À²ÀûÀÎ ÂÊÀ¸·Î ¼±ÅÃÇß´Ù.
´ÙÀ½Àº °ø°³ ÄÄÆÄÀÏ·¯ Dev-C++·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î º¸ÀÚ. »ç½Ç ºñÁÖ¾ó ½ºÆ©µð¿À´Â OpenGL ½Ç½À¿ëÀ¸·Î »ç¿ëÇϱ⿡´Â ³Ê¹« µ¢Ä¡°¡ Å©°í À¯·á ÇÁ·Î±×·¥ÀÌ¶ó ²¬Â½Áö±ÙÇÑ ¸éÀÌ ÀÖ´Ù. Dev-C++ 4992¸¦ ¼³Ä¡ÇÑ ÈÄ ´ÙÀ½ ¼ø¼´ë·Î ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÑ´Ù. ÄÜ¼Ö ¹öÀüµµ ÀÛ¼ºÇÒ ¼ö ÀÖÁö¸¸ À©µµ¿ì ¹öÀüÀ» ¹Ù·Î ¸¸µé¾î º¸ÀÚ. ÆÄÀÏ/»õ·Î ¸¸µé±â/ÇÁ·ÎÁ§Æ® Ç׸ñÀ» ¼±ÅÃÇÑ´Ù.
À§ÂÊÀÇ ÅÛÇø´¿¡¼ Windows Application Ç׸ñÀ» ¼±ÅÃÇÏ°í ÇÁ·ÎÁ§Æ® À̸§Àº DevOpenGL·Î ÁØ´Ù. È®ÀÎ ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇϴµ¥ ÇÁ·ÎÁ§Æ® Æú´õ¸¦ º°µµ·Î »ý¼ºÇØ ÁÖÁö ¾ÊÀ¸¹Ç·Î WinOpenGL Æú´õ¸¦ »ý¼ºÇÑ ÈÄ ÀúÀåÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ž»ö±â¸¦ ±»ÀÌ ¿ ÇÊ¿ä´Â ¾ø°í ÀúÀå ´ëÈ»óÀÚ À§ÂÊÀÇ »õ Æú´õ ¹öÆ°À» ´©¸£¸é µÈ´Ù. C:\OpenGLExam Æú´õ·Î À̵¿ÇÑ ÈÄ DevOpenGL À̶ó´Â Æú´õ¸¦ ¸¸µé°í ÀÌ Æú´õ ¾È¿¡ DevOpenGL.dev ÆÄÀÏÀ» ÀúÀåÇÑ´Ù.
main.cpp°¡ ±âº»ÀûÀ¸·Î Á¦°øµÇ¸ç ÀÌ ¼Ò½º¿¡´Â ÀϹÝÀûÀÎ Win32 ÇÁ·ÎÁ§Æ®°¡ ÀÌ¹Ì ÀԷµǾî ÀÖ´Ù. OpenGL°ú´Â ¸ÂÁö ¾ÊÀ¸¹Ç·Î ÀüºÎ Áö¿î ÈÄ ´Ù½Ã ÀÔ·ÂÇÑ´Ù.
DevOpenGL |
#include <windows.h>
#include <gl/glut.h>
void DoDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0.0, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutMainLoop();
return 0;
}
ºñÁÖ¾ó C++ ÇÁ·ÎÁ§Æ®ÀÇ ¼Ò½º¿Í ´Ü ÇѱÛÀÚµµ Ʋ¸®Áö ¾Ê°í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. µðÆúÆ® ÆÄÀϸíÀÌ main.cpp·Î µÇ¾î Àִµ¥ ÀÌ ÆÄÀϸíÀ» ±×´ë·Î »ç¿ëÇصµ »ó°üÀº ¾øÁö¸¸ Â÷ÈÄ ÇÁ·ÎÁ§Æ® °ü¸®½Ã¿¡ ºÒÆíÇÏ´Ù. ÀúÀå ¹öÆ°À» ´·¯ DevOpenGL.cpp ÆÄÀÏ·Î À̸§À» ¹Ù²Ù¾î ÀúÀåÇÏ´Â °ÍÀÌ ÁÁ´Ù.
ÀÓÆ÷Æ® ¶óÀ̺귯¸®¸¦ ¿¬°áÇÏ´Â #pragma comment ¹®Àº C Ç¥ÁØ ¹®¹ýÀÌ ¾Æ´Ï¸ç ºñÁÖ¾ó C++ÀÇ ÀÓÀÇ È®ÀåÀ̶ó Dev-C++¿¡¼´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. ±×·¡¼ OpenGL ¶óÀ̺귯¸® ¿¬°áÀº ¼öÀÛ¾÷À¸·Î Á÷Á¢ ÇØ¾ß ÇÑ´Ù. ÇÁ·ÎÁ§Æ® ¿É¼ÇâÀÇ ¸Å°³º¯¼ö ÅÇÀÇ ¸µÄ¿¶õ¿¡ ´ÙÀ½ ¿É¼ÇÀ» Ãß°¡ÇÑ´Ù.
-l(´ë¹®ÀÚ ¾ÆÀÌ°¡ ¾Æ´Ï¶ó ¼Ò¹®ÀÚ ¿¤) ´ÙÀ½¿¡ ¿¬°áÇÒ ¶óÀ̺귯¸® À̸§À» Àû¾î ÁÖ¸é µÈ´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÏ¸é °³¹ß ȯ°æÀº ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.
ÀÌ »óÅ¿¡¼ ÄÄÆÄÀÏ ¹× ½ÇÇàÇÏ¸é ºñÁÖ¾ó C++°ú µ¿ÀÏÇÑ ½ÇÇà ÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù. ºñÁÖ¾ó C++¿¡ ºñÇØ ÀܼÕÁúÀÌ ´õ ÇÊ¿äÇÏ°í ´Ù¼Ò ºÒÆíÇÑ ¸éÀÌ ÀÖÁö¸¸ ÀϹÝÀûÀÎ ÄܼÖ, À©µµ¿ìÁî ¿¹Á¦ ÀÛ¼º¿¡´Â º° ºÎÁ·ÇÔÀÌ ¾ø´Ù.
ÀÌ ¿Ü¿¡ Áñ°Ü »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯°¡ ÀÖ´Ù¸é ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î ½Ç½ÀÇÒ ¼ö ÀÖ´Ù. Çì´õ ÆÄÀÏ ±¸Á¶³ª ÀÓÆ÷Æ® ¶óÀ̺귯¸® ¿¬°á ¹æ¹ý Á¤µµ¸¸ ´Ù¸¦ »ÓÀÌÁö ¼Ò½º ³»¿ëÀº µ¿ÀÏÇÏ´Ù. ¼Õ¿¡ ÀÍÀº ÄÄÆÄÀÏ·¯°¡ ÀÖ´Ù¸é ±× ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇϱ⠹ٶõ´Ù.
ù ¹ø° ¿¹Á¦¸¦ ´ëÃæ ºÐ¼®ÇØ º¸ÀÚ. »ó¼¼ÇÑ ÇÔ¼ö ±¸¹®Àº Â÷ÈÄ ÃµÃµÈ÷ ¾Ë¾Æ º¸±â·Î ÇÏ°í ÀüüÀûÀÎ ±¸Á¶¸¸ ºÐ¼®ÇØ º»´Ù. ¸ÞÀÎ ÇÔ¼öÀÇ ÄÚµå´Â ´ÙÀ½ ¼¼ ÁÙ·Î µÇ¾î Àִµ¥ ÇÔ¼öÀÇ Á¢µÎ°¡ ¸ðµÎ glut·Î µÇ¾î ÀÖ´Ù. Áï ÀÌ ÇÔ¼öµéÀº ±×·¡ÇÈ Ãâ·Â ȯ°æÀ» ¸¸µé¾î ÁÖ´Â GLUT ¸í·É¾îµéÀÌ´Ù.
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutMainLoop();
glutCreateWindow ÇÔ¼ö´Â OpenGL Ãâ·ÂÀ» À§ÇÑ À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. Àμö·Î´Â ŸÀÌƲ ¹Ù¿¡ Ãâ·ÂµÉ Á¦¸ñ ¹®ÀÚ¿À» Àü´ÞÇÑ´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ 300 * 300 Å©±âÀÇ ±×¸®±â Ç¥¸éÀ» °¡Áö´Â À©µµ¿ì°¡ »ý¼ºµÇ¸ç ÀÌÈÄ ÀÌ À©µµ¿ì¿¡ 3Â÷¿ø ±×·¡ÇÈÀÌ Ãâ·ÂµÈ´Ù.
glutDisplayFunc ÇÔ¼ö´Â À©µµ¿ì¿¡ ±×¸®±â¸¦ Àü´ãÇÏ´Â ÇÔ¼ö(WM_PAINT ¸Þ½ÃÁö ó¸® ÇÔ¼ö)¸¦ ÁöÁ¤ÇÑ´Ù. À©µµ¿ì°¡ óÀ½ »ý¼ºµÉ ¶§, Å©±â°¡ º¯ÇÒ ¶§, Ãâ·Â ³»¿ëÀ» ¹Ù²Ù¾úÀ» ¶§ µî¿¡ ±×¸®±â ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ÀÌ ¿¹¿¡¼´Â DoDisplay ÇÔ¼ö¸¦ ÁöÁ¤Çß´Ù. DoDisplay ÇÔ¼ö´Â ¸ÞÀÎ ÇÔ¼ö ¹Ù·Î À§¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç ¿©±â¼ »ï°¢ÇüÀ» ±×¸°´Ù.
glutMainLoop ÇÔ¼ö´Â ¸Þ½ÃÁö ·çÇÁ¸¦ µ¹¸°´Ù. ±×·¡ÇÈ È¸éÀº ±×¸®±â, â Å©±â º¯È, »ç¿ëÀÚ ÀÔ·Â µîÀÇ »ç°Ç¿¡ ´ëÇØ ¹ÝÀÀÇÏ´Â À̺¥Æ® µå¸®ºì ¹æ½ÄÀ¸·Î µ¿ÀÛÇÏ¸ç ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ Àû´çÇÑ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ À©µµ¿ì »ý¼º Á÷ÈÄ¿¡ DoDisplay°¡ È£ÃâµÇ°í ±×¸²ÀÌ ±×·ÁÁö¸ç ½ÇÇàÀ» ½ÃÀÛÇÑ´Ù. ¸Þ½ÃÁö ·çÇÁ´Â ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§±îÁö °è¼Ó ½ÇÇàµÈ´Ù.
ÁøÀÔ ÇÔ¼ö´Â À©µµ¿ì »ý¼º, ±×¸®±â ÇÔ¼ö ÁöÁ¤, ¸Þ½ÃÁö ·çÇÁ ½ÇÇà 3°¡Áö ¸í·ÉÀ» ½ÇÇàÇÔÀ¸·Î½á ÇÁ·Î±×·¥À» ÃʱâÈÇß´Ù. OpenGL ¿¹Á¦¸¦ À§ÇÑ ÃÖ¼ÒÇÑÀÇ ¸í·ÉÀÎ ¼ÀÀÌ´Ù. ÀÌ ¿Ü¿¡ Ư¼öÇÑ ÃʱâÈ ¸í·ÉÀ̳ª Äݹé ÇÔ¼ö ÁöÁ¤ µîÀÌ ´õ µé¾î°¥ ¼ö ÀÖ´Ù. Å°º¸µå ÀÔ·ÂÀ» ¹ÞÀ¸·Á¸é glutKeyboardFuncÀ¸·Î Å°º¸µå¸¦ ó¸®ÇÒ ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ´Â ½ÄÀÌ´Ù. ÀÌ ¿¹Á¦´Â ´Ü¼øÇÑ ±×¸®±â¸¸ ÇϹǷΠ±×¸®±â Äݹé ÇÔ¼ö¸¸ ÁöÁ¤Çß´Ù.
´ÙÀ½Àº ½ÇÁ¦ ±×¸®±â¸¦ ¼öÇàÇÏ´Â DoDisplay ÇÔ¼ö¸¦ ºÐ¼®ÇØ º¸ÀÚ. »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼öÀ̹ǷΠÀ̸§Àº ¹°·Ð ¸¶À½´ë·Î Á¤ÇÒ ¼ö ÀÖ´Ù. ¸ÞÀÎ ÇÔ¼ö ¹Ù·Î À§ÂÊ¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç º°µµÀÇ Àμö´Â ¹Þ¾ÆµéÀÌÁö ¾Ê´Â´Ù. Ãâ·Â ³»¿ëÀÌ ¹Ù²ð ¶§¸¶´Ù ȸéÀ» ±ò²ûÇÏ°Ô Áö¿ì±â À§ÇØ glClear ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. glBeginÀº µµÇüÀ» ±×¸®±â ½ÃÀÛÇÑ´Ù´Â ¶æÀÌ°í glEnd´Â µµÇüÀ» ´Ù Á¤ÀÇÇß´Ù´Â ¶æÀÌ´Ù. ÀÌ µÎ ÇÔ¼ö È£Ãâ¹® »çÀÌ¿¡ µµÇüÀ» ±¸¼ºÇÏ´Â Á¤Á¡µéÀÌ ¹èÄ¡µÈ´Ù.
Á¤Á¡µéÀ» ¾î¶»°Ô ¿¬°áÇÒ °ÍÀΰ¡´Â glBeginÀÇ Àμö·Î ÁöÁ¤Çϴµ¥ GL_TRIANGLES·Î ÁÖ¾úÀ¸¹Ç·Î ¼¼ Á¤Á¡µéÀÌ ¿¬°áµÇ¾î »ï°¢ÇüÀÌ ±×·ÁÁø´Ù. OpenGLÀÇ ÁÂÇ¥°è´Â ´Ù¾çÇÏ°Ô Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ» ¶§ÀÇ µðÆúÆ® ÁÂÇ¥°è´Â ´ÙÀ½°ú °°´Ù. z ÃàÀº ÀÏ´Ü ¹«½ÃÇÏ°í x, y Æò¸éÃุ º¸ÀÚ. ¹°·Ð ¾îµð±îÁö³ª µðÆúÆ®ÀÏ »ÓÀ̸ç ÁÂÇ¥°è´Â ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î º¯Çü °¡´ÉÇÏ´Ù.
ȸéÀÇ Áß¾ÓÀÌ (0,0)ÀÌ°í X ÃàÀº ¿À¸¥ÂÊÀ¸·Î, Y ÃàÀº À§ÂÊÀ¸·Î Áõ°¡ÇÑ´Ù. ¿À¸¥ÂÊ À§ ¸ð¼¸® ÁÂÇ¥´Â (1,1)ÀÌ¸ç ¿ÞÂÊ ¾Æ·¡´Â (-1, -1)ÀÌ´Ù. ÀÓÀÇÀÇ ÇÑ Á¡Àº -1 ~ 1 »çÀÌÀÇ ½Ç¼ö°ªÀ¸·Î ÁöÁ¤ÇÑ´Ù. glBegin°ú glEnd »çÀÌÀÇ glVertex2f ÇÔ¼ö·Î ÁöÁ¤ÇÑ ¼¼ Á¡ÀÌ »ï°¢ÇüÀÇ ²ÀÁöÁ¡À» °¡¸®Å°°í ÀÖÀ¸¸ç ÀÌ ¼¼ Á¡À» ¿¬°áÇÏ¿© »ï°¢ÇüÀ» ±×¸°´Ù. x, y µÎ °³ÀÇ °ª¸¸ ÁöÁ¤ÇßÀ¸¹Ç·Î z ÁÂÇ¥´Â ÀÚµ¿À¸·Î 0ÀÌ µÈ´Ù.
´Ù ±×¸° ÈÄ¿¡ glFlush·Î ±×¸®±â ¸í·ÉÀ» ±×·¡ÇÈ Ä«µå·Î º¸³» ±×¸°´Ù. OpenGLÀº ¼Óµµ¸¦ ³ôÀ̱â À§ÇØ ¸Å ±×¸®±â ¸í·ÉµéÀ» Áï½Ã ¼öÇàÇÏÁö ¾Ê°í ¹öÆÛ¿¡ ¸ð¾Æ µÎ¾ú´Ù°¡ ÇѲ¨¹ø¿¡ ¼öÇàÇÑ´Ù. glFlush´Â ¹öÆÛ¸¦ ºñ¿ö ¸í·ÉÀ» Áï½Ã ½ÇÇà½ÃŲ´Ù. ÀÌ È£ÃâÀ» »ý·«Çϸé Á¤Á¡¸¸ Á¤ÀÇµÉ »Ó Ãâ·ÂÀº ³ª°¡Áö ¾Ê´Â´Ù.
¹º°¡¸¦ óÀ½ ¹è¿ï ¶§´Â ¸ðµç ¿¹Á¦¸¦ Á÷Á¢ ¸¸µé¾î º¸´Â °ÍÀÌ ÁÁ´Ù. ´«À¸·Î ÈÈ¾î º¸´Â °Í°ú ¼Õ°¡¶ôÀ¸·Î Á÷Á¢ ÀÔ·ÂÇØ °¡¸é ÄÚµå ÇÑÁÙ ÇÑÁÙÀ» Àд °ÍÀº ½Ç½ÀÀÇ ±íÀÌ°¡ È®¿¬ÇÏ°Ô ´Ù¸£´Ù. ¹®Á¦´Â ½Ã°£ÀÌ´Ù. ¿ì¸® ¸ðµÎ ±×·¸°Ô ÇÑ°¡ÇÑ »ç¶÷ÀÌ ¾Æ´Ï¾î¼ ÇÁ·ÎÁ§Æ® ¸¸µé°í ¼Ò½º ÀÔ·ÂÇØ ³Ö°í ¿ä¸ð Á¶¸ð ¶â¾îº¼ ½Ã°£ÀÌ ¾ø´Ù. ´çÀå ´ÙÀ½ ÁÖ±îÁö °á°ú°¡ ³ª¿ÀÁö ¾ÊÀ¸¸é ¾öû³² °¥±ÀÀ» °¢¿ÀÇØ¾ß ÇÏ´Â »ç¶÷µé ¾Æ´Ñ°¡?
±×·¡¼ ÀÌ °Á´ ¸ðµç ¿¹Á¦¸¦ ÄÄÆÄÀÏ °¡´ÉÇÑ ÇÁ·ÎÁ§Æ®·Î Á¦°øÇÑ´Ù. ÄÄÆÄÀÏ·¯ ¼³Ä¡ÇÏ°í ÇÁ·ÎÁ§Æ® ¿¾î¼ Á÷Á¢ ÄÄÆÄÀÏÇØ º¼ ¼öµµ ÀÖ°í Àǽɰ¡´Â ºÎºÐÀº ¸¶À½ ³»Å°´Âµ¥·Î ¶â¾î º¼ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ¶ÇÇÑ ½Ã°£ÀÌ ¸¹ÀÌ °É¸®´Â ÀÏÀÌ´Ù. ±×·¡¼ ÀçÄÄÆÄÀÏÇÏÁö ¾Ê°íµµ ¸ðµç ¿¹Á¦¸¦ °¡±ÞÀûÀÌ¸é ½Å¼ÓÇÏ°Ô »ìÆ캼 ¼ö ÀÖµµ·Ï ¿¹Á¦¸¦ ÀÛ¼ºÇß´Ù.
OpenGLÀÇ ¿¹Á¦µéÀº ´ëºÎºÐ ±×¸®±â Äڵ尡 ÁÖÀ̹ǷΠ´Þ¶óÁö´Â ºÎºÐÀº DoDisplay Ãâ·Â ÇÔ¼öÀÇ ÄÚµå»ÓÀÌ´Ù. ÇÁ·ÎÁ§Æ®ÀÇ °ñ°ÝÀº °ÅÀÇ ºñ½ÁÇÏ¸ç ¹«¾ùÀ» ¾î¶»°Ô ±×¸®´Â°¡¸¸ ´Þ¶óÁú »ÓÀÌ´Ù. ±×·¡¼ ¿¹Á¦¸¦ ³Ê¹« ¸¹ÀÌ ¸¸µéÁö ¾Ê°í ÇÑ ¿¹Á¦¿¡ ºñ½Á ºñ½ÁÇÑ Äڵ带 ÅëÇÕÀûÀ¸·Î ÀÛ¼ºÇØ µÎ¾ú´Ù. °¢°¢ÀÇ Äڵ带 ÁÖ¼®À¸·Î ¹¾îµÎ´Â ¹æ¹ýµµ ÈçÈ÷ »ç¿ëµÇÁö¸¸ ±×·¯ÀÚ¸é ÁÖ¼® ÆíÁý ÈÄ ÀçÄÄÆÄÀÏÀ̶ó´Â ¹ø°Å·Î¿î °úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù.
ÀÌ °Á´ Æ˾÷ ¸Þ´º·Î °Á¸¦ ¼±ÅÃÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. ½ÇÇàÁß¿¡µµ ¾ðÁ¦µçÁö Æ˾÷ ¸Þ´º·Î ½ÇÇà Äڵ带 ¹Ù²ã º¼ ¼ö ÀÖ´Ù. Æ˾÷ ¸Þ´º¿¡¼ ActionÀ̶ó´Â º¯¼ö¸¦ º¯°æÇÏ°í DoDisplay ÇÔ¼ö´Â Action º¯¼ö¿¡ µû¶ó ´Ù¸¥ Äڵ带 ½ÇÇàÇÏ´Â ½ÄÀÌ´Ù. ´ÙÀ½ Àý¿¡¼ ¸¸µé¾î º¼ ChangeState ¿¹Á¦ÀÇ Àüü ¼Ò½º´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÇ¾î ¹èÆ÷µÈ´Ù. ¼¼ °³ÀÇ Äڵ尡 ÇÑ ¿¹Á¦¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Â ¼ÀÀÌ´Ù.
#include <windows.h>
#include <gl/glut.h>
void DoDisplay();
void DoMenu(int value);
int Action;
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutCreateMenu(DoMenu);
glutAddMenuEntry("»¡°£»ö ¹è°æ",0);
glutAddMenuEntry("»¡°£»ö »ï°¢Çü",1);
glutAddMenuEntry("¿À°¢Çü ±×¸®±â",2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}
void DoMenu(int value)
{
if (value < 100) {
Action = value;
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
glutPostRedisplay();
return;
}
}
void DoDisplay()
{
switch(Action) {
case 0:
....
break;
case 1:
....
break;
case 2:
....
break;
}
}
WinMainÀº Àß º¯ÇÏÁö ¾ÊÀ¸¹Ç·Î À§ÂÊ¿¡ Á¤ÀÇÇÏ°í DoDisplay´Â ¾Æ·¡ÂÊ¿¡ µÎµÇ ¹Ì¸® ¿øÇüÀ» ¼±¾ðÇØ µÎ¾ú´Ù. DoDisplay ÇÔ¼ö´Â switch ¹®À¸·Î Action¿¡ µû¶ó ´Ù¸¥ µ¿ÀÛÀ» ÇÑ´Ù. case ¹®ÀÇ Äڵ尡 ÇϳªÀÇ ¿¹Á¦¿¡ ´ëÀÀµÈ´Ù. ½ÇÇàÁß¿¡ ¾ðÁ¦µçÁö Æ˾÷ ¸Þ´º¸¦ ¿¸é ActionÀ» ¹Ù²Ü ¼ö ÀÖ´Â ¸í·ÉµéÀÌ ³ªÅ¸³ª¸ç Ä£ÀýÇÏ°Ô Çѱ۷Π¼³¸íµµ ºÙ¿© ³õ¾Ò´Ù.
º»¹®¿¡¼ Äڵ带 º¸ÀÏ ¶§´Â case ¹® ¾ÈÂÊÀÇ Äڵ常 º¸ÀÏ °ÍÀÌ´Ù. ¿©·¯ °³ÀÇ Äڵ带 ÇϳªÀÇ ¿¹Á¦¿¡ ¹´Ù º¸´Ï ´Ù¼Ò ºÎÀÚ¿¬½º·¯¿î ¸éµµ ÀÖ´Ù. ActionÀ» º¯°æÇÒ ¶§¸¶´Ù ´Ù¸¥ ¿¹Á¦°¡ º¯°æÇÑ ¼³Á¤À» ¿ø·¡´ë·Î µ¹¸®´Â Äڵ尡 ÇÊ¿äÇÏ´Ù. ¶Ç case¹®¾È¿¡ º¯¼ö Ãʱâȸ¦ ÇÒ ¼ö ¾øÀ¸¹Ç·Î Ãß°¡ÀûÀº { } °ýÈ£°¡ »ç¿ëµÇ±âµµ ÇÑ´Ù. switch¹®Àº ¾îµð±îÁö³ª ¿¹Á¦ ¼±ÅÃÀ» À§ÇÑ ±¸¹®À̹ǷΠµé¿© ¾²±âµµ ÇÏÁö ¾Ê¾Ò´Ù.
½ÇÇàÁß¿¡ ȸÀüÀ̳ª Àμö°ªÀÇ Áõ°¨À» À§ÇØ ¾ËÆĺªÅ°µµ Á¾Á¾ »ç¿ëÇÑ´Ù. Å°´Â ¿¹Á¦¸¶´Ù Á¶±Ý¾¿ ´Ù¸¥µ¥ °³º° ¿¹Á¦¿¡¼ ¼³¸íÇÑ´Ù. ¹èÆ÷ ¿¹Á¦ÀÇ Çü½ÄÀÌ ´Ù¼Ò ºñ»ó½ÄÀûÀÌÁö¸¸ ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ¿¹Á¦ÀÇ ¼ö°¡ ³Ê¹« ¸¹¾ÆÁø´Ù. ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ±âº»ÀûÀÎ °³³äÀÌ ÀÖ´Ù¸é ¹èÆ÷ ¿¹Á¦ÀÇ Çü½ÄÀº ¾î·ÆÁö ¾Ê°í ¼ö±àµÉ °ÍÀÌ´Ù. ¸ðµç ¿¹Á¦°¡ ½ÇÇà ÆÄÀϾȿ¡ ´Ù µé¾î ÀÖÀ¸¹Ç·Î ÄÄÆÄÀÏ·¯¸¦ ¿Áö ¾Ê°í °ÁÂ¿Í ½ÇÇà ÆÄÀϸ¸ º¸¾Æµµ ³»¿ëÀ» ÀÌÇØÇÒ ¼ö ÀÖ´Ù.
¾ÕºÎºÐ óÀ½ÀÇ ½Ç½À ¿¹Á¦ ¸î °³¸¦ Á¦¿ÜÇÏ°í ³ª¸ÓÁö ¿¹Á¦´Â ¸ðµÎ ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ¼Ö·ç¼ÇÀ¸·Î ¹¾î µÎ¾ú´Ù. ÄÄÆÄÀÏÇØ º¼ ¶§µµ ÇÁ·ÎÁ§Æ®¸¦ ±³Ã¼ÇÒ ÇÊ¿ä¾øÀÌ Æ˾÷ ¸Þ´º¿¡¼ ½ÃÀÛ ÇÁ·ÎÁ§Æ®¸¸ º¯°æÇÔÀ¸·Î½á »ìÆ캼 ¼ö ÀÖ´Ù. ¾Èµå·ÎÀÌµå ¿¹Á¦µµ ÇϳªÀÇ ÅëÇÕ ¿¹Á¦¿¡ ¸ñ·Ï Çü½ÄÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç ¾×ƼºñƼ Çϳª°¡ ¿¹Á¦ Çϳª¿¡ ´ëÀÀµÈ´Ù.