Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom
Bar]
[Photo of the
Author]
Miguel Angel Sepúlveda
ÇÊÀÚ ¼Ò°³: 1993³â¿¡ ¿ö½ÌÅÏ´ëÇÐ(¹Ì±¹)À» Á¹¾÷Çß´Ù. ½ºÆäÀÎ, À̽º¶ó¿¤, ÀϺ», ¹Ì±¹¿¡¼­ °úÇבּ¸ ºÐ¾ß¿¡¼­ ÀÏÇÑ´Ù. Ä¿³Î 0.98ÂëºÎÅÍ ¸®´ª½º¸¦ ¾Ë°Ô µÇ¾ú´Ù. (ù´«¿¡ ¹ÝÇß´Ù) ÇöÀç´Â ÀÚÀ¯ ½Ã°£¿¡ ¸®´ª½º Æ÷Ä¿½ºÀÇ ÆíÁýÀåÀ¸·Î ÀÏÇÑ´Ù.

ÇÊÀÚ¿¡°Ô ¿¬¶ôÇϱâ

µé¾î°¡´Â±Û

ÃʱâÈ­

À̺¥Æ® ó¸®

¿¡´Ï¸ÅÀÌ¼Ç º¸±â



GLUT ȨÆäÀÌÁö
GLUTÀúÀÚ
GLUT-3.6 ¼Ò½ºÄÚµå

â°ú ¾Ö´Ï¸ÞÀ̼Ç

¿ä¾à: --




µé¾î°¡´Â ±Û

OpenGLÀÇ ¼³°è»óÀÇ ÀÌÀ¯·Î À©µµ¿ì½Ã½ºÅÛ¿¡ ÀÇÁ¸¼ºÀÌ ÀÖ´Â ±â´ÉµéÀº ±Ô¾à¿¡ ºüÁ®ÀÖ´Ù. ±× ´öºÐ¿¡ ³ôÀº À̽ļº°ú °£°áÇϸ鼭 È¿À²ÀûÀÎ 2Â÷¿ø/3Â÷¿ø ·£´õ¸µ ¶óÀ̺귯¸®°¡ ³ª¿Ã ¼ö ÀÖ¾ú´Ù. âÀ» ¿­°í ´Ù·ç´Â °ÍÀº °íÀ¯ÀÇ À©µµ¿ì ½Ã½ºÅÛ¿¡ ´Þ·Á ÀÖ´Ù. OpenGL¶óÀ̺귯¸®´Â Ãß°¡ÀûÀÎ ºÎ°¡¶óÀ̺귯¸®¸¦ ÅëÇÏ¿© °íÀ¯ÀÇ À©µµ¿ì ½Ã½ºÅÛ°ú Åë½ÅÀ» ¼öÇàÇÑ´Ù. ¿¹¸¦ µéÀÚ¸é GLXºÎ°¡¶óÀ̺귯¸®´Â OpenGL°ú XÀ©µµ¿ì½Ã½ºÅÛ»çÀÌÀÇ »óÈ£µ¿ÀÛÀ» ´ã´çÇÑ´Ù.

OpenGL À¯Æ¿¸®Æ¼ ÅøŶ(GLUT)Àº OpenGLÇÁ·Î±×·¥À» À©µµ¿ì½Ã½ºÅÛ°ú´Â µ¶¸³ÀûÀ¸·Î ÀÛµ¿Çϵµ·Ï °³¹ßÇÏ°Ô ÇØÁÖ´Â ºÎ°¡¶óÀ̺귯¸®·Î ANSI C¾ð¾î¿Í FORTRANÀ» Áö¿øÇÑ´Ù. Mark J.Kilgard¾¾¿¡ ÀÇÇØ ÀÛ¼ºµÇ¾úÀ¸¸ç OpenGL±Ô¾à¿¡ ÀÖ´Â Å« °áÁ¡À» º¸¿ÏÇØ ÁØ´Ù. GLUT°³¹ßÀÚ ´öºÐ¿¡ ¿øÇÏ´Â Ç÷§Æû¿¡ µ¶¸³ÀûÀ¸·Î ÀÛµ¿ÇÏ´Â °øÅëµÈ À©µµ¿ì ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. GLUT¸¦ »ç¿ëÇÏ´Â OpenGLÀÀ¿ëÇÁ·Î±×·¥Àº ¼Ò½ºÄڵ带 ¸¹ÀÌ ¹Ù²Ü ÇÊ¿äµµ ¾øÀÌ Ç÷§Æû À̽ÄÀÌ ½±°Ô °¡´ÉÇÏ´Ù. GLUT´Â OpenGLÄڵ带 °£´ÜÇÏ°Ô ¸¸µé¾î ÁÙ »Ó¸¸ ¾Æ´Ï¶ó OpenGL¶óÀ̺귯¸®¸¦ º¸¿ÏÇØ ÁØ´Ù.

