Miguel Angel Sepulveda ÇÊÀÚ¿¡°Ô ¿¬¶ôÇϱâ example2.cMakefile |
OpenGLÇÁ·Î±×·¡¹Ö : ¼±¿¡ ´ëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¸ÀÚ¼± ±×¸®±âÁö³ ½Ã°£¿¡ ¿ì¸®´Â OpenGL¿¡¼ ¾î¶»°Ô ´Ù°¢ÇüÀ» ÀÌ·ç´Â ±âº» ¿ä¼ÒµéÀ» »ìÆ캸¾Ò´Ù. ½ÇÁ¦·Î OpenGLÀº Á¡,Á÷¼±,´Ù°¢Çü, Á¶±×¸¸ »ï°¢Çü ³»Áö »ç°¢ÇüµéÀÇ ÁýÇÕÀ¸·Î ÀÌ·ç¾îÁø ¸éµî Áö¿øÇÏ´Â ±âº» Çü»ó°´Ã¼°¡ ¸î°³µÇÁö ¾Ê´Â´Ù. ÀÌ·± OpenGLÀÇ ´Ü¼øÇÔ¿¡ ³»Æ÷µÈ Àǹ̴ °á±¹ ÀÌ·¯ÇÑ °£´ÜÇÑ °´Ã¼µéÀ» ÀÌ¿ëÇÏ¿© º¹ÀâÇÑ ±âÇÏÇÐÀû ¸ðµ¨À» ¸¸µå´Â °ÍÀº °³¹ßÀÚ¿¡ ´Þ·ÁÀÖ´Ù´Â °ÍÀÌ´Ù. OpenGL¿¡´Â Á¡,¼±,´Ù°¢ÇüµéÀ» ÀÚ¼¼È÷ ´Ù·ê¼ö ÀÖ´Â ¸¹Àº ¸í·É¾îµéÀÌ Á¸ÀçÇÑ´Ù. ¸¸¾à Á¡ÀÇ Å©±â¸¦ Á¤ÇØÁÖ°í ½Í´Ù¸é glPointSize¸í·ÉÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù.: void glPointSize(GLfloat size) Á¡ÀÇ Å©±â´Â ±âº»ÀûÀ¸·Î 1.0À¸·Î ÁÖ¾îÁ® ÀÖÀ¸¸ç, À§ ÇÔ¼ö¿¡¼ size´Â ¹Ýµå½Ã 0º¸´Ù Ä¿¾ß ÇÑ´Ù. Á¡ÀÇ Å©±â¸¦ ½Ç¼öÇüÀ¸·Î ¼³Á¤ÇÑ´Ù´Â Á¡À» ±â¾ïÇÏÀÚ. Á¡°ú ¼±ÀÇ Å©±â¸¦ ºÐ¼ö²Ã·Î ³ªÅ¸³»´Â °Í ¿ª½Ã °¡´ÉÇÏ´Ù. OpenGLÀº ·»´õ¸µ ÄÁÅؽºÆ®¿¡ µû¶ó ºÐ¼öÇüÀ¸·Î ÁÖ¾îÁø Á¡ÀÇ Å©±â¸¦ Çؼ®Çؼ ½ÇÇàÇÑ´Ù. ¸¸¾à ¾ÈƼ-¾Ù¸®¾î½Ì(Anti-aliasing)¸ðµå¸¦ Äѵξú´Ù¸é OpenGLÀº ºÐ¼öÇü ÆøÀ» ³ªÅ¸³»±âÀ§ÇÏ¿© ¾à°£ÀÇ ¼öÁ¤ÀÌ ÇÊ¿äÇÑ ¼±À̶ó ÀǽɵǴ ºÎºÐÀ» ã¾Æ ÀαÙÀÇ Çȼ¿À» º¸°í ¼öÁ¤À» ÇÑ´Ù.¾ÈƼ¾Ù¸®¾î½ÌÀº ÀúÇØ»óµµÀÇ ¸ð´ÏÅÍ¿¡¼ Á÷¼±À» º¸¿©ÁÙ¶§ ¹ß»ýÇÏ´Â ²÷±ä °è´Ü¸ð¾çÀ» Á¦°ÅÇØ ÁÖ±â À§ÇÏ¿© »ç¿ëµÇ¾îÁö±âµµ ÇÏ´Â ±â¹ýÀÌ´Ù. ¸¸¾à ¾ÈƼ¾Ù¸®¾î½Ì¸ðµå°¡ ²¨Á®ÀÖ´Ù¸é glPointSize¿¡¼ ÁØ Á¡/¼±ÀÇ Å©±â(size)´Â ¹Ý¿Ã¸²µÇ¾î °¡±î¿î Á¤¼ö·Î ¹Ù²ï´Ù. Á¡ÀÇ ½ÇÁ¦ Å©±â´Â ÀåÄ¡¿¡ µû¶ó ´Ù¸£´Ù. µû¶ó¼ ³·Àº ÇØ»óµµÀÇ ¸ð´ÏÅÍ¿¡¼ º¸¸é Á¡ÀÌ ´õ Ä¿º¸À̰ԵȴÙ. ±×·¯³ª Ç÷ÎÅÍ¿Í °°ÀÌ ¸Å¿ì ³ôÀº Çػ󵵸¦ °¡Áø ÀåÄ¡¿¡¼ ±âº»°ª 1·Î ¼³Á¤µÈ ¼±À» ±×¸°´Ù¸é °ÅÀÇ º¼ ¼ö ¾øÀ»Á¤µµÀÇ µÎ²²¸¦ °¡Áø ¼±ÀÌ ±×·ÁÁø´Ù. ½ÇÁ¦·Î ±×·ÁÁö´Â ¼±ÀÇ µÎ±ú¸¦ ¾Ë°í½Í´Ù¸é ¿©·¯ºÐÀº ¸ÕÀú Ãâ·ÂÀåÄ¡ÀÇ Á¤È®ÇÑ »ç¾ç°ú Çػ󵵸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ¼±ÀÇ ±½±â´Â glLineWidthÇÔ¼ö¿¡¼ ¼³Á¤ÇÒ ¼ö Àִµ¥, ÀÌ ÇÔ¼ö´Â ¼±À» ±×¸®´Â ºÎºÐÀÌ µé¾îÀÖ´Â glBegin() - glEnd() ÀÌÀü¿¡ È£ÃâµÇ¾î¾ß »õ·Î¿î ±½±â°¡ Àû¿ëµÇ¾î ±×·ÁÁø´Ù. »ç¿ë¹ýÀº ÀÌ·¸´Ù.: void glLineWidth(GLfloat width) OpenGLÀÇ ½ÇÇà¿¡¼ ¾ÈƼ¾Ù¸®¾î½ÌµÇÁö ¾Ê´Â ¼±ÀÇ µÎ²²·Î Á¤ÇÒ ¼ö ÀÖ´Â ¹üÀ§´Â ÃÖ´ë ¾ÈƼ¾Ù¸®¾î½Ì¼±ÀÇ µÎ²²±îÁö·Î Á¦ÇѵǾî Àֱ⶧¹®¿¡ ¹Ý¿Ã¸²µÇ¾î ºñ½ÁÇÑ Á¤¼ö°ªÀÌ »ç¿ëµÈ´Ù. ¼±ÀÇ µÎ²²´Â Á÷¼±ÀÇ ¼öÁ÷¹æÇâÆøÀ» ³ªÅ¸³»´Â °ÍÀÌ ¾Æ´Ï´Ù. ¸¸¾à ±â¿ï±â°¡ 1º¸´Ù ÀÛ´Ù¸é yÃà¹æÇâÀÌ Å©±â°¡ µÇ¸ç ¹Ý´ë·Î 1º¸´Ù Å©´Ù¸é x¹æÇâÀÇ ±â¿ï±âÀÇ Àý´ë°ªÀÌ ¼±ÀÇ Å©±â°¡ µÈ´Ù´Â °ÍÀ» ¸í½ÉÇÏÀÚ. À̹ø´Þ¿¡´Â °£´ÜÇÏÁö¸¸ À¯¿ëÇÑ 2Â÷¿ø ¾Ö´Ï¸ÞÀ̼ÇÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ. ÀÌ ÇÁ·Î±×·¥Àº ¿©·¯ºÐÀÌ ÀÛ¼ºÇÏ´Â OpenGLÇÁ·Î±×·¥¿¡¼ ´Ù¾çÇÑ µÎ²²¸¦ °¡Áø ¼±À» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ÀÌÇØÇϴµ¥ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. (example2.c, Makefile). ³ª´Â ¸ÕÀú ¾çÀÚ¹°¸®ÇÐÃ¥¿¡¼ ¿¹Á¦¸¦ ã¾Ò´Ù. ¹°¸®ÇÐÃ¥À» º¸¸é "a quantum particle trapped in a double well potential."¶ó´Â ¸»ÀÌ ³ª¿Â´Ù. ¿Ö ±×·¸°Ô µÇ³Ä¸é...À½ ³ªµµ Àؾî¹ö·È´Ù. ¾î·µç ¹°¸®ÇÐÀ» Àü°øÇÏ´Â Çлýµé¿¡°Ô ½´·Úµù°Å ¹æÁ¤½Ä¿¡¼ ½Ã°£ÀÌ Áõ°¡ÇÒ¶§¸¶Å¸ ¾î¶»°Ô °ªÀÌ º¯Çϴ°¡¸¦ º¸¿©Áִµ¥ À¯¿ëÇÑ ±×¸²À» ±×¸± ¼ö ÀÖ´Ù. À̺о߸¦ Àü°øÇÏÁö¾Ê´Â »ç¶÷µéÀº ±×³É ½±°ÔÀÌÇصÇÁö ¾Ê´Â ¾çÀÚ¿ªÇÐÀÇ ¼Ó¼ºÀ» »ìÆ캸¸é µÈ´Ù. ¾çÀÚ¿ªÇп¡¼ ÀÔÀÚ´Â À§Ä¡¿Í ¼Óµµ·Î Ç¥ÇöµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾çÀÚÆĶó´Â ÆÄÇüÀ¸·Î ³ªÅ¸³½´Ù.¿ì¸®°¡ ÀÛ¼ºÇÑ ¾Ö´Ï¸ÞÀ̼ǿ¡¼ º¸¶ó»ö ½Ç¼±À¸·Î ³ªÅ¸³½ ºÎºÐÀÌ ¾çÀÚÆĸ¦ ³ªÅ¸³½´Ù. ÀÌ°ÍÀº ÁÖ¾îÁøÀ§Ä¡(ÇϾá Á¡¼±)¿¡¼ ÀÔÀÚ¸¦ °üÃøÇÒ ¼ö ÀÖ´Â È®·ü°ªÀÇ Á¦°ö°ªÀ» ÀǹÌÇÑ´Ù.: ±×¸² 1. ¾çÀÚ ½Ã¹Ä·¹ÀÌ¼Ç ½º³À¼¦ »ó¹ÌºÐ¹æÁ¤½ÄÀ» Ç®¶§ ÀÌ·ç¾îÁö´Â ¸î¸î °úÁ¤µéÀº Æĵ¿¹æÁ¤½ÄÀÌ °í¼Ó Ç»¸®¿¡º¯È¯ ½ºÇø´¿¬»êÀÚ ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÀûºÐµÈ´Ù. ÀÌ ¹æ¹ýÀº ´Ù¸¥ ¹«Çѹ̺йý¿¡ ºñÇØ ºü¸£°í Á¤È®ÇÑ ÀåÁ¡ÀÌ ÀÖ´Ù. ÀÌ ¹æ¹ýÀº ºñ¼±Çü Æĵ¿ È®»ê¿¡µµ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù;½Ã°£Áõ°¡¸¦ ÃÊ´ÜÀ§·Î Çϵµ·Ï ÇÏ°í(¶Ç´Â ´õ ³ôÀº ´ÜÀ§·Î ÇÒ ¼öµµ ÀÖ´Ù) À§Ä¡³ª ¸ð¸àÅÒ(ÁÖÆļö)¿¡¸¸ ÀÇÁ¸ÇÏ°Ô ÇÑ´Ù¸é Æĵ¿ÇÔ¼ö´Â À§Ä¡¿Í ¸ð¸àÅÒ(ÁÖÆļö)°ø°£»çÀ̸¦ ¿Ô´Ù°¬´ÙÇÏ¸é¼ ¹Ù²î´Â ÀÌ ¿¬»êÀÚ¸¦ Àû¿ëÇÏ¿© ½Ã°£¿¡ ¿¬¼ÓÀûÀÎ °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼Ò½ºÄÚµåÀÇ ÁÖ¿äºÎºÐÀº ´Ù¸¥ ¸¹Àº ÀÀ¿ëÇÁ·Î±×·¥¿¡¼µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀº ÇÊÀÚ°¡ ÀÛ¼ºÇÑ ½Ã°£ÀÇÁ¸ÇÔ¼ö¿¡ µû¶ó ÀÌ·ç¾îÁö´Â ¾çÀڽùķ¹À̼ÇÀ» Áö¿ö¹ö¸®¸é ´õ ³ªÀº ¾Ö´Ï¸ÞÀ̼ÇÀ» ¿©·¯ºÐÀÇ ÄÄÇ»ÅÍ¿¡¼ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ±×·¡ÇÁ¸¦ ±×¸®´Â ÇÔ¼ö³ª µ¥ÀÌÅÍÆÄÀÏÀ» ÀÐ¾î¼ ±×·¡ÇÁ¸¦ ±×·ÁÁÖ´Â °£´ÜÇÑ OpenGL±â¹ÝÀÇ gnuplotµµ ÀÛ¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©·¯ºÐÀÌ °è¼Ó GLUT¿Í OpenGL¿¡ °üÇÑ ¿¬Àç±â»ç¸¦ Àоî¿Ô´Ù¸é ÀÌ ¼Ò½ºÄÚµå´Â ¸Å¿ì °£´ÜÇÏ°í ÀÌÇØÇϱ⠽¬¿ï°ÍÀÌ´Ù.(¹°·Ð ¾çÀÚ¿ªÇкκÐÀº Á¦¿ÜÇÑ´Ù.) ¼Ò½º¿¡ Ưº°ÇÑ ÇÔ¼ö³ª ƯÀÌ»çÇ×Àº ´«¿¡ ¶çÁö ¾Ê´Â´Ù.main()¿¡¼ ¿ì¸®´Â ÀÌÁß¹öÆÛ¸ðµå·Î ´ÜÀÏÀ©µµ¿ì¸¦ ¿¬ ´ÙÀ½ Æĵ¿ÇÔ¼ö¸¦ ±×¸®°í °¢°¢ÀÇ Æĵ¿¹æÁ¤½ÄÀ» ÅëÇÕÇÏ´Â ÀÛ¾÷À» ´ã´çÇÏ´Â display()¿Í idle()ÇÔ¼ö¸¦ Àü´ÞÇÑ´Ù. ´Ù½ÃÇѹø idel()ÇÔ¼ö¿¡ ¾î¶² ±â´ÉÀÌ µé¾î°¥Áö »ý°¢Çغ¸ÀÚ. ÀÌ ±ÛÀÇ ³»¿ëÀ» ÀÌÇØÇϱâÀ§ÇØ ´Ù¸¥ ¸ðµç°Í(¾çÀÚ¿ªÇÐÀû Áö½Äµîµî)À» ¾Ë°íÀÖ¾î¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. Á¤¸» »õ·Î¿î OpenGLÀÇ ±â´ÉÀº display ÄݹéÇÔ¼öÀÌ´Ù: void display (void) { static char label[100]; float xtmp; /* ±×·ÁÁú ºÎºÐÀ» Áö¿î´Ù. */ glClear (GL_COLOR_BUFFER_BIT); /* °¢ÁÖ¸¦ ´Ü´Ù.*/ glColor3f (0.0F, 1.0F, 1.0F); sprintf (label, "(c)Miguel Angel Sepulveda 1998"); glRasterPos2f (-1.1, -1.1); drawString (label); /* ¹Ì¼¼ÇÑ °ÝÀÚ¸¦ ±×¸°´Ù. */ glLineWidth (0.5); glColor3f (0.5F, 0.5F, 0.5F); glBegin (GL_LINES); for (xtmp = -1.0F; xtmp < 1.0F; xtmp += 0.05) { glVertex2f (xtmp, -1.0); glVertex2f (xtmp, 1.0); glVertex2f (-1.0, xtmp); glVertex2f (1.0, xtmp); }; glEnd (); /* ¿Ü°¢ÀÇ ³×¸ðºÎºÐÀ» ±×¸°´Ù.*/ glColor3f (0.1F, 0.80F, 0.1F); glLineWidth (3); glBegin (GL_LINE_LOOP); glVertex2f (-1.0F, -1.0F); glVertex2f (1.0F, -1.0F); glVertex2f (1.0F, 1.0F); glVertex2f (-1.0F, 1.0F); glEnd (); /* °ÝÀÚ(±×¸®µå)¸¦ ±×¸°´Ù.*/ glLineWidth (1); glColor3f (1.0F, 1.0F, 1.0F); glBegin (GL_LINES); for (xtmp = -0.5; xtmp < 1.0; xtmp += 0.50) { glVertex2f (xtmp, -1.0); glVertex2f (xtmp, 1.0); glVertex2f (-1.0, xtmp); glVertex2f (1.0, xtmp); }; glEnd (); /* ÁÂÇ¥ÃàÀ» ±×¸°´Ù.*/ glLineWidth (2); glBegin (GL_LINES); glVertex2f (-1.0, 0.0); glVertex2f (1.0, 0.0); glVertex2f (0.0, -1.0); glVertex2f (0.0, 1.0); glEnd (); /* Ãà¿¡ ±ÛÀ» Àû´Â´Ù.*/ glColor3f (1.0F, 1.0F, 1.0F); sprintf (label, "Position"); glRasterPos2f (0.80F, 0.025F); drawString (label); glColor3f (1.0F, 0.0F, 1.0F); sprintf (label, " Quantum Probability "); glRasterPos2f (0.025F, 0.90F); drawString (label); glColor3f (1.0F, 1.0F, 1.0F); sprintf (label, " Real(Psi) "); glRasterPos2f (0.025F, 0.85F); drawString (label); /* Æĵ¿ÇÔ¼ö¸¦ ±×¸°´Ù. */ psiDraw (NR_POINTS, psi, x); /* Æ÷ÅÙ¼ÈÇÔ¼ö¸¦ ±×¸°´Ù.*/ potentialDraw (NR_POINTS, potential, x); glutSwapBuffers (); }; ¸ÇóÀ½ ÇÑ ÀÛ¾÷Àº Ä÷¯¹öÆÛºñÆ®¸¦ Áö¿ì´Â ÀÛ¾÷ÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é ±ú²ýÇÑ(°ËÀº) ±×¸²ÆÇÀ» ¿ì¸®´Â ¾ò°Ô µÈ´Ù. ±× ´ÙÀ½ glRasterPos¿Í glutBitmapCharacterÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °¢ÁÖ¸¦ ´Ü´Ù. (drawstringÀº glutÀ¯Æ¿¸®Æ¼¸¦ À§ÇÑ Æ÷ÀåÁö(wrapper)¿¡ ºÒ°úÇÏ´Ù) ´ÙÀ½ °Á¿¡¼ ´Ù½Ã ÀÚ¼¼È÷ »ìÆ캼 glRasterPosÇÔ¼ö´Â ÅؽºÃÄ ·»´õ¸µÀ» À§ÇÑ ºÎ°¡ÇÔ¼öÀÌ´Ù. OpenGLÀ̳ª GLUT´Â ±×·¡ÇÈ À©µµ¿ì¿¡ ±ÛÀÚ¸¦ ·»´õ¸µÇÏ´Â °£´ÜÇÏ¸é¼ °·ÂÇÑ ¹æ¹ýÀ» Á¦°øÇØ ÁÖÁö ¾Ê´Â´Ù. The glutBitmapCharacterÇÔ¼ö´Â ±Û²Ã ºñÆ®¸Ê¿¡¼ Ä÷¯ ¹öÆÛ·Î ±âº»ÀûÀÎ ·¡½ºÆÃÀÛ¾÷À» ¼öÇàÇÑ´Ù. ÁÖ¼®À» ´Þ°í³ ´ÙÀ½ ¿Ü°¢»ç°¢Çü, ¹è°æÈ¸é °ÝÀÚ, ÁÂÇ¥Ãàµî ¸¹Àº ÁÙÀ» ±×¸®´Â ºÎºÐÀÌ ¿Â´Ù. ¹°·Ð ÇöÀç °î¼±Àº psiDraw ¿Í potentialDraw¿¡¼ ±×·ÁÁø´Ù. Á÷¼±À» ±×¸®±â Àü¿¡ ±×¸®°íÀÚ ÇÏ´Â ¼±ÀÇ µÎ²²¸¦ Çȼ¿´ÜÀ§·Î Á¤ÇØÁÖ´Â glLineWidthÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. ±×¸² 1Àº ¸®´ª½º¾ËÆĸӽÅÀÇ XÀ©µµ¿ì ½Ã½ºÅÛ¿¡¼ Ãâ·ÂµÈ ȸéÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥À» À©µµ¿ì 95¿¡¼ ÄÄÆÄÀÏÇؼ ½ÇÇà½ÃÄ×¾ú´Âµ¥ ¸¹Àº ½Ã°£ÀÌ °É·È´Ù. ¿Ö ±×·±Áö ÇÊÀÚ°¡ µµ¹«Áö ¾Ë¾Æ³¾¼ö ¾ø¾ú´Ù. ¾Æ¸¶µµ SGI OpenGLµå¶óÀ̹ö¿¡¼ ¾ÈƼ¾Ù¸®¾î½Ì±â´ÉÀ» Áö¿øÇØÁÖÁö ¾Ê±â¶§¹®ÀÌ ¾Æ´Ò±î½Í´Ù. ¿ø¸®ÀûÀ¸·Î ¼·Î ´Ù¸¥ ÆøÀ¸·Î ¼±À» ±¸ºÐÇÏ´Â °ÍÀº ¸Å¿ì Èûµé´Ù. ±×¸®°í ¹è°æÀÇ °ÝÀÚ¼±Àº °°ÀÌ ±×·ÁÁ®¾ß ÇÑ´Ù. ÀÌ·± °áÇÔµéÀº ³ôÀº Çػ󵵿¡¼ ±×¸±¶§ ³ªÅ¸³ª´Âµ¥ ³·Àº Çػ󵵸¦ °¡Áö´Â ¸ð´ÏÅͶ§¹®¿¡ »ý±ä°ÍÀº ¾Æ´Ï´Ù. ¾î·µç À©95/NT¿¡¼ º¸´Ù ¸®´ª½ºÀÇ XÀ©µµ¿ì½Ã½ºÅÛ¿¡¼ ¼º´ÉÀÌ ´õ ¶Ù¾î³µ¾ú´Ù´Â Á¡À» ´Ù½Ã Çѹø ¸»ÇصдÙ. display() ÇÔ¼ö¿¡¼ ¼±À» ±×¸®´Â µÎ°¡Áö ¹æ½ÄÀÌ ÀÖ´Ù. GL_LINES¸ðµå´Â ¼±À» ÀÌ·ç´Â µÎ Á¤Á¡À» °è¼Ó ÀÔ·ÂÇÏ´Â ¹æ½ÄÀ̸ç GL_LINE_LOOP¸ðµå´Â ¸¶Áö¸·¿¡ Æó·çÇÁÀ» Çü¼ºÇÑ´Ù. ¾ÈƼ¾Ù¸®¾î½Ì±â´Éreshape() ÄݹéÇÔ¼ö¿¡ ¼±À» ±×¸±¶§ ¾ÈƼ¾Ù¸®¾î½º¸ðµåµµ °¡´ÉÇϵµ·Ï ÇÏ¿´´Ù. void reshape (int w, int h) { glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glViewport (0, 0, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluOrtho2D (-1.2, 1.2, -1.2, 1.2); glEnable (GL_LINE_SMOOTH); /* ¾ÈƼ¾Ù¸®¾î½Ì µÈ Á÷¼±À» ±×¸±¼ö ÀÖ°Ô ÇÑ´Ù.*/ glEnable (GL_LINE_STIPPLE); }; GL_LINE_STIPPLEÀº ¹«¾ùÀΰ¡? OpenGLÀº Á÷¼±ÀÇ µÎ²²»Ó¸¸ ¾Æ´Ï¶ó ¸ð¾ç±îÁöµµ °áÁ¤ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. GL_LINE_STIPPLE À» °¡´ÉÇÏ°Ô ÇÏ¿© ¿ì¸®´Â Á¡¼±À̳ª ´Ù¸¥ ¸ð¾çÀÇ Á÷¼±À» ±×¸± ¼ö ÀÖ´Ù. ¾Ö´Ï¸ÞÀ̼ǿ¡´Â psiDraw()ÇÔ¼ö¿¡¼¸¸ Á¡¼±À» »ç¿ëÇÏ¿´´Ù.: glLineWidth (1); glPushAttrib (GL_LINE_BIT); glLineStipple (3, 0xAAAA); glBegin (GL_LINE_STRIP); for (i = 0; i < nx; i++) { xs = ratio1 * (x[i] - XMIN) - 1.0; ys = ratio2 * (psi[2 * i] - YMIN) - 1.0; glVertex2d (xs, ys); }; glEnd (); glPopAttrib (); ¼± ¸ð¾ç¹Ù²Ù±âglLineStippleÀº Á¡¼±¸ð¾çÀ» °áÁ¤ÇØÁÖ´Â ÇÔ¼öÀε¥, ÀÌ ±Û¿¡ »ç¿ëµÈ ¿¹Á¦¿¡¼´Â 0xAAAAÆÐÅÏÀ» »ç¿ëÇÏ¿´´Ù. ÀÌ °ªÀ» ÀÌÁø¼ö·Î º¯È¯Çϸé 0000100010001000ÀÌ µÇ´Âµ¥ OpenGLÀº À̸¦ 3ºñÆ®´Â ²¨Á®ÀÖ°í, ÇѺñÆ® ÄÑÁö°í, 3ºñÆ® ²¨Á®ÀÖ°í, 1ºñÆ®ÄÑÁö°í, 3ºñÆ® ²¨Áö°í 1ºñÆ®ÄÑÁö°í, 4ºñÆ®²¨Áø ½ÄÀÇ Á¡¼±À» ±×¸°´Ù. ±×·¸´Ù. ÀÌ ¼±¸ð¾çÀº µÚ¿¡¼ºÎÅÍ Àд´Ù. µÚ¿¡¼ ºÎÅÍ Àд ÀÌÀ¯´Â ³·ÀºÂ÷ÀÇ ºñÆ®¸¦ ¸ÕÀú »ç¿ëÇϱ⶧¹®ÀÌ´Ù. ÀÌÁ¦ glLineStippleÀº µÎ°³ÀÇ ÆĶó¸ÞÅÍ°¡ ¼³Á¤µÇ¾ú´Ù. Çϳª´Â ¸ð¾çÀ» ¾Ë·ÁÁÖ´Â 16Áø¼ö°ªÀÌ°í Çϳª´Â ÀÌ·¯ÇÑ ÆÐÅÏÀ» ±×·ÁÁÙ¶§ »ç¿ëµÇ´Â ºñÀ²À» ¾Ë·ÁÁÖ´Â Á¤¼ö°¡ ÁÖ¾îÁø´Ù. Áï ¿¹Á¦¿¡¼´Â 3À̶ó ÁÖ¾úÀ¸¹Ç·Î ÆÐÅÏÀÌ ´Ù½Ã º¯ÈµÇ¾î 9IJ¨Áö°í, 3Ä ÄÑÁö°í, 9Ä ²¨Áö°í, 3Ä ²¨Áö°í, 9Ä ²¨Áö°í, 3Ä ÄÑÁö°í ¸¶Áö¸·¿¡ 12Ä ²¨Áö´Â ±×·± Á¡¼±À» ±×¸®°Ô µÈ´Ù. ÀÌ °ª°ú ÀÌÁø¼ö·Î Ç¥ÇöµÇ´Â ÆÐÅÏÀ» °¡Áö°í ¿©·¯ºÐÀº ¸ðµçÁ¾·ùÀÇ Á¡¼±À» ±×¸± ¼ö ÀÖÀ» °ÍÀÌ´Ù. Á¶±Ý´õ ÀÚ¼¼È÷ ¸»ÇصѰÍÀÌ ÀÖ´Ù.: ÇÊÀÚ´Â Á¡¼±·»´õ¸µÀ» Ǫ½Ã(push)¿Í ÆË(pop)¼Ó¼ºÇà»çÀÌ¿¡ µÎ¾ú´Ù. ¿©·¯ºÐÀº ÀÌ ±ÛÀ» óÀ½ ¿¬ÀçÇÒ¶§ OpenGLÀº »óŸӽÅÀ̶ó´Â ¸»À» º» ±â¾ïÀÌ Àִ°¡? ¾Æ¸¶ ´ÙÀ½È£¿¡ ¿ì¸®´Â ÀÌ Çª½Ã¿Í ÆËÁ¶ÀÛ¿¡ °üÇÏ¿© ´õ ÀÚ¼¼È÷ »ìÆ캼 °ÍÀÌ´Ù. ±×·¯³ª °£´ÜÇÏ°Ô ¸»ÇÏÀÚ¸é óÀ½¿¡ glPushAttrib (GL_LINE_BIT)¿¡¼ ÇÏ´Â ÀÛ¾÷Àº GL_LINE_BITÀÇ ÇöÀç°ª(ÀÌ °ªÀÌ Á¡¼±¸ð¾çÀ» °áÁ¤ÇÑ´Ù)À» ½ºÅÿ¡ ½×´Â´Ù. ±×¸®°í ³ª¼ glLineStipple ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© GL_LINE_BITÀÇ °ªÀ» ¹Ù²Û´Ù. ±× ´ÙÀ½ ¿ì¸®°¡ ½ÇÁ¦ ÇÏ°íÀÚ ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÑ ´ÙÀ½ glPopAttrib ÇÔ¼ö¸¦ ½ÇÇàÈ÷ÄÑ ÀÌÀüÀÇ GL_LINE_BITº¯¼ö°ªÀ» ´Ù½Ã °¡Á®¿Â´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀº OpenGL¸Ó½ÅÀÇ »óź¯¼ö°ªÀ» ºÎºÐÀûÀ¸·Î ¹Ù²Ù°íÀÚ ÇÒ¶§ È¿À²ÀûÀÌ°Ô µÈ´Ù. ¸¸¾à ÀÌ·¸°Ô ÇÏÁö ¾Ê´Â´Ù¸é ¼±À» ±×¸®°í ³ª¼ ´Ù½Ã ÀÌÀüÀÇ ¼±¸ð¾çÀ¸·Î ¹Ù²Ù¾îÁÖ±â À§ÇÏ¿© ¸Å¹ø ÀÌÀü°ú µ¿ÀÏÇÑ ¼±¸ð¾çÀ¸·Î glLineStipple ÇÔ¼ö¸¦ È£ÃâÇØÁÖ¾î¾ß ÇÑ´Ù. Ǫ½Ã¿Í Æ˱â´ÉÀº ÀÌ·± ¹ø°Å·Î¿î ÀÛ¾÷À» ´ú¾îÁØ´Ù. ´ÙÀ½¹ø¿¡´Â....OpenGLÀº ȯ»óÀûÀÎ 3Â÷¿ø APIÀÎÅÍÆäÀ̽º·Î ¾Ë·ÁÁ®ÀÖ´Ù. Áö±Ý±îÁö ¿ì¸®´Â OpenGLÀ» °¡Áö°í 2Â÷¿ø ·»´õ¸µÀÇ ±âº»ÀûÀÎ ±â´ÉÀ» »ìÆ캸¾Ò´Ù. ´ÙÀ½¹ø¿¡´Â 3Â÷¿ø OpenGLÇÁ·Î±×·¥À» ¸¸µé¾î º¸¸é¼ °üÁ¶¹ýÀº ¾î¶»°Ô ÇÏ°í ½Ã½ºÅÛÀÇ ÁÂÇ¥¿Í Ŭ¸®Çοµ¿ª°ú Åõ»çÇà·ÄÀ» ¼³Á¤ÇÏ´ÂÁö »ìÆ캸±â·Î ÇÏ°Ú´Ù. ´ÙÀ½¿¬Àç±îÁö OpenGLÀ» °¡Áö°í Àç¹ÌÀÖ°Ô ³î±â ¹Ù¶õ´Ù....... ´õ ¾Ë°í½Í´Ù¸é:
¹ø¿ª : ÀÌÁÖÈ£
|
º» À¥»çÀÌÆ®´Â Miguel Angel Sepulveda¾¾¿¡ ÀÇÇØ °ü¸®µË´Ï´Ù. © Miguel Angel Sepulveda 1998 LinuxFocus 1998 |