Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom
Bar]
Miguel Angel Sepulveda


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

example2.c

Makefile

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."¶ó´Â ¸»ÀÌ ³ª¿Â´Ù. ¿Ö ±×·¸°Ô µÇ³Ä¸é...À½ ³ªµµ Àؾî¹ö·È´Ù. ¾î·µç ¹°¸®ÇÐÀ» Àü°øÇÏ´Â Çлýµé¿¡°Ô ½´·Úµù°Å ¹æÁ¤½Ä¿¡¼­ ½Ã°£ÀÌ Áõ°¡ÇÒ¶§¸¶Å¸ ¾î¶»°Ô °ªÀÌ º¯Çϴ°¡¸¦ º¸¿©Áִµ¥ À¯¿ëÇÑ ±×¸²À» ±×¸± ¼ö ÀÖ´Ù. À̺о߸¦ Àü°øÇÏÁö¾Ê´Â »ç¶÷µéÀº ±×³É ½±°ÔÀÌÇصÇÁö ¾Ê´Â ¾çÀÚ¿ªÇÐÀÇ ¼Ó¼ºÀ» »ìÆ캸¸é µÈ´Ù. ¾çÀÚ¿ªÇп¡¼­ ÀÔÀÚ´Â À§Ä¡¿Í ¼Óµµ·Î Ç¥ÇöµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾çÀÚÆĶó´Â ÆÄÇüÀ¸·Î ³ªÅ¸³½´Ù.¿ì¸®°¡ ÀÛ¼ºÇÑ ¾Ö´Ï¸ÞÀ̼ǿ¡¼­ º¸¶ó»ö ½Ç¼±À¸·Î ³ªÅ¸³½ ºÎºÐÀÌ ¾çÀÚÆĸ¦ ³ªÅ¸³½´Ù. ÀÌ°ÍÀº ÁÖ¾îÁøÀ§Ä¡(ÇϾá Á¡¼±)¿¡¼­ ÀÔÀÚ¸¦ °üÃøÇÒ ¼ö ÀÖ´Â È®·ü°ªÀÇ Á¦°ö°ªÀ» ÀǹÌÇÑ´Ù.:

[Click here to see the image]
±×¸² 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À̶ó ÁÖ¾úÀ¸¹Ç·Î ÆÐÅÏÀÌ ´Ù½Ã º¯È­µÇ¾î 9Ä­²¨Áö°í, 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