GLUT´Â »ó´ëÀûÀ¸·Î ÀÛ°í ¹è¿ì±â ½±´Ù.¸Å¿ì ¼³°è°¡ ÀߵǾî ÀÖÀ¸¸ç ¶ÇÇÑ ÀúÀÚ°¡ ÀÌ¹Ì È¯»óÀûÀÎ °ü·Ã¹®¼­¸¦ ÀÛ¼ºÇØ µÎ¾ú´Ù. ±×·¯¹Ç·Î ¸®´ª½ºÆ÷Ä¿½º¿¡¼­ ¶Ç´Ù½Ã ´Ù·ê ÇÊ¿ä°¡ ¾ø´Ù°í »ý°¢ÇÑ´Ù.MarkÀÇ ¹®¼­µéÀ» ²À Àо±â ¹Ù¶õ´Ù. GLUTÀÇ ¹®¼­°¡ ¸Å¿ì Àß µÇ¾î Àִµ¥ ¿Ö ÀÌ ¿¬Àç¿¡¼­ GLUT¸¦ ´Ù·ç´Â°¡? ÇÊÀÚ´Â OpenGL¿¬Àç¿Í ÇÔ²² ÀÐÀ¸¸é¼­ GLUT¶óÀ̺귯¸®¸¦ »ìÆ캸°í ´Ü°è´Ü°èº°·Î °¢ ¿¹¸¦ µû¶ó µ¶ÀÚ ¿©·¯ºÐÀÌ Á÷Á¢ µû¶óÇغ¸¸é¼­ ½Ç·ÂÀÌ ´Ã±â¸¦ ¹Ù¶õ´Ù. ¶ÇÇÑ OpenGLÀ» ȯ»óÀûÀÎ ¸®´ª½º¿¡¼­ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Óµé¿¡°Ô µµ¿òÀ» ÁÖ°í ÀÌ·± ÇÁ·Î±×·¡¸ÓµéÀÌ ¸¹ÀÌ ÆÛÁö´Âµ¥ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÑ´Ù. ¾î¶² °æ¿ìµçÁö°£¿¡ ¿©·¯ºÐÀº MarkÀÇ ¹®¼­¸¦ ÁÁÀº Âü°í¹®¼­·Î °¡Áö°í ÀÖ´Â °ÍÀÌ ÁÁ´Ù.

GLUT API´Â OpenGL°ú ¸¶Âù°¡Áö·Î »óűâ¼ú¹æ½ÄÀÌ´Ù. Áï ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È GLUT°¡ ¸¹Àº »óź¯¼ö¸¦ °¡Áö°í ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. GLUTÀÇ Ãʱâ»óÅ´ ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ¾Ë¸ÂÀº °ªÀ» °¡Áö°í ÀÖ´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ ¿øÇÏ´Â »óź¯¼öÀÇ °ªÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù. GLUTÀÇ ÇÔ¼öµéÀº »óź¯¼öµéÀÇ °ª¿¡ µû¶ó ÃëÇÏ´Â ÇൿÀÌ ¾à°£ ´Þ¶óÁø´Ù. GLUTÇÔ¼ö´Â °£´ÜÇÏ¸ç ¸î°³ÀÇ ÆĶó¸ÞÅ͵éÀ» ÃëÇÑ´Ù. µ¹·ÁÁÖ´Â Æ÷ÀÎÅÍ´Â ¾øÀ¸¸ç ´ÜÁö GLUTÀÇ ÇÔ¼ö·Î Àü´ÞµÇ´Â Æ÷ÀÎÅÍ´Â ¹®ÀÚ¿­°ú ºÒÈ®½ÇÇÑ ±Û²ÃÀ» ´Ù·ç±â À§ÇÑ Æ÷ÀÎÅÍ»ÓÀÌ´Ù.

GLUTÀÇ ÇÔ¼öµéÀº ±× ±â´É¿¡ µû¶ó ¸î°³ÀÇ ÇÏÀ§ APIµé·Î ³ª´©¾îÁø´Ù.:

  • ÃʱâÈ­ 
  • À̺¥Æ® 󸮽ÃÀÛ 
  • À©µµ¿ì °ü¸® 
  • ¿À¹ö·¹ÀÌ °ü¸® 
  • ¸Þ´º °ü¸® 
  • ÄݹéÇÔ¼ö µî·Ï 
  • »ö»ó À妽º Ä÷¯¸Ê °ü¸® 
  • »óÅ º¹±¸ 
  • ±Û²Ã ·£´õ¸µ 
  • ±âÇÏÇÐÀû Çü»ó ·£´õ¸µ 
ÀÌ ±Û¿¡¼­´Â °£´ÜÇÑ OpenGLÇÁ·Î±×·¥À» ½ÃÀÛÇϴµ¥ ÇÊ¿äÇÑ ÃʱâÈ­, À̺¥Æ® ó¸®, â°ü¸®¿Í °ü·ÃµÈ ¸î°¡Áö ÇÔ¼öµéÀ» »ìÆ캸±â·Î ÇÏÀÚ.

ÃʱâÈ­

GLUT¸¦ »ç¿ëÇÏ´Â ¸ðµç OpenGLÇÁ·Î±×·¥Àº ¹Ýµå½Ã GLUT »óŸӽſ¡ ÀÇÇÏ¿© ÃʱâÈ­½ÃÄÑ¾ß ÇÑ´Ù. glutÃʱâÈ­ÇÔ¼ö´Â glutInit-·Î ½ÃÀÛÇÏ´Â À̸§À» °¡Áö°í ÀÖ´Ù. ÁÖ¿ä ÃʱâÈ­·çƾÀº glutInitÀÌ´Ù.:
»ç¿ë¹ý 
  glutInit(int **argcp, char **argv); 
  argcp ´Â mainÇÔ¼öÀÇ ¼öÁ¤ÇÒ ¼ö ¾ø´Â argcº¯¼ö¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. glutInitÇÔ¼ö´Â GLUT¶óÀ̺귯¸®¸¦ À§ÇÑ ÀûÀýÇÑ ½ÇÇà¸í·É¾î ¼±ÅÿɼÇÀ» °ñ¶ó³»±â ¶§¹®¿¡ ¹Ýȯ°ª¿¡ µû¶ó argcp°¡ °¡¸£Å°´Â °ªÀÌ º¯°æµÈ´Ù. ¿¹¸¦ µé¾î XÀ©µµ¿ì½Ã½ºÅÛ È¯°æÀ̶ó¸é XÀ©µµ¿ì¿¡ ÀûÀýÇÑ ¿É¼Ç¸¸ÀÌ GLUTâ¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù.
  argv ´Â mainÇÔ¼ö¿¡ »ç¿ëµÇ´Â ¼öÁ¤ÇÒ ¼ö ¾ø´Â ÇÁ·Î±×·¥ÀÇ argvº¯¼öÀÌ´Ù.

glutInit´Â GLUTÀÇ »óź¯¼ö¸¦ ÃʱâÈ­ÇÏ´Â ¿ªÇÒ°ú À©µµ¿ì½Ã½ºÅÛÀÇ ¼¼¼ÇÀ» ó¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. glutInitº¸´Ù ¸ÕÀú »ç¿ëµÉ ¼ö ÀÖ´Â ¸í·É¾î°¡ ¸î°¡Áö Àִµ¥ ÀÌ ·çƾµéÀº ¸ðµÎ glutInit-·Î ½ÃÀ۵Ǵ À̸§À» °¡Áø´Ù. ÀÌ ·çƾµéÀº ±âº» âÀ» Ãʱ⠻óÅ·Π¼³Á¤Çϴµ¥ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾îº¸ÀÚ.: 
»ç¿ë¹ý 
  glutInitWindowPosition(int x, int **y); 
  glutInitWindowSize(int width, int **height); 
  x,y  = âÀÇ ¿ÞÂÊ À­²ÀÁöÁ¡ÀÇ È­¸éÀ§Ä¡¸¦ Çȼ¿´ÜÀ§·Î Ç¥Çö 
  width,height  â Å©±â¸¦ Çȼ¿´ÜÀ§·Î ³ªÅ¸³½ °Í 

¸ðµç OpenGLÇÁ·Î±×·¥¿¡¼­ ¹Ýµå½Ã Á¦°øµÇ´Â ÃʱâÈ­·çƾÀÎ glutInitDisplayMode()µµ ÀÖ´Ù.: 
»ç¿ë¹ý 
  glutInitDisplayMode(unsigned int mode); 
  mode ´Â µð½ºÇ÷¹ÀÌ ¸ðµå¸¦ ³ªÅ¸³»´Âµ¥ ÀÌ °ªµéÀº GLUTÀÇ µð½ºÇ÷¹ÀÌ ¸ðµå¸¦ ³ªÅ¸³»´Â ºñÆ®¸¶½ºÅ©°ªÀ» OR¿¬»êÀ» ÃëÇÑ´Ù. °¡´ÉÇÑ ºñÆ®¸¶½ºÅ© °ªÀº ´ÙÀ½°ú °°´Ù.: 
GLUT_RGBA  RGBA¸ðµåÀÇ Ã¢À» ¼±ÅÃÇÑ´Ù. GLUT_RGBA³ª GLUT_INDEX·Î ÁöÁ¤µÇÁö ¾Ê´Â´Ù¸é ÀÌ °ªÀÌ ±âº»¼³Á¤°ªÀÌ µÈ´Ù. 
GLUT_RGB  GLUT_RGBA¿Í µ¿ÀÏÇÏ´Ù. 
GLUT_INDEX  À妽º¸¦ °¡Áø »ö»ó¸¸ Áö¿øÇϴ â¸ðµå¸¦ ¼±ÅÃÇÑ´Ù. GLUT_RGBAÀ§¿¡ µ¤¾î ½áÁø´Ù.. 
GLUT_SINGLE  ´ÜÀϹöÆÛ¸¦ °¡Áø âÀ» ¼±ÅÃÇÑ´Ù. ÀÌ°ªÀÌ ±âº»¼³Á¤ÀÌ´Ù. 
GLUT_DOUBLE  ÀÌÁß¹öÆÛ¸¦ °¡Áø âÀ» ¼±ÅÃÇÑ´Ù. ÀÌ °ªÀº GLUT_SINGLEÀ§¿¡ µ¤¾î ½áÁø´Ù. 
GLUT_ACCUM  ´©Àû¹öÆÛ¸¦ °¡Áø âÀ» ¼±ÅÃÇÑ´Ù. 
GLUT_ALPHA  »ö»ó¹öÆÛ¿¡ ¾ËÆÄ°ªÀ» °¡Áø âÀ» ¼±ÅÃÇÑ´Ù. 
GLUT_DEPTH  ±íÀ̹öÆÛ¸¦ °¡Áø âÀ» ¼±ÅÃÇÑ´Ù. 
GLUT_STENCIL  ÇüÆǹöÆÛ(stencil buffer)¸¦ °¡Áø âÀ» ¼±ÅÃÇÑ´Ù.
GLUT_MULTISAMPLE  ´ÙÁ߸ÊÇøµ(multismapling)À» Áö¿øÇϴ âÀ» ¼±ÅÃÇÑ´Ù.
GLUT_STEREO ÀÔüâ(stereo window)À» ¼±ÅÃÇÑ´Ù. 
GLUT_LUMINANCE ÈÖµµ¸¦ °¡Áø »ö»ó¸ðµ¨À» ´Ù·ç´Â ÀÔüâÀ» ¼±ÅÃÇÑ´Ù.
¿©±â¿¡ ¼³¸íµÈ ¸î°¡Áö Ư¡µéÀÌ ³¸¼± °ÍÀÏÁö¶óµµ °ÆÁ¤ÇÏÁö ¸¶¶ó. ºü¸¥ ½Ã°£¾È¿¡ ±×·¯ÇÑ °Íµé¿¡ ´ëÇؼ­µµ À̾߱⸦ ÇÏ°Ô µÉ °ÍÀÌ´Ù. ÀÌÁ¦ ¸î°¡Áö ¿¹¸¦ »ìÆ캸ÀÚ. ¸ÕÀú ÇϳªÀÇ °£´ÜÇÑ ·£´õ¸µ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé±â À§ÇÑ °£´ÜÇÑ ÃʱâÈ­¸¦ »ìÆ캸ÀÚ.: 

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* âÀÇ À§Ä¡¿Í Å©±â ¼³Á¤ */ 
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* µð½ºÇ÷¹À̸ðµåÇü½Ä ¼±ÅÃ:  
   Single buffer & RGBA color */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); 

/* GLUT»óÅÂÀÇ ÃʱâÈ­ */ 
glutInit(&argcp, argv);  

.....ÄÚµå »ý·« 

}; 

µÎ¹ø°´Â ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥À» À§ÇÑ ÃʱâÈ­ºÎºÐÀÌ´Ù.: 

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* âÀÇ Å©±â¿Í À§Ä¡ °áÁ¤ */ 
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* µð½ºÇ÷¹ÀÌ ¸ðµå Çü½Ä °áÁ¤: 
   ÀÌÁß¹öÆÛ¸¦ °¡Áö°í ÀÖÀ¸¸ç RGBA »ö»ó Áö¿ø */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 

/* GLUT »óŸ¦ ÃʱâÈ­ÇÑ´Ù. */ 
glutInit(&argcp, argv);  

....ÀÌÇÏ »ý·« 

}; 

ÀÌ µÎ ¿¹Á¦¸¦ ºñ±³Çϸ鼭 °è¼Ó GLUT¸¦ ¹è¿öº¸ÀÚ. °¡Àå Å« Â÷ÀÌÁ¡Àº µÎ¹ø° ¿¹Á¦°¡ ÀÌÁß¹öÆÛ·Î ÃʱâÈ­µÇ¾ú´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¾Ö´Ï¸ÞÀ̼Ç󸮿¡ ÀÌ»óÀûÀÌ¸ç ¾Ö´Ï¸ÞÀ̼ÇÀÇ ¼ø¼­¿¡ µû¶ó ÇÁ·¹ÀÓÀÌ ¹Ù²ð¶§ ³ªÅ¸³ª´Â ±ôºý°Å¸² È¿°ú¸¦ ¾ø¾ÖÁØ´Ù.

À̺¥Æ® ó¸®

¾Õ¿¡¼­ ¸»ÇßµíÀÌ GLUT´Â »óŸ¦ ´Ù·ç´Â ¶óÀ̺귯¸®ÀÌ´Ù. Áö±ÝºÎÅÍ À̺¥Æ®µéÀ» ´Ù·ç´Â ºÎºÐÀ» ÀÛ¼ºÇØ º¸ÀÚ. ÀÌ°ÍÀº °á±¹ ÀûÀýÇÏ°Ô ÃʱâÈ­½ÃŲ ´ÙÀ½ ½ÇÇàµÇ´Â ¹«ÇÑ·çÇÁ³ª ŸÀ̸Ӱ¡ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ¿¡ µû¶ó ÃʱâÈ­ÇÏ´Â µ¿¾È GLUT¿¡ ¼±¾ðµÈ ¸ðµç À̺¥Æ®µéÀ» ÇϳªÇϳª¾¿ ¸ðµÎ ó¸®ÇÑ´Ù´Â °ÍÀÌ´Ù. ¸¶¿ì½º¹öÆ° Ŭ¸¯, ⠴ݱâ, â ¸ð¾ç¹Ù²Þ, Ä¿¼­ À̵¿, Å°º¸µå ´­·¯Áü, ±×¸®°í "¾Æ¹«·± ÀԷµµ ¾ø´Â »óÅÂ"ÀÓ µîÀÇ À̺¥Æ®µé¿¡ ´ëÇØ ÀûÀýÇÑ ÇൿÀ» ÃëÇÒ ¼ö ÀÖ´Ù. ÀÌ¿ëÇÒ ¼ö ÀÖ´Â À̺¥Æ®µéÀÇ °¢ À̺¥Æ®µéÀº ¹Ýµå½Ã »ç¿ëÀÚ¿¡ ÀÇÇØ ÇØ´ç À̺¥Æ®°¡ ¹ß»ýÇß´ÂÁö¸¦ È®ÀÎÇغ¸´Â ÁÖ±âÀûÀÎ GLUTÀ̺¥Æ® ó¸® ·çÇÁ³ª ŸÀ̸ӿ¡ »ç¿ëµÉ GLUT»óź¯¼öÀÇ Çϳª·Î µî·Ï½ÃÄÑ¾ß ÇÑ´Ù.
 
¿¹¸¦ µé¾î "¸¶¿ì½º¹öÆ°ÀÌ ´­·¯Áü" À̺¥Æ®¸¦ GLUT°¡ °è¼Ó ¹ß»ýÇÏ´ÂÁö »ìÆìºÁ¾ßÇÒ À̺¥Æ®·Î µî·ÏÇÒ ¼ö ÀÖ´Ù. À̺¥Æ®´Â Äݹéµî·Ï ·çƾÀ¸·Î µî·ÏÇÑ´Ù.. ÀÌ ÇÔ¼ö´Â ¸ðµÎ glut[ƯÁ¤À̺¥Æ®]Func¶ó´Â ±ÔÄ¢¿¡ µû¶ó À̸§À» °¡Áö¸ç ¸¶¿ì½º Ŭ¸¯¿¡ ´ëÇÑ À̺¥Æ®Ã³¸®´Â glutMouseFunc°¡ µÉ °ÍÀÌ´Ù. Äݹéµî·ÏÀº GLUT¿£Áø¿¡°Ô ¾î¶² ƯÁ¤ÇÑ À̺¥Æ®°¡ ¹ß»ýÇϸé ÀûÀýÇÑ »ç¿ëÀÚÁ¤ÀÇÇÔ¼ö¸¦ ½ÇÇàÇϵµ·Ï ÇØÁØ´Ù. ±×·¡¼­ ¸¸¾à ¸¶¿ì½ºÀÇ ¿ÞÂʹöÆ°ÀÌ ´­·¯Á³À»¶§ ½ÇÇàµÉ ·çƾÀ» MyMouse¶ó ÇÑ´Ù¸é(¹°·Ð ¿À¸¥ÂʹöÆ°µµ °¡´ÉÇÏ´Ù.) ÀÌ °æ¿ì main()ÇÔ¼ö¿¡¼­ glutInit()´ÙÀ½¿¡ "glutMouseFunc(MyMouse);"¶ó Àû¾îÁÜÀ¸·Î½á ÀÚ½ÅÀÇ ÄݹéÇÔ¼ö¸¦ µî·ÏÇÒ ¼ö ÀÖ´Ù.

GLUT¿¡¼­ ó¸®ÇÒ ¼ö ÀÖ´Â ÄݹéÇÔ¼ö¿Í À̺¥Æ®µéÀº µÚ¿¡ »ìÆ캸±â·Î ÇÏÀÚ. Áö±Ý Áß¿äÇÑ °ÍÀº ¿ì¸®µéÀÇ ÇÁ·Î±×·¥¿¡¼­ Áß¿äÇÑ À̺¥Æ®µéÀÌ µî·ÏµÈ ´ÙÀ½ glutMainLoop()¶ó´Â GLUTÀÇ À̺¥Æ®Ã³¸®·çƾÀ» ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö¸¦ Çѹø ½ÇÇàÇϸé ÇÁ·Î±×·¥Àº ±âº»ÀûÀ¸·Î ¹«ÇÑ·çÇÁ»óÅ·Πµé¾î°£´Ù. ÀÌ ÇÔ¼ö´Â ÀÌ¹Ì µî·ÏÇÑ ÄݹéÇÔ¼ö¸¦ ÇÊ¿ä¿¡ µû¶ó È£ÃâÇÑ´Ù. µû¶ó¼­ ¸ðµç OpenGLÇÁ·Î±×·¥Àº glutMainLoop()¸í·É¹®À¸·Î ³¡³­´Ù. ¾Ö´Ï¸ÞÀ̼ÇÀÇ °æ¿ì¸¦ »ìÆ캸ÀÚ.

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* GLUT »óÅ ÃʱâÈ­*/ 
glutInit(&argcp, argv);  
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* âÀ» ¿¬´Ù. */ 
glutCreateWindow("My OpenGL Application"); 

/* µð½ºÇ÷¹ÀÌ ¸ðµå¸¦ ¼±ÅÃÇÑ´Ù.:  
   ÀÌÁß¹öÆÛ & RGBA »ö»ó */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
 

/* ÄݹéÇÔ¼ö µî·Ï */ 
..... 

/* À̺¥Æ® 󸮿£Áø ½ÃÀÛ */ 
glutMainLoop(); 
}; 

¾Õ¿¡¼­ ¼³¸íÇÏÁö ¾ÊÀº ¸î°¡Áö Ưº°ÇÑ Äڵ尡 ´«¿¡ ¶é °ÍÀÌ´Ù. glutCreateWindow(char **name)´Â GLUTÀÇ À©µµ¿ì¸¦ °ü¸®ÇÏ´Â ·çƾÀÇ ÇϳªÀÌ´Ù. ÀÌ ÇÔ¼ö´Â À̸§¸¸ ôº¸¸é ¾î¶² ÀÏÀ» ÇÏ´ÂÁö ¹Ù·Î ¸íÈ®ÇÏ°Ô ¾Ë ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öÀ̸§Àº OpenGL°ú GLUTÀÇ ¼³°èöÇÐÁß¿¡¼­ ÇÊÀÚ°¡ Àû±ØÀûÀ¸·Î Âù¼ºÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ½ÇÁ¦·Î OpenGLÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ Ã¢À» »ç¿ëÀÚÀÇ À©µµ¿ì½Ã½ºÅÛ¿¡¼­ »ý¼ºÇϵµ·Ï ¸í·ÉÀ» Àü´ÞÇÏ´Â ¿ªÇÒÀ» ´ã´çÇÑ´Ù. ÀÌ Ã¢ÀÇ À̸§Àº ¹®ÀÚ¿­"name"À¸·Î Àü´ÞµÈ´Ù. XÀ©µµ¿ì ȯ°æ¿¡¼­ ÀÌ À̸§Àº âÀÇ À­ÂÊ ¿ÞÂÊ ¸ð¼­¸®¿¡ ¾²¿©Áø´Ù. GLUT°¡ ´ã´çÇϴ âÀÇ °ü¸®ºÎºÐÀº ¼ö½Ã·Î È®ÀÎÇؾßÇÒ ´Ù¾çÇÑ ¸¹Àº ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. Áö±Ý±îÁöµ¿¾È À̾߱âÇÑ °ÍÀ̸é ÃæºÐÇÏ´Ù. ÀÌÁ¦ ´Ù½Ã glutInit()ÇÔ¼ö µÚ¿¡ µÑ ¼ö ÀÖ´Â ÃʱâÈ­·çƾµéÀ» ´Ù½Ã ¹èÄ¡½ÃÅ°¸é µÈ´Ù.

º»·ÐÀ¸·Î µ¹¾Æ°¡¼­..ÇÊÀÚ´Â ¾Ö´Ï¸ÞÀ̼ÇÇÁ·Î±×·¥¿¡¼­ ¸Å¿ì ±âº»ÀûÀÎ µÎ°³ÀÇ Äݹéµî·ÏÇÔ¼ö¸¦ µî·ÏÇÏ´Â ¹æ¹ýÀ» ¼Ò°³ÇÒ±î ÇÑ´Ù. glutDisplayFunc´Â ÇöÀçâÀ» ½ÇÁ¦·Î º¸¿©ÁÖ´Â ±â´ÉÀ» Á¤ÀÇÇÏ°í ÀÖÀ¸¸ç, glutIdleFunc´Â ¾Æ¹«·± ÀÔ·ÂÀÌ ¾øÀ» ¶§ ¼öÇàÇÏ´Â ±â´ÉÀ» Á¤ÀÇÇÏ°í ÀÖ´Ù. ÀÌ µÎ µî·ÏÇÔ¼ö´Â ¸ðµÎ void *(void)ÇüÀÇ ÇÔ¼öÀ̾î¾ß ÇÑ´Ù. ¸ÕÀú ¾Ö´Ï¸ÞÀ̼ÇÇÁ·Î±×·¥¿¡ Ãß°¡µÈ µÎ°³ÀÇ ÄݹéÇÔ¼ö¸¦ À̾߱â Çϸé void MyDisplay(void)´Â ½ÇÁ¦·Î ¿ì¸®°¡ ¿øÇÏ´Â È­¸éÀ» â¿¡ ±×·ÁÁÖ´Â OpenGL¸í·É¾îµîÀ» È£ÃâÇÏ´Â °ÍÀ» ´ã´çÇϸç void MyIdle(void)´Â »ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ ¾øÀ»¶§ °è¼Ó È£ÃâµÇ¾îÁø´Ù. GLUTÀÇ ¹«ÇÑ·çÇÁ(glutMainLoop())ÇÏ¿¡¼­ À̺¥Æ®Ã³¸®´Â °è¼Ó ÀÌ·ç¾îÁö¸ç ¸¸¾à ¾Æ¹«·± »õ·Î¿î À̺¥Æ®µµ ¹ß»ýÇÏÁö ¾Ê´Â´Ù¸é ±×¶§´Â MyIdleÇÔ¼ö°¡ ´ã´çÇÑ´Ù. ¿Ö ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥¿¡ ¾Æ¹«·± ÀÔ·ÂÀÌ ¾øÀ»¶§ÀÇ ÄݹéÇÔ¼ö¸¦ µî·Ï½ÃÄÑÁÖ¾î¾ß Çϴ°¡? ¸¸¾à »ç¿ëÀÚÀÇ ÀԷ°ú´Â »ó°ü¾øÀÌ °è¼ÓÇؼ­ °¢ ÇÁ·¹ÀÓÀÇ ±×¸²À» ¹Ù²ã±×·ÁÁÖ¾î¾ß ÇϹǷΠOpenGLÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´Â µ¿¾È Mydisplay()¿¡¼­ ±×¸®±â Àü¿¡ °¢ ÇÁ·¹ÀÓÀ» ¹ÙÂåÁÖ´Â ±â´ÉÀ» ÇØÁÖ´Â ÇÔ¼ö(½¬°íÀÖ´Â »óÅÂ(idle) ÄݹéÇÔ¼ö)°¡ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

¾Ö´Ï¸ÞÀÌ¼Ç ¿¹

ÀÌÁ¦ Çϳª·Î ±ò²ûÇÏ°Ô µÈ ¾Ö´Ï¸ÞÀ̼ÇÄڵ带 »ìÆ캸ÀÚ.: 
#include <GL/glut.h> 

void MyIdle(void){ 
/* »ç¿ëµÈ º¯¼ö°ªÀ» ´ÙÀ½ ÇÁ·¹ÀÓÀÇ »óÅ·Π¼öÁ¤ÇØ ÁִºκÐ*/ 
.... 
}; 

void MyDisplay(void){ 
/* ÇÁ·¹ÀÓ¿¡ ½ÇÁ¦ ±×¸²À» ±×¸®´Â OpenGL¸í·É¾îµéÀÌ µé¾î°£´Ù. */ 
.... 
/* ÇÁ·¹ÀÓÀÌ ´Ù ±×·ÁÁø ´ÙÀ½ ¹öÆÛ¸¦ ±³Ã¼ÇÑ´Ù. */ 
glutSwapBuffers(); 
}; 

void main(int argcp, char **argv){ 

/* GLUT»óŸ¦ ÃʱâÈ­ ÇÑ´Ù. */ 
glutInit(&argcp, argv);  
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* âÀ» ¿¬´Ù. */ 
glutCreateWindow("My OpenGL Application"); 

/* µð½ºÇ÷¹À̸ðµå¸¦ ¼±ÅÃÇÑ´Ù.:  
   ÀÌÁß¹öÆÛ & RGBA»ö»ó */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 

/* ÄݹéÇÔ¼öµéÀ» µî·ÏÇÑ´Ù. */ 
glutDisplayFunc(MyDisplay) 
glutIdleFunc(MyIdle) 

/* À̺¥Æ® 󸮿£ÁøÀ» ½ÃÀÛÇÑ´Ù */ 
glutMainLoop(); 
}; 

ÇÊÀÚ´Â MyDisplayµÚ¿¡ »õ·Î¿î GLUTÇÔ¼öÀÎ glutSwapBuffers()¸¦ Ãß°¡ÇÏ¿´´Ù. ÀÌ ¸í·ÉÀº ¾Ö´Ï¸ÞÀ̼ǿ¡ ´ë´ÜÈ÷ À¯¿ëÇÏ´Ù. ÀÌ¹Ì ÇÁ·Î±×·¥¿¡¼­´Â Çϳª´Â º¸¿©Áö°í Çϳª´Â ¼û°ÜÁø ÀÌÁß¹öÆÛ¸ðµåÀÇ Ã¢À» »ç¿ëÇÏ°í ÀÖ´Ù. ÀÌ °æ¿ì OpenGLÀÇ ±×¸®´Â ¸í·É¾îµéÀº Ç×»ó ¼û°ÜÁø ¹öÆÛ¿¡ ·£´õ¸µÀ» ¼öÇàÇÑ´Ù. glutSwapBuffers¸í·ÉÀÌ È£ÃâµÇ¸é ¿ÏÀüÈ÷ ´Ù ±×·ÁÁø ¼û°ÜÁ® ÀÖ´ø ¹öÆÛ°¡ º¸¿©Áö°Ô µÇ´Â ¹öÆÛ±³È¯ÀÌ ÀÌ·ç¾îÁø´Ù. ÀÌ ±â¹ýÀº ¾Ö´Ï¸ÞÀ̼ǿ¡¼­ »ç¶÷µéÀÇ ´«ÀÌ ÇÁ·¹ÀÓ´ÜÀ§·Î ±×·ÁÁö´Â °ÍÀ» ´«Ä¡Ã¤Áö ¸øÇϵµ·Ï Çϱ⠶§¹®¿¡ ÄÄÇ»Å;ִϸÞÀ̼Ǻо߿¡¼­ ÀϹÝÀûÀÎ ±â¹ýÀÌ´Ù.

OpenGLÀÀ¿ëÇÁ·Î±×·¥°³¹ßÀ» ½ÃÀÛÇϱâ À§ÇÑ ÃæºÐÇÑ Á¤º¸µéÀ» »ìÆ캸¾Ò´Ù. ´Ü ÇÑ°¡Áö ºüÆ®¸° °ÍÀÌ ÀÖ´Ù¸é ½ÇÁ¦·Î ±×¸²ÀÌ ±×·ÁÁö´Â MyDisplay³»ÀÇ OpenGL¸í·É¾îµéÀÌ´Ù...ÀÌ°ÍÀº ½ÇÁ¦·Î µû¸¥ À̾߱âÀÌ´Ù ;-)

GLUT¿¬Àç ´ÙÀ½È¸¿¡¼­´Â GLUT¿¡¼­ »ç¿ëÇÒ ¼ö Àִ â °ü¸®ºÎºÐÀÇ ÇÔ¼öµéÀ» Á»´õ ±íÀÌ ´Ù·ïº¸±â·Î ÇÏ°Ú´Ù. ±×¸®°í µ¿ÀÏÇÑ Ã¢¿¡ ¿©·¯°³ÀÇ Àå¸éÀ» ¾î¶»°Ô ±×¸®´Â°¡ ÇÏ´Â ¹æ¹ý°ú À̽ļº ¹× ¸Þ´º¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆ캸°Ú´Ù. ´õ ¸¹Àº Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é:




¹ø¿ª : ÀÌÁÖÈ£


º» À¥»çÀÌÆ®´Â Miguel Angel Sepulveda¾¾¿¡ ÀÇÇØ °ü¸®µË´Ï´Ù.
© Emre Demiralp 1998
LinuxFocus 1998