4.±âº» µµÇü

4-1.Á¡

¸ðµç µðÁöÅÐ ±×·¡ÇÈÀÇ ±âº»Àº Á¡(Pixel)ÀÌ´Ù. ¼±À̳ª ¸éµµ ¸ðµÎ Á¡ÀÇ ÁýÇÕÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª 3Â÷¿ø ±×·¡ÇÈÀÇ °¡Àå ¿øÀÚÀûÀÎ ¿ä¼Ò´Â Á¤Á¡(Vertex)ÀÌ´Ù. Á¤Á¡Àº »ö»óÀ̳ª Å©±â¿¡ ´ëÇÑ Á¤º¸´Â ¾ø°í ¿À·ÎÁö À§Ä¡¸¸À» °¡Áø´Ù´Â ¸é¿¡¼­ Á¡°ú´Â ´Ù¸£´Ù. Á¤Á¡Àº ´ÙÀ½ µÎ ÇÔ¼ö ºí·Ï »çÀÌ¿¡¼­ Á¤ÀÇÇÑ´Ù.

 

void glBegin(GLenum mode);

void glEnd(void);

 

glBegin ~ glEnd ºí·Ï »çÀÌ¿¡ ´Ù¾çÇÑ ÇÔ¼öµéÀÌ È£ÃâµÇ´Âµ¥ ÁÖ·Î Á¤Á¡À» ¹èÄ¡Çϰųª ¼Ó¼ºÀ» ¹Ù²Ù´Â ¸í·ÉµéÀÌ´Ù. Á¤Á¡Àº ´ÙÀ½ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù. ¾Õ¿¡¼­ ¼³¸íÇÑ´ë·Î ÁÂÇ¥ ÁöÁ¤ Àμö¸¦ 4°³±îÁö ÃëÇÒ ¼ö ÀÖ°í ÀμöÀÇ Å¸ÀÔµµ ´Ù¾çÇÏ´Ù. ¿©±â¼­´Â Æò¸é µµÇüÀ» ±×¸®´Â ½Ç½ÀÀ» ¸ÕÀú ÇϹǷΠÁÂÇ¥´Â x, y µÎ °³¸¸ ÁöÁ¤ÇÑ´Ù.

 

glVertex[2,3,4][s,i,f,d][v](x,y,z,w)

 

ºí·Ï³»ÀÇ Á¤Á¡µé·Î ¹«¾ùÀ» ¾î¶»°Ô ±×¸± °ÍÀΰ¡´Â glBeginÀ¸·Î Àü´ÞµÇ´Â ¸ðµå°ª¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. ´ÙÀ½°ú °°Àº ¸ðµå°¡ Á¦°øµÇ¸ç ¸ðµå¿¡ µû¶ó Á¤Á¡À» ¿¬°áÇÏ´Â ¹æ½ÄÀÌ ´Þ¶óÁø´Ù. ÀÌ ¸ðµåµéÀ» ¿Ïº®ÇÏ°Ô ÀÌÇØÇÏ°í ÀÚÀ¯ ÀÚÀç·Î ¾µ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

 

¸ðµå

¼³¸í

GL_POINTS

µ¶¸³ÀûÀÎ Á¡

GL_LINE_STRIP

¿¬°áµÈ ¼±ºÐ

GL_LINE_LOOP

½ÃÀÛÁ¡°ú ³¡Á¡À» ÀÌÀº ¼±ºÐ

GL_LINES

µÎ°³ÀÇ Á¤Á¡µéÀ» ÀÌÀº ¼±ºÐ

GL_TRIANGLES

¼¼°³¾¿ ¿¬°áÇÑ »ï°¢Çü

GL_TRIANGLE_STRIP

¿¬°áµÈ »ï°¢Çü

GL_TRIANGLE_FAN

Áß½ÉÀ» °øÀ¯ÇÏ´Â »ï°¢Çü

GL_QUADS

Á¤Á¡ 4°³¾¿À» ¿¬°áÇÏ¿© »ç°¢ÇüÀ» ±×¸°´Ù.

GL_QUAD_STRIP

¿¬°áµÈ »ç°¢Çü

GL_POLYGON

¿¬°áµÈ º¼·Ï ´Ù°¢Çü

 

±âÇÏÇÐÀûÀ¸·Î °¡Àå °£´ÜÇÑ Á¡ºÎÅÍ Âï¾î º¸ÀÚ. GL_POINTS ¸ðµå·Î ½ÃÀÛÇÏ°í ºí·Ï³»¿¡¼­ Á¤Á¡ÀÇ ÁÂÇ¥¸¦ ÁöÁ¤Çϸé Á¤Á¡ À§Ä¡¿¡ Á¡µéÀÌ ÂïÈù´Ù.

 

Primitive

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

    

     glBegin(GL_POINTS);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, -0.5);

     glVertex2f(0.5, -0.5);

     glEnd();

     glFlush();

}

 

glBegin ~ glEnd »çÀÌ´Â ÇϳªÀÇ µµÇüÀ» Á¤ÀÇÇÏ´Â ³í¸®ÀûÀÎ ºí·ÏÀÌ´Ù. ±×·¡¼­ °¡µ¶¼ºÀ» ³ôÀ̱â À§ÇØ µÎ ºí·Ï »çÀÌ¿¡ { } °ýÈ£·Î °¨½Î°í µé¿©¾²±â¸¦ Çϱ⵵ ÇÑ´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

    

     glBegin(GL_POINTS);

     {

          glVertex2f(0.0, 0.5);

          glVertex2f(-0.5, -0.5);

          glVertex2f(0.5, -0.5);

     }

     glEnd();

     glFlush();

}

 

glBegin°ú glEnd »çÀÌ¿¡ ºó { } °ýÈ£¸¦ µÎ°í Á¤Á¡À» ÀÌ ºí·Ï¾È¿¡ ¹èÄ¡Çϸç ÇÑÄ­ µé¿©¾´´Ù. ¹°·Ð ÀÌ °ýÈ£´Â ¹®¹ýÀûÀ¸·Î´Â ¾Æ¹« Àǹ̰¡ ¾øÀ¸¸ç ´ÜÁö ºí·ÏÀ» Àб⠽±°Ô Ç¥½ÃÇÒ »ÓÀÌ´Ù. º¸±â¿¡´Â ÁÁÁö¸¸ ´Ù¼Ò ¹ø°Å·Ó°í ¼Ò½º°¡ ±æ¾îÁö¹Ç·Î ÀÌ °­Á¿¡¼­´Â ±×³É ÆòÀÌÇÏ°Ô ¾²±â·Î ÇÑ´Ù. ¼¼ °³ÀÇ Á¤Á¡À» Á¤ÀÇÇßÀ¸¹Ç·Î »ï°¢ÇüÀÇ ¼¼ ²ÀÁöÁ¡¿¡ Á¡ÀÌ ÂïÈú °ÍÀÌ´Ù.

Á¡ÀÇ µðÆúÆ® Å©±â´Â 1Çȼ¿À̶ó ³Ê¹« À۾Ƽ­ Àß º¸ÀÌÁö ¾Ê´Â´Ù. ÁÂÇ¥´Â À§Ä¡¸¸ °¡Áö´Âµ¥ ºñÇØ Á¡Àº È­¸é»ó¿¡ Ç¥½ÃµÇ¹Ç·Î Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖ°í »ö»óµµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. Á¡ Å©±âÀÇ º¯°æ ¹üÀ§¿Í Á¶Á¤ ´ÜÀ§´Â ±¸Çö¿¡ µû¶ó ´Ù¸¥µ¥ ´ÙÀ½ ÄÚµå·Î Á¶»çÇÑ´Ù.

 

GLfloat range[2], granu;

glGetFloatv(GL_POINT_SIZE_RANGE, range);

glGetFloatv(GL_POINT_SIZE_GRANULARITY, &granu);

 

À©µµ¿ì ȯ°æ¿¡¼­´Â 1.0 ~ 63.375±îÁöÀÇ ¹üÀ§¸¦ °¡Áö¸ç 0.125 ´ÜÀ§·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¹üÀ§¸¦ ¹þ¾î³ª´õ¶óµµ °¡Àå °¡±î¿î °ªÀÌ ¼±ÅÃµÇ¸ç ¿¡·¯´Â ³ªÁö ¾Ê´Â´Ù. Á¡ Å©±â´Â ´ÙÀ½ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù. Á¡ Å©±âÀÇ µðÆúÆ®´Â 1ÀÌ´Ù.

 

void glPointSize(GLfloat size);

 

size Àμö´Â Á¡À» °¨½Î´Â ¿øÀÇ Á÷°æÀ» ÁöÁ¤ÇÑ´Ù. ¾ÈƼ ¾Ë¸®¾Æ½ÌÀ» ÇÏÁö ¾ÊÀ¸¸é Á¡Àº ½Ã°¢ÇüÀ¸·Î Ãâ·ÂµÇ´Âµ¥ size´Â »ç°¢ÇüÀÇ ÇѺ¯ ±æÀÌ¿¡ ÇØ´çÇÑ´Ù. ´ÙÀ½ ÄÚµå´Â Á¡À» 10 Çȼ¿·Î È®´ëÇÏ¿© Ãâ·ÂÇÑ´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

    

     glPointSize(10.0);

     glBegin(GL_POINTS);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, -0.5);

     glVertex2f(0.5, -0.5);

     glEnd();

     glFlush();

}

 

glBegin ºí·Ï¿¡ µé¾î°¡±â Àü¿¡ glPointSize ÇÔ¼ö·Î Á¡ Å©±â¸¦ 10À¸·Î ÁöÁ¤Çß´Ù. glBegin ºí·Ï ¾È¿¡¼­ ÁöÁ¤Çصµ È¿°ú´Â µ¿ÀÏÇϸç Áß°£¿¡¶óµµ ¾ðÁ¦µçÁö Á¡ÀÇ Å©±â¸¦ º¯°æÇÏ¿© Å©±â°¡ °¢°¢ ´Ù¸¥ Á¡À» ÂïÀ» ¼öµµ ÀÖ´Ù.

Á¡À» È®´ëÇϸé Á¤»ç°¢Çü ÇüÅ·ΠÃâ·ÂµÇ´Âµ¥ ¾ÈƼ¾Ë¸®¾Æ½ÌÀ» ÁöÁ¤ÇÏ¸é µÕ±×·¸°Ô ¿ø ¸ð¾çÀ¸·Î Ç¥½ÃµÈ´Ù. Á¡Àº °¡Àå ±âº»ÀûÀÎ ±×·¡ÇÈ ¿ä¼ÒÀÌÁö¸¸ Á¡¸¸À¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Â °ÍÀÌ °ÅÀÇ ¾ø¾î »ç¿ë ºóµµ´Â ³·´Ù.

4-2.¼±

Á¤Á¡µéÀ» ¿¬°áÇÏ¸é ¼±ºÐÀÌ µÈ´Ù. ¼±À» ±×¸®´Â ¸ðµå´Â 3°¡Áö°¡ ÀÖ´Ù. ¸ðµå¸¦ ´ÙÀ½°ú °°ÀÌ º¯°æÇØ º¸ÀÚ.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

    

     glBegin(GL_LINE_STRIP);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, -0.5);

     glVertex2f(0.5, -0.5);

     glEnd();

     glFlush();

}

 

GL_LINE_STRIPÀº Á¤Á¡µéÀ» ¿¬°áÇÏ¿© ¼±ºÐÀ» ±×¸°´Ù. STRIPÀº °è¼Ó À̾ ±×¸°´Ù´Â ¶æÀÌ´Ù. ù¹ø° Á¤Á¡°ú µÎ¹ø° Á¤Á¡À» ¿¬°áÇÏ°í À̾ µÎ¹ø° Á¤Á¡°ú ¼¼¹ø° Á¤Á¡À» ¿¬°áÇÑ´Ù. ±×·¯³ª óÀ½°ú ³¡À» ¿¬°áÇÏÁö ¾ÊÀ¸¹Ç·Î ¿­¸° °³°î¼±ÀÌ µÈ´Ù.

 

±×·ÁÁö´Â ¼±ÀÇ °³¼ö´Â Á¤Á¡ÀÇ °³¼öº¸´Ù Çϳª ´õ Àû´Ù. Á¤Á¡ÀÌ 3°³À̹ǷΠ¼±ºÐÀº 2°³¸¸ ±×·ÁÁø´Ù. GL_LINE_LOOP´Â ¼±ºÐÀ» À̾ ±×¸®°í ½ÃÀÛÁ¡°ú ³¡Á¡À» ÀÚµ¿À¸·Î ¿¬°áÇÏ¿© Æó°î¼±À» ¸¸µç´Ù. ¼¼¹ø° Á¤Á¡°ú ù¹ø° Á¤Á¡ÀÌ ¿¬°áµÇ¾î »ï°¢Çü ¸ð¾çÀÌ ±×·ÁÁø´Ù.

GL_LINES´Â Á¤Á¡µéÀ» µÎ°³¾¿ ÇÑ ½ÖÀ¸·Î ¹­¾î ¼±À» ±×¸°´Ù. ¿©·¯ °³ÀÇ Á¤Á¡À» ¹èÄ¡ÇØ ³õÀ¸¸é °¢°¢ ¶³¾îÁø ¼±ºÐÀÌ ±×·ÁÁø´Ù. ´ÙÀ½ ÄÚµå´Â 6°³ÀÇ Á¤Á¡À» Áö±×Àç±×·Î ¹èÄ¡ÇÏ°í 6°³ÀÇ ¼±À» ±ß´Â´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

    

     glBegin(GL_LINES);

     GLfloat x = -0.8;

     GLfloat y = 0.4;

     for (int i = 0; i < 6; i++) {

          glVertex2f(x, y);

          x += 0.3;

          y *= -1;

     }

     glEnd();

     glFlush();

}

 

ù¹ø°, µÎ¹ø° Á¤Á¡ÀÌ ¿¬°áµÇ°í ¼¼¹ø°, ³×¹ø° Á¤Á¡ÀÌ ¿¬°áµÇ´Â ½ÄÀÌ´Ù. Á¤Á¡ÀÌ 6°³À̹ǷΠµÎ °³¾¿ ¦À» Áö¾î ÃÑ 3°³ÀÇ ¼±ºÐÀÌ ±×·ÁÁø´Ù.

¸¸¾à Á¤Á¡ÀÌ È¦¼ö°³¶ó¸é ¸¶Áö¸· Á¤Á¡Àº ´ëÀÀµÇ´Â ¦ÀÌ ¾øÀ¸¹Ç·Î ¹«½ÃµÈ´Ù.

¼±ÀÇ µÎ²²´Â µðÆúÆ®·Î 1ÀÌµÇ ´õ ±½°Ô ±×¸± ¼öµµ ÀÖ´Ù. Á¡°ú ¸¶Âù°¡Áö·Î ±¸Çö¿¡ µû¶ó ÁöÁ¤ °¡´ÉÇÑ ¹üÀ§°¡ ´Ù¸£´Ù. ´ÙÀ½ ÄÚµå·Î ¹üÀ§¸¦ ±¸ÇÑ´Ù.

 

GLfloat range[2], granu;

glGetFloatv(GL_LINE_WIDTH_RANGE, range);

glGetFloatv(GL_LINE_WIDTH_GRANULARITY, &granu);

 

À©µµ¿ìÁî ȯ°æ¿¡¼­ Á¶»çÇÑ °á°ú 0.5 ~ 10.0 ±îÁö 0.125 ´ÜÀ§·Î Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. ¼±ÀÇ µÎ²²¸¦ º¯°æÇÒ ¶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

void glLineWidth(GLfloat width);

 

´ÙÀ½ ¿¹Á¦´Â 1ºÎÅÍ ½ÃÀÛÇؼ­ ¼± µÎ²²¸¦ Á¡Á¡ Áõ°¡½ÃÄÑ°¡¸ç °¢°¢ ´Ù¸¥ ±½±â·Î ¼öÆò¼±À» ¿©·¯ °³ ±ß´Â´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     GLfloat y;

     GLfloat w = 1;

     for (y = 0.8; y > -0.8;y -= 0.2) {

          glLineWidth(w++);

          glBegin(GL_LINES);

          glVertex2f(-0.8, y);

          glVertex2f(0.8, y);

          glEnd();

     }

     glFlush();

}

 

y ÁÂÇ¥ 0.8ºÎÅÍ ½ÃÀÛÇؼ­ 0.2¸¸Å­¾¿ ¾Æ·¡·Î À̵¿ÇÏ¸ç ¼±À» ±×¾ú´Ù. ÇÑ´Ü°è ³»·Á°¥ ¶§¸¶´Ù ¼±ÀÇ ±½±â´Â 1¾¿ Áõ°¡ÇÑ´Ù. À©µµ¿ì Å©±â¸¦ º¯°æÇصµ ¼±ÀÇ ±½±â´Â À¯ÁöµÈ´Ù.

½Ç¼±ÀÌ ¾Æ´Ñ ´Ù¸¥ ¸ð¾çÀÇ ¼±À» ±×¸®·Á¸é ½ºÆ¼ÇÃ(Stipple:Á¡¹¦¹ý) ±â´ÉÀ» ÄÑ¾ß ÇÑ´Ù. ƯÁ¤ ±â´ÉÀ» »ç¿ëÇÒ ¶§´Â glEnable ÇÔ¼ö·Î »ç¿ëÇÒ ±â´ÉÀÇ À̸§À» Àü´ÞÇÑ´Ù. ½ºÆ¼Çà ±â´ÉÀº ´ÙÀ½ È£Ãâ¹®¿¡ ÀÇÇØ È°¼ºÈ­µÈ´Ù. ´ëºÎºÐÀÇ ±â´ÉÀº µðÆúÆ®·Î ²¨Á® ÀÖÀ¸¹Ç·Î »ç¿ëÇÏ·Á¸é ¹Ýµå½Ã ÄÑ¾ß ÇÑ´Ù.

 

glEnable(GL_LINE_STIPPLE);

 

¹°·Ð ÀÌ ±â´ÉÀÌ ´õ ÀÌ»ó ÇÊ¿ä¾øÀ¸¸é glDisable ÇÔ¼ö·Î ¾ðÁ¦µçÁö ±â´ÉÀ» Ãë¼ÒÇÒ ¼ö ÀÖ´Ù. ¼±ÀÇ ¸ð¾çÀº ´ÙÀ½ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù.

 

void glLineStipple(GLint factor, GLushort pattern);

 

patternÀº ÀÌÁø¼ö·Î Ç¥ÇöÇÑ ¼±ÀÇ ¸ð¾çÀÌ´Ù. ÇÏÀ§ ºñÆ®ºÎÅÍ ¼±ÀÇ ¾ÕÂÊ ºÎºÐÀÇ Á¡ ¸ð¾çÀ» ÁöÁ¤ÇÑ´Ù. ´ëÀÀµÇ´Â ºñÆ®°¡ 1ÀÎ ÀÚ¸®´Â Á¡ÀÌ ÂïÈ÷°í 0ÀÎ ºÎºÐÀº ÂïÈ÷Áö ¾Ê´Â´Ù. factor Àμö´Â ºñÆ® Çϳª°¡ Á¡ ¸î °³¿¡ ´ëÀÀµÉ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °ªÀÌ 1ÀÌ¸é ºñÆ® Çϳª°¡ Á¡ Çϳª¿¡ ´ëÀÀµÇ¸ç 2ÀÌ¸é ºñÆ®´ç 2°³ÀÇ Á¡ÀÌ ±×·ÁÁ® Á» ´õ ±ä ¸ð¾çÀ» ¸¸µé ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â Á¡¼¶, ¼â¼± µîÀ» Ãâ·ÂÇÑ´Ù.

 

void DoDisplay()

{

     GLushort arPat[]={0xaaaa,0xaaaa,0xaaaa,0xaaaa,0x33ff,0x33ff,0x33ff,0x57ff,0x57ff };

     GLint arFac[] = { 1,     2,     3,     4,     1,     2,     3,     1,     2};

 

     glClear(GL_COLOR_BUFFER_BIT);

     glEnable(GL_LINE_STIPPLE);

     GLfloat y;

     GLint idx = 0;

     for (y = 0.8; y > -0.8;y -= 0.2) {

          glLineStipple(arFac[idx], arPat[idx]);

          glBegin(GL_LINES);

          glVertex2f(-0.8, y);

          glVertex2f(0.8, y);

          glEnd();

          idx++;

     }

     glFlush();

}

 

pattern¿Í factor Àμö¿¡ ´ëÇØ 9°³ÀÇ Àμö½ÖÀ» ¹è¿­·Î ÁغñÇØ µÎ°í °¢ ¸ð¾ç´ë·Î ¼±À» ±×·Á º¸¾Ò´Ù. ¹è¿­ÀÇ ¾ÕÂÊ ¿ä¼ÒºÎÅÍ À§ÂÊ¿¡¼­ ¼ø¼­´ë·Î Àû¿ëÇÏ¿© ±×·È´Ù.

0xaaaa´Â ÀÌÁø¼ö·Î 1010101010101010À̹ǷΠÁ¡°ú °ø¹éÀÌ °è¼Ó ¹Ýº¹µÇ´Â Á¡¼±ÀÌ µÈ´Ù. factor°¡ 2¸é Á¡°ú °ø¹éÀÌ µÎ ¹è·Î È®ÀåµÇ¹Ç·Î ´õ ¼º±ä Á¡¼±ÀÌ ±×·ÁÁø´Ù. factor¸¦ 3, 4·Î ´õ Å©°Ô ÁöÁ¤Çϸé Á¡ »çÀÌÀÇ °Å¸®°¡ ´õ¿í ¸Ö¾îÁø´Ù. 0x33ff´Â ÀÏÁ¡ ¼â¼±ÀÇ ÆÐÅÏÀ» ÁöÁ¤Çϴµ¥ °¢ ºñÆ®°¡ ¾î¶»°Ô ´ëÀÀµÇ´ÂÁö¸¦ º¸ÀÚ.

ÇÏÀ§ ºñÆ®ºÎÅÍ ¿À¸¥ÂÊ¿¡¼­ ¼ø¼­´ë·Î Á¡°ú ´ëÀÀµÇ¹Ç·Î ºñÆ®¸¦ µÚÁý¾î¾ß ÇÑ´Ù. ¿Ö ÇÏÀ§ºÎÅÍ ¾ÕÂÊ Á¡¿¡ ´ëÀÀ½ÃÅ°´Â°¡ÇÏ¸é ±â°èÀû ¿¬»êÀÌ °£´ÜÇϱ⠶§¹®ÀÌ´Ù. Á¡ 10°³ ±×¸®°í 2°³ °Ç³Ê ¶Ù°í 2°³ ±×¸®°í ´Ù½Ã 2°³ °Ç³Ê ¶Ú´Ù. ±ä¼±, ªÀº¼±ÀÌ °è¼Ó ¹Ýº¹µÇ¹Ç·Î ÀÏÁ¡ ¼â¼±ÀÌ µÈ´Ù. ³¡ºÎºÐ¿¡ ¿©¹éÀÌ ÀÖ¾î¾ß ¹Ýº¹µÉ ¶§ ±ä¼±°ú ªÀº¼±ÀÌ ºÙÁö ¾Ê´Â´Ù.

0x57ff´Â ÀÌÁø¼ö·Î 0101011111111111ÀÌ µÇ¸ç ±ä¼± Çϳª¿¡ ªÀº¼± µÎ °³°¡ °è¼Ó ¹Ýº¹µÇ¹Ç·Î ÀÌÁ¡ ¼â¼±ÀÌ´Ù. ¾î¶² ¸ð¾çÀ̵簣¿¡ ºñÆ®·Î ¼± ¸ð¾çÀ» ¸¸µé°í 16Áø¼ö·Î ¹Ù²ã¼­ ÆÐÅÏÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù.

4-3.»ï°¢Çü

2Â÷¿ø ±×·¡ÇÈÀÇ ±âº» ¿ä¼Ò´Â Çȼ¿ÀÌÁö¸¸ 3Â÷¿ø ±×·¡ÇÈÀÇ ±âº» ¿ä¼Ò´Â »ï°¢ÇüÀÌ´Ù. ÀÛÀº »ï°¢ÇüµéÀÌ ¸ð¿©¼­ ¸ðµç ¹°Ã¼µéÀÌ ±¸¼ºµÈ´Ù. ±×·¡¼­ »ï°¢ÇüÀÌ ¾ÆÁÖ Áß¿äÇϸç ÀÚÁÖ »ç¿ëµÈ´Ù. GL_TRIANGLES ¸ðµå´Â Á¤Á¡ ¼¼°³¾¿À» ¸ð¾Æ¼­ »ï°¢ÇüÀ» ±×¸°´Ù. Á¦ÀÏ Ã³À½ ¸¸µé¾ú´ø ¿¹Á¦°¡ ¹Ù·Î ÀÌ ¸ðµå·Î »ï°¢ÇüÀ» ±×·È´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     glBegin(GL_TRIANGLES);

     GLfloat x = -0.8;

     GLfloat y = 0.4;

     for (int i = 0; i < 6; i++) {

          glVertex2f(x, y);

          x += 0.3;

          y *= -1;

     }

     glEnd();

     glFlush();

}

 

6°³ÀÇ Á¤Á¡¿¡ ´ëÇØ »ï°¢ÇüÀ» ±×¸®¸é 2°³ÀÇ »ï°¢ÇüÀÌ ¸¸µé¾îÁø´Ù. 3°³¾¿ ¦À» Áö¾î »ï°¢Çü Çϳª¸¦ ±×¸®¹Ç·Î Á¤Á¡ °³¼ö¸¦ 3À¸·Î ³ª´« °³¼ö¸¸Å­ÀÇ »ï°¢ÇüÀÌ ±×·ÁÁø´Ù. 3ÀÇ ¹è¼ö¿¡¼­ ³²´Â Á¤Á¡Àº ¹«½ÃµÈ´Ù.

GL_TRIANGLE_STRIPÀº »ï°¢ÇüÀ» °è¼Ó À̾ ±×¸°´Ù. ù ¼¼ °³ÀÇ Á¤Á¡À¸·Î »ï°¢ÇüÀ» ±×¸®°í Ãß°¡µÇ´Â Á¤Á¡À» »õ·Î¿î ²ÀÁöÁ¡À¸·Î ÇÏ´Â »ï°¢ÇüÀ» °è¼Ó À̾ ±×¸°´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

     glShadeModel(GL_FLAT);

 

     glBegin(GL_TRIANGLE_STRIP);

     GLfloat x = -0.8;

     GLfloat y = 0.4;

     for (int i = 0; i < 6; i++) {

          if (i % 2 == 0) {

              glColor3f(1.0, 0.0, 0.0);

          } else {

              glColor3f(0.0, 1.0, 0.0);

          }

          glVertex2f(x, y);

          x += 0.3;

          y *= -1;

     }

     glEnd();

     glFlush();

}

 

Á¤Á¡ÀÌ 6°³À̹ǷΠ»ï°¢ÇüÀº ¸ðµÎ 4°³°¡ ±×·ÁÁø´Ù. »ö»óÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ÀüºÎ Èò»öÀ¸·Î ±×·ÁÁ® ÇϳªÀÇ ÆòÇà»çº¯ÇüÀ¸·Î º¸À̹ǷΠ°¢ Á¤Á¡¸¶´Ù »ö»óÀ» ¹ø°¥¾Æ°¡¸ç ÁöÁ¤ÇÏ°í ½¦ÀÌµå ¸ðµ¨À» FLATÀ¸·Î ÁöÁ¤ÇÏ¿© ´Ü»öÀ¸·Î ä»öÇß´Ù. ½¦ÀÌµå ¸ðµ¨¿¡ ´ëÇؼ­´Â Â÷ÈÄ ¼³¸íÇϱâ·Î ÇÑ´Ù.

°¢ »ï°¢ÇüÀ» ºÐ¸®ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.

v0, v1, v2 ¼¼ °³ÀÇ Á¤Á¡À» ¿¬°áÇÏ¿© ù¹ø° »ï°¢ÇüÀ» ±×¸°´Ù. ±×¸®°í v1, v2¸¦ ÇÑ º¯À¸·Î ÇÏ°í »õ·Î Ãß°¡µÈ v3¸¦ ³ª¸ÓÁö ÇÑ ²ÀÁöÁ¡À¸·Î ÇÏ´Â »ï°¢ÇüÀ» ±×¸°´Ù. °è¼ÓÇؼ­ v2, v3, v4¸¦ ²ÀÁöÁ¡À¸·Î ÇÏ´Â »ï°¢ÇüÀ» ±×¸®°í v3, v4, v5¸¦ ²ÀÁöÁ¡À¸·Î ÇÏ´Â »ï°¢ÇüÀÌ ±×·ÁÁø´Ù. ÀÌ·±½ÄÀ¸·Î ÀÌÀüÀÇ Á¤Á¡µéÀ» ¿¬°áÇؼ­ ±×¸®¸é ÀûÀº °³¼öÀÇ Á¤Á¡À¸·Îµµ ¸¹Àº »ï°¢ÇüÀ» ±×¸± ¼ö ÀÖ´Ù´Â ÀÌÁ¡ÀÌ ÀÖ´Ù.

n°³ÀÇ »ï°¢ÇüÀ» ±×¸®´Âµ¥ n+2°³ÀÇ Á¤Á¡¸¸ ÀÖÀ¸¸é µÈ´Ù. °³º°ÀûÀ¸·Î »ï°¢ÇüÀ» ±×¸®´Â ¹æ¹ý¿¡ ºñÇØ ÀÌÀü Á¤Á¡À» ÀçÈ°¿ëÇϹǷΠ¸Þ¸ð¸®µµ Àý¾àµÇ°í ¼Óµµµµ ÈξÀ ºü¸£´Ù. »õ·Î ±×·ÁÁö´Â »ï°¢ÇüÀº ¹Ý½Ã°è ¹æÇâÀ¸·Î ±×·ÁÁø´Ù. »ï°¢ÇüÀ» ±×¸®´Â ¹æÇâ(Winding)Àº »ï°¢ÇüÀÇ ¾ÕµÚ¸¦ ±¸ºÐÇÏ´Â Àǹ̰¡ Àִµ¥ ´ÙÀ½¿¡ ÀÚ¼¼È÷ ¾Ë¾Æº¼ °ÍÀÌ´Ù.

GL_TRIANGLE_FANÀº ù »ï°¢ÇüÀÇ ²ÀÁöÁ¡ Çϳª¸¦ °íÁ¤ÇØ µÎ°í »õ·Î Ãß°¡µÇ´Â µÎ Á¤Á¡À» ¿¬°áÇÏ¿© °è¼Ó »ï°¢ÇüÀ» ±×¸°´Ù. ¸¶Ä¡ ºÎä»ìÀ» Ãß°¡ÇÏ¿© ºÎ並 ¸¸µå´Â ¹æ¹ý°ú ºñ½ÁÇؼ­ FANÀ̶ó´Â À̸§ÀÌ ºÙ¾ú´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

     glShadeModel(GL_FLAT);

 

     glBegin(GL_TRIANGLE_FAN);

     glColor3f(1.0, 0.0, 0.0);

     glVertex2f(0.0, 0.0);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.35, 0.35);

 

     glColor3f(0.0, 1.0, 0.0);

     glVertex2f(-0.5, 0.0);

    

     glColor3f(1.0, 0.0, 0.0);

     glVertex2f(-0.35, -0.35);

    

     glColor3f(0.0, 1.0, 0.0);

     glVertex2f(0.0, -0.5);

     glEnd();

     glFlush();

}

 

Á߽ɺο¡ ù Á¤Á¡À» Âï°í 12½Ã¹æÇâºÎÅÍ ¹Ý½Ã°è ¹æÇâÀ¸·Î µ¹¸ç »ï°¢ÇüÀ» °è¼Ó ÀÌ¾î ±×·È´Ù. »ï°¢Çü°£ÀÇ ±¸ºÐÀ» À§ÇØ »ö»óÀ» ±³´ë·Î ¹Ù²Ù¾ú´Ù.

°£´ÜÇÏ°Ô ÀÛ¼ºÇϱâ À§ÇØ Á¤Á¡µéÀ» Á÷Á¢ Âï¾ú´Âµ¥ ·çÇÁ¸¦ µ¹¸ç ¿øÁÖ»óÀÇ Á¡µéÀ» ¼øȸÇÏ¸é ¿øÇüÀ̳ª ¿ø»Ôó·³ ²ÀÁöÁ¡À» °øÀ¯ÇÏ´Â µµÇüÀ» ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ÀÌ »ï°¢ÇüµéÀ» ¾ÆÁÖ Àß°Ô ³ª´©¸é ¿ÏÀüÇÑ ¿ø¸ð¾çÀÌ µÉ °ÍÀÌ´Ù.

4-4.»ç°¢Çü

»ç°¢Çüµµ ÀÔü ¹°Ã¼¸¦ ±¸¼ºÇÏ´Â ±âº» ¿ä¼ÒÀÌ´Ù. »ï°¢Çü¿¡ ºñÇØ ¾à°£ÀÇ Á¦¾àÀÌ ÀÖÁö¸¸ ±×¸®±â ¼Óµµ°¡ ºü¸£°í ÀûÀº °³¼ö·Îµµ ³ÐÀº ¸éÀûÀ» ±×¸± ¼ö ÀÖ¾î Á¾Á¾ »ç¿ëµÈ´Ù. »ç°¢ÇüÀº ÀÚÁÖ »ç¿ëµÇ¹Ç·Î º°µµÀÇ ±×¸®±â ÇÔ¼ö°¡ Á¦°øµÈ´Ù.

 

void glRect[i,s,f,d][v](x1, y1, x2, y2)

 

¿ÏÀüÈ÷ µ¶¸³µÈ ÇÔ¼öÀ̹ǷΠglBegin ~ glEnd ºí·Ï¿¡ Æ÷ÇÔ½ÃÅ°Áö ¾Ê°íµµ »ç°¢ÇüÀ» ±×¸± ¼ö ÀÖ´Ù. Àμö·Î Á»ó´Ü ÁÂÇ¥¿Í ¿ìÇÏ´Ü ÁÂÇ¥¸¦ Áְųª ¶Ç´Â °¢ ÁÂÇ¥°ªÀÇ ¹è¿­À» Àü´ÞÇÑ´Ù. ´ÙÀ½Àº »ç°¢ÇüÀ» ±×¸°´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     glRectf(-0.8, 0.8, 0.8, -0.8);

     glFlush();

}

 

¿ÞÂÊ À§¿Í ¿À¸¥ÂÊ ¾Æ·¡¸¦ ²ÀÁöÁ¡À¸·Î ÇÏ´Â Å­Á÷ÇÑ »ç°¢ÇüÀÌ ±×·ÁÁø´Ù.

¾ÆÁÖ ½±°Ô »ç°¢ÇüÀ» ±×¸± ¼ö ÀÖÁö¸¸ ´ë°¢¼±ÀÇ µÎ Á¡À» ÁöÁ¤ÇÏ´Â ½ÄÀ̹ǷΠ°¢ º¯ÀÌ ¼öÁ÷ÀÎ Á÷»ç°¢Çü¸¸ ±×¸± ¼ö ÀÖ´Ù. ÆòÇà»çº¯ÇüÀ̳ª »ç´Ù¸®²Ãó·³ Á÷°¢ÀÌ ¾Æ´Ñ »ç°¢ÇüÀº ±×¸± ¼ö ¾ø´Ù. ºÒ±ÔÄ¢ÇÑ »ç°¢ÇüÀº Á¤Á¡À» Á÷Á¢ ÁöÁ¤ÇÏ¿© ´Ù°¢ÇüÀ¸·Î ±×·Á¾ß ÇÑ´Ù. ´ÙÀ½Àº ¸¶¸§¸ð¸¦ ±×¸°´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     glBegin(GL_QUADS);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, 0.0);

     glVertex2f(0.0, -0.5);

     glVertex2f(0.5, 0.0);

     glEnd();

     glFlush();

}

 

GL_QUADS´Â 4°³¾¿ Á¤Á¡À» ¿¬°áÇÏ¿© »ç°¢ÇüÀ» ±×¸°´Ù. Á¦ÀÏ À§ÀÇ ²ÀÁöÁ¡À» ½ÃÀÛÀ¸·Î ÇÏ¿© ¹Ý½Ã°è ¹æÇâÀ¸·Î ¸¶¸§¸ð¸¦ ±¸¼ºÇÏ´Â ²ÀÁöÁ¡À» Àü´ÞÇß´Ù. ÀÓÀÇ À§Ä¡ÀÇ Á¤Á¡À» Àü´ÞÇÒ ¼ö ÀÖÀ¸¹Ç·Î Á÷°¢ÀÌ ¾Æ´Ñ »ç°¢ÇüÀ» ±×¸± ¼ö ÀÖ´Ù.

Á¤Á¡À» 4°³¸¸ ÁöÁ¤ÇßÀ¸¹Ç·Î »ç°¢ÇüÀº Çϳª¸¸ ±×·ÁÁø´Ù. 8°³¶ó¸é 2°³, 12°³¶ó¸é 3°³ÀÇ »ç°¢ÇüÀÌ ±×·ÁÁú °ÍÀÌ´Ù. GL_QUAD_STRIP ¸ðµå´Â Ãß°¡µÇ´Â 2°³ÀÇ Á¤Á¡À¸·Î ÀÌÀü »ç°¢ÇüÀ» °è¼Ó À̾ ±×¸°´Ù. 6°³ÀÇ Á¤Á¡À¸·Î 2°³ÀÇ »ç°¢ÇüÀ» ¿¬¼ÓÀ¸·Î ±×¸± ¼ö ÀÖ´Ù.

4-5.´Ù°¢Çü

¸¶Áö¸· ¸ðµåÀÎ GL_POLYGONÀº ¸ðµç Á¤Á¡À» Çϳª·Î ¿¬°áÇÏ¿© ´Ù°¢ÇüÀ» ±×¸°´Ù. Á¤Á¡ÀÇ °³¼ö¸¸Å­ÀÇ ´Ù°¢ÇüÀÌ ¸¸µé¾îÁö´Âµ¥ 5°³¸é 5°¢Çü, 8°³¸é 8°¢ÇüÀÌ ±×·ÁÁø´Ù. »ï°¢ÇüÀ̳ª »ç°¢Çüµµ ÀÌ ¸ðµå·Î ±×¸± ¼ö ÀÖ´Ù. Á¤Á¡ÀÌ ¸î°³µç°£¿¡ ¸ðÁ¶¸® ¿¬°áÇؼ­ ÇϳªÀÇ µµÇüÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.

±²ÀåÈ÷ ÀÚÀ¯µµ°¡ ³ôÀº ¸ðµåÀÎ °Í °°Áö¸¸ ¾Æ¹« ´Ù°¢ÇüÀ̳ª ±×¸± ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï°í ±î´Ù·Î¿î Á¶°ÇÀÌ Àû¿ëµÈ´Ù. GL_POLYGON ¸ðµå·Î ±×¸®´Â ´Ù°¢ÇüÀ½ ´ÙÀ½ ¼¼ °¡Áö Á¶°ÇÀ» ¹Ýµå½Ã ¸¸Á·ÇØ¾ß ÇÑ´Ù.

 

¨ç Á¤Á¡ÀÇ ¼±ÀÌ ±³Â÷Çؼ­´Â ¾ÈµÈ´Ù.

¨è ´Ù°¢ÇüÀº º¼·ÏÇØ¾ß ÇÑ´Ù.

¨é ¸ðµç Á¤Á¡Àº °°Àº Æò¸é³»¿¡ ÀÖ¾î¾ß ÇÑ´Ù.

 

ù¹ø°, µÎ¹ø° Á¶°ÇÀº ´Ù¼Ò ÀÌÇØÇϱ⠽±´Ù. ´Ù°¢ÇüÀº ÇϳªÀÇ ´ÝÈù µµÇüÀ̾î¾ß ÇÏ¸ç ¾îµð°¡ ¾ÈÂÊÀÌ°í ¾îµð°¡ ¹Ù±ùÂÊÀÎÁö ¸íÈ®ÇÏ°Ô ±¸ºÐµÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª ¼±ÀÌ ±³Â÷Çϰųª ¿À¸ñÇϸé ÀÌ·± ÆÇ´ÜÀÌ ¾ÆÁÖ ¾î·Á¿öÁø´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.

¿ÞÂÊÀº ¸ðµÎ GL_POLYGON ¸ðµå·Î ±×¸± ¼ö ÀÖ´Â ´Ù°¢ÇüÀÌ´Ù. ±×·¯³ª ¿À¸¥ÂÊÀº Á¦´ë·Î ±×·ÁÁöÁö ¾Ê´Â´Ù. ¸®º» ¸ð¾çÀÇ ´Ù°¢ÇüÀº ¼±ºÐÀÌ ±³Â÷µÇ¾î µÎ °³ÀÇ ´Ù°¢ÇüÀ¸·Î ºÐÇÒµÈ °Íó·³ º¸ÀδÙ. LÀÚ ¸ð¾çÀÇ ´Ù°¢ÇüÀº ¿À¸ñÇؼ­ Àû¹ýÇÏÁö ¾Ê´Ù. º¼·ÏÇÏ´Ù´Â °ÍÀº ³»ºÎ¿¡¼­ ÀÓÀÇÀÇ ¼±ºÐÀ» ±×¾úÀ» ¶§ ¼±ºÐÀÌ ´Ù°¢ÇüÀ» ¹þ¾î³ªÁö ¾Ê¾Æ¾ß ÇÔÀ» ¶æÇÑ´Ù. ±×·¯³ª LÀÚ ¸ð¾çÀº ¼±ºÐÀÌ ¹Ù±ùÀ» ¹þ¾î³¯ ¼ö ÀÖ¾î ¿À¸ñÇÏ´Ù. ½ÊÀÚÇüÀÇ ´Ù°¢Çüµµ °°Àº ÀÌÀ¯·Î Àû¹ýÇÏÁö ¾Ê´Ù.

¾Õ¿¡¼­ ¸¶¸§¸ð¸¦ GL_QUADS·Î ±×·È´Âµ¥ 4°³ÀÇ Á¤Á¡À» ¿¬°áÇÏ´Â °ÍÀ̹ǷΠGL_POLYGONÀ¸·Î ¸ðµå¸¦ ¹Ù²Ù¾îµµ Á¤»óÀûÀ¸·Î Àß ±×·ÁÁø´Ù. ¸¶¸§¸ð¸¦ ±¸¼ºÇÏ´Â 4 Á¤Á¡ÀÌ ¹Ý½Ã°è ¹æÇâÀ¸·Î Á¦´ë·Î ³ª¿­µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     glBegin(GL_POLYGON);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, 0.0);

     glVertex2f(0.5, 0.0);

     glVertex2f(0.0, -0.5);

     glEnd();

     glFlush();

}

 

3¹ø° Á¤Á¡°ú 4¹ø° Á¤Á¡ÀÇ ¼ø¼­¸¦ ¹Ù²Ù¾ú´Ù. ÀÌ·¸°Ô µÇ¸é ¼±ºÐÀÌ ±³Â÷ÇÏ¸ç ¿À¸ñÇÑ ´Ù°¢ÇüÀÌ ±×·ÁÁø´Ù.

OpenGLÀÌ ÀÎÁ¤ÇÏ´Â ´Ù°¢ÇüÀÌ ¾Æ´Ï´Ù. µÎ ´Ù°¢ÇüÀÇ Â÷ÀÌÁ¡Àº Á¤Á¡ÀÇ ¼ø¼­ÀÌ´Ù. ¿ÞÂÊ ¸¶¸§¸ð´Â Á¤Á¡À» ÀÕ´Â ¼±ºÐµéÀÌ ¸¸³ªÁö ¾ÊÁö¸¸ ¼ø¼­¸¦ ¹Ù²Ù¸é ¼±ºÐ³¢¸® ±³Â÷ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¿À¸ñÇØÁ® ¹ö¸°´Ù.

¿¡·¯´Â ¹ß»ýÇÏÁö ¾Ê°í ¾î·µç ±×·ÁÁöÁö¸¸ ÀÌ°ÍÀÌ °ú¿¬ ÀǵµÇß´ø ´Ù°¢ÇüÀÌ ¸Â´ÂÁö´Â ¾Ö¸ÅÇÏ´Ù. ¸¸¾à ²À Àú·± ½ÄÀ¸·Î ´Ù°¢ÇüÀ» ±×¸®°í ½Í´Ù¸é ±ÔÄ¢¿¡ ¸Â´Â µÎ °³ÀÇ ´Ù°¢ÇüÀ¸·Î ºÐÇÒÇØ¾ß ÇÑ´Ù.

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     glBegin(GL_TRIANGLES);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, 0.0);

     glVertex2f(0.0, 0.0);

 

     glVertex2f(0.0, 0.0);

     glVertex2f(0.5, 0.0);

     glVertex2f(0.0, -0.5);

     glEnd();

     glFlush();

}

 

ÀÌ °æ¿ì´Â ¸®º»ÀÇ ¾Æ·¡ÂÊ°ú À§ÂÊÀ» µÎ °³ÀÇ »ï°¢ÇüÀ¸·Î ³ª´©°í GL_TRIANGLES ¸ðµå·Î ±×¸®¸é µÈ´Ù. º¼·ÏÇÑ µÎ °³ÀÇ ´Ù°¢ÇüÀÌ ±×·ÁÁö¸ç µÑ ´Ù ´Ù°¢Çü Á¶°Ç¿¡ ÀûÇÕÇÏ´Ù.

3¹ø° Á¶°ÇÀº ´Ù°¢ÇüÀ» ±¸¼ºÇÏ´Â ¸ðµç Á¤Á¡ÀÌ °°Àº Æò¸é¿¡ ¼Ò¼ÓµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ´ÙÀ½ µÎ °³ÀÇ »ç°¢ÇüÀ» º¸ÀÚ.

2Â÷¿ø È­¸é»ó¿¡¼­ ÀÌ µÎ µµÇüÀÇ »óŸ¦ Á¤È®ÇÏ°Ô ±×¸®´Â °ÍÀº »ç½Ç ¹«Ã´ ¾î·Á¿î ÀÏÀ̾ ¾à°£ÀÇ »ó»ó·ÂÀÌ ÇÊ¿äÇÏ´Ù. ¿ÞÂÊ »ç°¢ÇüÀº A4 ¿ëÁö¸¦ Ã¥»óÀ§¿¡ ¹ÝµíÇÏ°Ô ³õÀº ¸ð¾çÀÌ¸ç ¿ëÁöÀÇ ²ÀÁöÁ¡ 4¸éÀÌ Ã¥»óÀ̶ó´Â Æò¸é¿¡ ¸ðµÎ ¼Ò¼ÓµÇ¾î ÀÖ´Â »óÅÂÀÌ´Ù. ÀÌ·± µµÇüÀº Àû¹ýÇÑ ´Ù°¢ÇüÀ¸·Î ÀÎÁ¤µÈ´Ù.

¿À¸¥ÂÊ »ç°¢ÇüÀº A4 ¿ëÁö¸¦ Ã¥»ó¿¡ ³õÀº ÈÄ ¿À¸¥ÂÊ ¾Æ·¡ ±ÍÅüÀ̸¦ À§ÂÊÀ¸·Î ¾à°£ Ä¡ÄÑµç »óÅÂÀÌ´Ù. ÇÑÂÊÀÌ ÇÏ´Ã À§·Î ¼Ú¾Æ ¿Ã¶úÀ¸¹Ç·Î »ç°¢ÇüÀÇ 4Á¡ÀÌ ¸ðµÎ Ã¥»ó¸é¿¡ ¼Ò¼ÓµÇÁö ¾Ê¾Ò´Ù. OpenGLÀº ÀÌ·± ´Ù°¢ÇüÀ» ÀÎÁ¤ÇÏÁö ¾ÊÀ¸¸ç Á¦´ë·Î ±×·Á³»Áöµµ ¸øÇÑ´Ù. Á» ´õ ½ÉÇÏ°Ô ²¿¾Æ¼­ ¸þºñ¿ì½ºÀÇ ¶ìó·³ ºñƲ¾î ³õÀ¸¸é ¾îµð°¡ ¾ÕÀÌ°í ¾îµð°¡ µÚÀÎÁöµµ Çò°¥¸± °ÍÀδÙ.

4°¢Çü, 6°¢Çü, 8°¢Çü µî ¾ó¸¶µçÁö ¸¹Àº ²ÀÁöÁ¡À» °¡Áö´Â ´Ù°¢ÇüÀ» Á¤ÀÇÇÒ ¼ö´Â ÀÖ´Ù. ±×·¯³ª ¹Ýµå½Ã ¸ðµç Á¤Á¡Àº ÇÑ ¸é¿¡ ¼ÓÇØ¾ß ÇÑ´Ù. À§ ¿¹¿¡¼­ º¸´Ù½ÃÇÇ »ç°¢ÇüÀº Ç×»ó ÀÌ Á¶°ÇÀ» ¸¸Á·½ÃÅ°Áö ¸øÇÑ´Ù. ¹Ý¸é »ï°¢ÇüÀº ¾î¶² °æ¿ì¶óµµ ÇÑ Æò¸é¿¡ ¼ÓÇѴٴ Ư¡ÀÌ ÀÖ´Ù. ¿Ö ±×·±Áö Â÷¿øÀ» ³·Ãß¾î »ý°¢ÇØ º¸ÀÚ. µÎ °³ÀÇ Á¡Àº ¹«Á¶°Ç 1Â÷¿ø Á÷¼±¿¡ ¼ÓÇÏÁö¸¸ Á¡ÀÌ 3°³·Î ´Ã¾î³ª¸é ¼¼ Á¡ÀÌ ³ª¶õÈ÷ Àִ Ư¼öÇÑ °æ¿ì¸¦ Á¦¿ÜÇÏ°í´Â ÇÑ ¼±ºÐ¿¡ ¼ÓÇÒ ¼ö ¾ø´Ù.

ÀÌÁ¦ ÀÌ ÀÌ·ÐÀ» ÇÑÂ÷¿ø ³ô¿© »ý°¢ÇØ º¸¸é »ï°¢Çü°ú »ç°¢ÇüÀÇ Æ¯Â¡µµ ºÐ¸íÇØÁø´Ù. Á¡ 3 °³´Â ¾î¶² À§Ä¡¿¡ ÀÖ´õ¶óµµ À̵éÀ» ¸ðµÎ Æ÷°ýÇÏ´Â ÇϳªÀÇ Æò¸éÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Á¡ÀÌ Çϳª ´õ ´Ã¾î³ª 4°³°¡ µÇ¸é ÀÌ Á¡µéÀÌ ÇÑ Æò¸é¿¡ ¼ÓÇÏÁö ¾Ê´Â °æ¿ì°¡ ´õ ¸¹¾ÆÁö¸ç ÀϹÝÀûÀ¸·Î °°Àº Æò¸é¿¡ ¼ÓÇϱ⠾î·Æ´Ù. ¼Õ°¡¶ô 3°³¸¦ Æí »óÅ¿¡¼­ ¼¼ ¼Õ°¡¶ôÀ» ¸ðµÎ Ã¥»ó¿¡ ºÙÀÌ´Â °ÍÀº ¾ðÁ¦³ª °¡´ÉÇÏÁö¸¸ ¼Õ°¡¶ô 4°³´Â ±×·¸Áö ¾Ê´Ù´Â °ÍÀ» »ý°¢ÇØ º¸ÀÚ.

»ç°¢Çüµµ Á¶°Ç¸¸ ¸ÂÃß¸é ´Ù°¢ÇüÀÌ µÉ ¼ö ÀÖÀ¸¸ç »ï°¢Çüº¸´Ù ó¸® ¼Óµµ°¡ ºü¸£Áö¸¸ ¹Ýµå½Ã Á¶°ÇÀ» ÁöÄÑ¾ß ÇÑ´Ù. ÀÌ·± ÀÌÀ¯·Î 3Â÷¿ø ±×·¡ÇÈÀ» ±¸¼ºÇÏ´Â ±âº» ´ÜÀ§´Â ´ëºÎºÐÀÇ °æ¿ì »ï°¢ÇüÀÌ´Ù. ¾Æ¹«¸® º¹ÀâÇÑ ¹°Ã¼µµ »ï°¢ÇüÀÇ Á¶ÇÕÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. »ç°¢ÇüÀº »ï°¢Çü 2°³¸¦ ºÙÀÌ¸é °£´ÜÇÏ°Ô Á¤ÀǵȴÙ. Âü°í·Î ¸ð¹ÙÀÏ È¯°æÀÇ OpenGL ES´Â »ç°¢ÇüÀ» ¾Æ¿¹ ÀÎÁ¤ÇÏÁö ¾ÊÀ¸¸ç ¹«Á¶°Ç »ï°¢Çü¸¸ °¡´ÉÇÏ´Ù.

OpenGLÀÌ ´Ù°¢Çü¿¡ ´ëÇØ ÀÌ·± ±î´Ù·Î¿î Á¦ÇÑÀ» µÎ´Â ÀÌÀ¯´Â ±×·¡¾ß ¼Óµµ°¡ ºü¸£±â ¶§¹®ÀÌ´Ù. ÀÌ·± Àú·± Á¶°Çµé ´Ù °í·ÁÇؼ­ ´Ù°¢ÇüÀ» ±×¸®ÀÚ¸é ³Ê¹« º¹ÀâÇØÁö°í °è»ê¾çµµ ¸¹¾ÆÁø´Ù. ¿øÀÚÀûÀÎ ´Ù°¢ÇüÀÌ ´Ü¼øÇØ¾ß ´õ È¿À²ÀûÀÌ°í ºü¸¥ ¾Ë°í¸®ÁòÀ» Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç Çϵå¿þ¾îÀÇ µµ¿òµµ ¹ÞÀ» ¼ö ÀÖ´Ù.

4-6.ºí·£µù

È­¸é¿¡ ±×·ÁÁø ±×¸²Àº »ö»ó ¹öÆÛ¶ó´Â ¸Þ¸ð¸®¿¡ ÀúÀåµÈ´Ù. ±×¸²ÀÌ ÀÌ¹Ì ±×·ÁÁ® ÀÖ´Â »óÅ¿¡¼­ °°Àº À§Ä¡¿¡ ´Ù¸¥ ±×¸²À» ±×¸®¸é »õ ±×¸²À» ¸Þ¸ð¸®¿¡ ±â·ÏÇϹǷΠÀÌÀü¿¡ ±×·ÁÁ® ÀÖ´ø ±×¸²Àº µ¤¿©¼­ Áö¿öÁø´Ù. ÀÌ ´ç¿¬ÇÑ Çö»óµµ ºí·£µù ¸ðµå¸¦ º¯°æÇÏ¸é ´Þ¶óÁú ¼ö ÀÖ´Ù. ºí·£µùÀº »ö»ó ¹öÆÛ¿¡ ÀÌ¹Ì ±â·ÏµÇ¾î ÀÖ´Â °ª°ú »õ·Î ±×·ÁÁö´Â °ªÀÇ ³í¸® ¿¬»ê ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù.

´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ROP ¸ðµå(Raster Operation)¶ó°í ÈçÈ÷ ºÎ¸£´Â ¿¬»êÀÌµÇ ±×º¸´Ù´Â ÈξÀ ´õ »ó¼¼ÇÏ´Ù. µðÆúÆ® ¸ðµå°¡ ´Ü¼øÇÑ º¹»çÀ̹ǷΠÀÌÀü ±×¸²ÀÌ Áö¿öÁöÁö¸¸ ´Ù¸¥ ¸ðµå¸¦ »ç¿ëÇÏ¸é µÎ °ªÀ» ³í¸®ÀûÀ¸·Î ¿¬»êÇÑ °á°ú¸¦ ½á ³ÖÀ½À¸·Î½á ƯÀÌÇÑ È¿°ú¸¦ ³¾ ¼ö ÀÖ´Ù. ºí·£µù ±â´ÉÀ» »ç¿ëÇ϶ó¸é ´ÙÀ½ ¸í·ÉÀ¸·Î ÀÌ ±â´ÉÀ» ÄÑ¾ß ÇÑ´Ù.

 

glEnable(GL_BLEND);

 

ºí·£µùÀº »ö»ó ¹öÆÛ¿¡ ÀÌ¹Ì ±â·ÏµÇ¾î ÀÖ´Â °ª D¿Í »õ·Î ±â·ÏµÇ´Â °ª S¿ÍÀÇ ¿¬»êÀ» Á¤ÀÇÇÑ´Ù. ¿¬»ê ¹æ¹ýÀº ´ÙÀ½ µÎ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù.

 

void glBlendFunc(GLenum sfactor, GLenum dfactor);

void glBlendEquation(GLenum mode);

 

sfactor¿Í dfactor´Â S»ö»ó°ú D»ö»ó¿¡ °¢°¢ Àû¿ëÇÒ ¿¬»ê½ÄÀ» Á¤ÀÇÇϸç mode´Â µÎ ¿¬»ê °á°ú¸¦ ÇÕÄ¥ ¹æ¹ýÀ» Á¤ÀÇÇÑ´Ù. ¸ðµå¿¡ µû¸¥ ¿¬»ê½ÄÀº ´ÙÀ½°ú °°´Ù. µðÆúÆ®´Â µÎ ¿¬»ê½ÄÀ» ´õÇÏ´Â GL_FUNC_ADDÀÌ´Ù.

 

¸ðµå

¿¬»ê½Ä

GL_FUNC_ADD

S*SF + D*DF. ÀÌ ¸ðµå°¡ µðÆúÆ®ÀÌ´Ù.

GL_FUNC_SUBTRACT

S*SF - D*DF

GL_FUNC_REVERSE_SUBTRACT

D*DF -S*SF

GL_MIN

S*SF, D*DF Áß ÀÛÀº °ª

GL_MAX

S*SF, D*DF Áß Å« °ª

 

S¿Í D¿¡ Àû¿ëµÇ´Â ¿¬»ê½ÄÀÇ Á¾·ù´Â ´ÙÀ½°ú °°´Ù. ÀÌÇظ¦ µ½±â À§ÇØ Àß »ç¿ëµÇÁö ¾Ê´Â ÀϺΠÇ×À» »ý·«Çߴµ¥ ´õ Á¤È®ÇÑ ½ÄÀº ·¹ÆÛ·±½º¸¦ º¸±â ¹Ù¶õ´Ù.

 

¿¬»ê½Ä

»ö»ó(FR, FG, FB, FA)

GL_ZERO

(0,0,0,0)

GL_ONE

(1,1,1,1)

GL_SRC_COLOR

(RS, GS, BS, AS)

GL_ONE_MINUS_SRC_COLOR

(1-RS, 1-GS, 1-BS, 1-AS)

GL_DST_COLOR

(RD, GD, BD, AD)

GL_ONE_MINUS_DST_COLOR

(1-RD, 1-GD, 1-BD, 1-AD)

GL_SRC_ALPHA

(AS, AS, AS, AS)

GL_ONE_MINUS_SRC_ALPHA

(1-AS, 1-AS, 1-AS, 1-AS)

GL_DST_ALPHA

(AD, AD, AD, AD)

GL_ONE_MINUS_DST_ALPHA

(1-AD, 1-AD, 1-AD, 1-AD)

GL_CONSTANT_COLOR

(RC, GC, BC, AC)

GL_ONE_MINUS_CONSTANT_COLOR

(1-RC, 1-GC, 1-BC, 1-AC)

GL_CONSTANT_ALPHA

(AC, AC, AC, AC)

GL_ONE_MINUS_CONSTANT_ALPHA

(1-AC, 1-AC, 1-AC, 1-AC)

GL_SRC_ALPHA_SATURATE

(i,i,i,1) i= min(AS, 1-AD)

 

¿¬»ê½Ä¿¡ ÀÇÇØ R, G, B, A »ö»ó ¿ä¼Ò °¢°¢¿¡ °öÇØÁö´Â FR, FG, FB, FA ÇÔ¼ö°¡ Á¤Àǵǰí ÀÌ ÇÔ¼ö°¡ °¢ »ö»ó ¿ä¼Ò¿¡ Àû¿ëµÊÀ¸·Î½á Áß°£½ÄÀÌ »ý¼ºµÇ¸ç µÎ Áß°£½ÄÀ» ¿¬»êÇÏ¿© ÃÖÁ¾ »ö»óÀ» µµÃâÇÑ´Ù. »ö»ó ¿ä¼Ò°¡ ¾Æ´Ñ »ó¼ö¿Íµµ ¿¬»êÀ» Çϴµ¥ À̶§ »ç¿ëÇÒ »ó¼ö´Â ´ÙÀ½ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù.

 

void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

 

µðÆúÆ® »ó¼ö´Â (0,0,0,0)ÀÎ °ËÁ¤»öÀÌ´Ù. ´ÙÀ½ ÇÔ¼ö´Â Á» ´õ »ó¼¼ÇÑ ¿¬»ê ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù. GLBlendFunc´Â RGB »ö»ó ¿ä¼Ò¿Í ¾ËÆÄ ¿ä¼Ò¸¦ °°ÀÌ ¿¬»êÇϴµ¥ ºñÇØ ÀÌ ÇÔ¼ö´Â µÎ ¿ä¼Ò¿¡ ´ëÇØ °¢°¢ ´Ù¸¥ ºí·»µù ÇÔ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.

 

void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);

void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);

 

ÁöÁ¤ °¡´ÉÇÑ ¿¬»êÀÇ Á¾·ù´Â µ¿ÀÏÇÏ´Ù. °è»ê½ÄÀÌ Á» ´õ º¹ÀâÇØÁöÁö¸¸ ´ë½Å ´õ ´Ù¾çÇÑ ±â±³¸¦ ºÎ¸± ¼ö ÀÖ´Ù. ºí·£µùÀº ¼³¸í¸¸À¸·Î ÀÌÇØÇϱâ´Â ¾î·Á¿ì¹Ç·Î ¿¹Á¦¸¦ ºÐ¼®ÇØ º¸ÀÚ.

 

Blend

#include <windows.h>

#include <gl/glut.h>

 

void DoDisplay();

void DoKeyboard(unsigned char key, int x, int y);

void DoMenu(int value);

 

GLfloat Alpha = 0.5f;

GLenum Src = GL_SRC_ALPHA;

GLenum Dest = GL_ONE_MINUS_SRC_ALPHA;

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

       ,LPSTR lpszCmdParam,int nCmdShow)

{

     glutCreateWindow("OpenGL");

     glutDisplayFunc(DoDisplay);

     glutKeyboardFunc(DoKeyboard);

     glutCreateMenu(DoMenu);

     glutAddMenuEntry("Opaque",1);

     glutAddMenuEntry("Traslucent",2);

     glutAttachMenu(GLUT_RIGHT_BUTTON);

     glutMainLoop();

     return 0;

}

 

void DoKeyboard(unsigned char key, int x, int y)

{

     switch(key) {

     case 'q':

          Alpha += 0.1;

          break;

     case 'a':

          Alpha -= 0.1;

          break;

     }

     glutPostRedisplay();

}

 

void DoMenu(int value)

{

     switch(value) {

     case 1:

          Src = GL_ONE;

          Dest = GL_ZERO;

          break;

     case 2:

          Src = GL_SRC_ALPHA;

          Dest = GL_ONE_MINUS_SRC_ALPHA;

          break;

     }

     glutPostRedisplay();

}

 

void DoDisplay()

{

     glClearColor(1,1,1,1);

     glClear(GL_COLOR_BUFFER_BIT);

 

     glEnable(GL_BLEND);

     glBlendFunc(Src, Dest);

 

     glColor3f(0, 0, 1);

     glRectf(-0.5, 0.8, 0.5, 0.0);

 

     glColor4f(1, 0, 0, Alpha);

     glBegin(GL_TRIANGLES);

     glVertex2f(0.0, 0.5);

     glVertex2f(-0.5, -0.5);

     glVertex2f(0.5, -0.5);

     glEnd();

     glFlush();

}

 

ÆĶõ»ö »ç°¢ÇüÀ» ±×¸®°í ±× À§¿¡ »¡°£»ö »ï°¢ÇüÀ» ±×·È´Ù. Åõ¸íÇÑ ºí·£µù ¸ðµå¸¦ »ç¿ëÇßÀ¸¹Ç·Î »ï°¢Çü µÚ·Î »ç°¢ÇüÀÌ È帴ÇÏ°Ô ºñÄ£´Ù. Å°º¸µåÀÇ qaÅ°·Î ¾ËÆÄ°ªÀ» Áõ°¡½ÃÄÑ º¸¸é ºñÄ¡´Â Á¤µµ°¡ ´Þ¶óÁø´Ù. Æ˾÷ ¸Þ´º¿¡¼­ Opaque¸¦ ¼±ÅÃÇÏ¸é µðÆúÆ® ºí·£µù ¸ðµå¸¦ Àû¿ëÇÏ¿© ºÒÅõ¸íÇÏ°Ô Ãâ·ÂµÈ´Ù.

 

ÀÌ ¿¹Á¦¿¡¼­ ¹ÝÅõ¸í Ãâ·Â¿¡ »ç¿ëÇÑ ºí·£µå ¿¬»ê½ÄÀº ´ÙÀ½°ú °°´Ù.

 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

 

»ï°¢ÇüÀÇ ¾ËÆÄ°ªÀÌ 0.4¶ó°í ÇßÀ» ¶§ GL_SRC_ALPHAÀÇ ºí·£µù ÇÔ¼ö´Â (AS, AS, AS, AS)ÀÌ´Ù. ±×·¡¼­ SÀÇ °¢ »ö»ó ¿ä¼Ò¿¡ 0.4°¡ °öÇØÁø´Ù. GL_ONE_MINUS_SRC_ALPHAÀÇ ºí·£µù ÇÔ¼ö´Â ¸ðµÎ 1-ASÀ̹ǷΠDÀÇ °¢ »ö»ó ¿ä¼Ò¿¡ 0.6ÀÌ °öÇØÁø´Ù. µÎ ¿¬»ê °á°ú¸¦ ¿¬»êÇÏ´Â ¸ðµå´Â µðÆúÆ®ÀÎ GL_FUNC_ADDÀ̹ǷΠµÎ °ªÀ» ´õÇØ ÃÖÁ¾ »ö»óÀ» °áÁ¤ÇÑ´Ù.

 

(0.4 * 1 + 0.6 * 0, 0.4 * 0 + 0.6 * 0, 0.4 * 0 + 0.6 * 1, 0.4 * 0.4 + 0.6 * 0.6)

(0.4 * (1,0,0,0.4) + 0.6 * (0,0,1,0.6))

0.4 * »¡°£»ö + 0.6 * ÆĶõ»ö

 

¼ö½ÄÀ¸·Î Ç¥ÇöÇÏ¸é º¹ÀâÇØ º¸À̴µ¥ ¸»·Î ¼³¸íÇϸé S»ö 40%, D»ö 60%¸¦ ¼¯¾î¼­ »õ·Î ±â·ÏÇÑ´Ù´Â ¶æÀÌ´Ù. ±×·¡¼­ µÎ »ö»óÀÌ ¹ÝÂë ¼¯¿©¼­ Ãâ·ÂµÇ¸ç µÚÂÊ »ö»óÀÌ Àû´çÈ÷ ºñÃÄ º¸ÀÌ´Â °ÍÀÌ´Ù. ºÒÅõ¸í ¸ðµåÀÏ ¶§´Â ´ÙÀ½ ºí·£µå ¿¬»ê½ÄÀ» »ç¿ëÇÑ´Ù.

 

glBlendFunc(GL_ONE, GL_ZERO);

 

ÀÌ ½ÄÀº ¾ÆÁÖ ½±´Ù. SÀÇ ¸ðµç »ö»ó ¿ä¼Ò¿¡ 1À» °öÇÑ´Ù´Â °ÍÀº °ð SÀÇ »ö»óÀ» ±×´ë·Î À¯ÁöÇÑ´Ù´Â ¶æÀÌ°í DÀÇ ¸ðµç »ö»ó ¿ä¼Ò¿¡ 0À» °öÇÑ´Ù´Â °ÍÀº DÀÇ »ö»óÀ» ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù´Â ¶æÀÌ´Ù. ±×·¯¹Ç·Î D »ö»óÀº S¿¡ µ¤¿©¼­ ¾È º¸ÀÌ°Ô µÇ´Â °ÍÀÌ´Ù.

ºí·£µù ¸ðµå´Â ÀÀ¿ëÀÇ ¹¦¹Ì°¡ ÀÖ´Â ±â¼úÀÌ´Ù. ¿¬»ê½ÄÀ» Àß Á¶ÇÕÇϸç À¯¸®Ã¢¿¡ È帴ÇÏ°Ô ºñÄ¡´Â »óųª °Å¿ï¿¡ ¹Ý»çµÈ ¸ð¾çÀ» ±×¸± ¼ö ÀÖ´Ù. Á¤È®ÇÏ°Ô ¿øÇÏ´Â È¿°ú¸¦ ³»±â À§Çؼ­´Â ¸¹Àº ¿¬½À°ú Å×½ºÆ®°¡ ÇÊ¿äÇÏ´Ù.

4-7.¾ÈƼ ¾Ë¸®¾Æ½Ì

ÄÄÇ»ÅÍ È­¸éÀº µðÁöÅÐÀ̾ Çػ󵵰¡ À¢¸¸Å­ ³ô¾Æµµ ½Ç¼¼°èÀÇ Àå¸éµéº¸´Ù´Â ÀÚ¿¬½º·´Áö ¸øÇÏ´Ù. ƯÈ÷ »ö»ó °æ°è°¡ ¶Ñ·ÇÇÒ¼ö·Ï °æ°è¸éÀÌ ¾î»öÇؼ­ ÀÌÁú°¨ÀÌ ´õÇØ º¸ÀδÙ. µðÁöÅÐ È­¸é¿¡¼­ ³ªÅ¸³ª´Â °è´Ü Çö»ó µîÀ» ¾Ë¸®¾Æ½º¶ó°í Çϸç ÀÌ·± Çö»óÀ» Á¦°Å ¶Ç´Â °¨¼Ò½ÃÅ°´Â ±â¼úÀ» ¾ÈƼ ¾Ë¸®¾Æ½Ì(Anti Aliasing)À̶ó°í ÇÑ´Ù.

¾Ë¸®¾Æ½º´Â ¿©·¯ °¡Áö ¿øÀÎÀ¸·Î ÀÎÇØ ¹ß»ýÇϴµ¥ ³Ê¹« ¶Ñ·ÇÇÑ »ö»óÂ÷°¡ ÁÖµÈ ¿øÀÎÀÌ´Ù. ¾Ë¸®¾Æ½º¸¦ Á¦°ÅÇÏ·Á¸é µÎ »ö»óÀÇ °æ°è¸é¿¡ Áß°£»öÀ» »ðÀÔÇÏ´Â ±â¹ýÀÌ ÈçÈ÷ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î Èò»ö°ú °ËÁ¤»ö »çÀÌ¿¡ ȸ»öÀ» ´Ü°èÀûÀ¸·Î »ðÀÔÇÏ´Â ½ÄÀÌ´Ù. ÀÌ ±â´ÉÀº ºí·£µù ¿¬»êÀ» »ç¿ëÇϹǷΠºí·£µù ±â´ÉÀ» ÄÑ¾ß ÇÑ´Ù. ±×¸®°í ´ÙÀ½ ÇÔ¼ö·Î Á¡, ¼±, ´Ù°¢Çü¿¡ ´ëÇØ ¾ÈƼ ¾Ë¸®¾Æ½ÌÀ» Àû¿ëÇÑ´Ù.

 

glEnable(GL_POINT_SMOOTH);

glEnable(GL_LINE_SMOOTH);

glEnable(GL_POLYGON_SMOOTH);

 

ºí·£µùÀ» ÄÑ°í ¾Ë¸®¾Æ½Ì ±â´ÉÀ» ÄÑ ³õÀ¸¸é OpenGLÀÌ ¾Ë¾Æ¼­ ¾Ë¸®¾Æ½º¸¦ Á¦°ÅÇØ ÁØ´Ù. ¹°·Ð Ãß°¡ ¿¬»êÀ» ÇØ¾ß ÇϹǷΠ½Ã°£Àº Á» ´õ °É¸°´Ù. ´Ù°¢Çü¿¡ ´ëÇÑ ¾ÈƼ ¾Ë¸®¾Æ½ÌÀº ÀϺΠÇ÷§Æû¿¡¼­´Â Á¦´ë·Î Áö¿øµÇÁö ¾Ê´Â´Ù.

ÄÄÇ»ÅÍÀÇ ¼¼°è¿¡¼­ ¼Óµµ¿Í Ç°ÁúÀº Ç×»ó ¹Ýºñ·Ê °ü°è¿¡ ÀÖ´Ù. ¼Óµµ¸¦ ³»·Á¸é Ç°ÁúÀ» Èñ»ýÇØ¾ß ÇÏ°í °íÇ°ÁúÀ» ¾òÀ¸·Á¸é ½Ã°£ÀÌ ¿À·¡ °É¸± ¼ö¹Û¿¡ ¾ø´Ù. µÑ ´Ù ÁÁÀ» ¼ö´Â ¾øÀ¸¹Ç·Î °³¹ßÀÚ´Â µÑ Áß ¾î¶² °Í¿¡ ´õ ÁßÁ¡À» µÑ °ÍÀÎÁö¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â OpenGL ¶óÀ̺귯¸®¿¡°Ô ¹«¾ùÀ» ´õ ¿ì¼±½ÃÇÒ °ÍÀÎÁö ÈùÆ®¸¦ Á¦°øÇÑ´Ù.

 

void glHint(GLenum target, GLenum mode);

 

targetÀº ¿É¼Ç Á¶Á¤ÀÇ ´ë»óÀÌ°í mode´Â ¿É¼ÇÀ» ¾î¶»°Ô Á¶Á¤ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. Á¶Á¤ °¡´ÉÇÑ ¿É¼Ç ¸ñ·ÏÀº ´ÙÀ½°ú °°´Ù. Àǹ̴ ´ëºÎºÐ À̸§À¸·ÎºÎÅÍ ½±°Ô ¾Ë ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù.

 

GL_FOG_HINT

GL_GENERATE_MIPMAP_HINT

GL_LINE_SMOOTH_HINT

GL_PERSPECTIVE_CORRECTION_HINT

GL_POINT_SMOOTH_HINT

GL_POLYGON_SMOOTH_HINT

GL_TEXTURE_COMPRESSION_HINT

GL_FRAGMENT_SHADER_DERIVATIVE_HINT

 

°¢ Ÿ°Ù¿¡ ´ëÇØ mode·Î ÈùÆ®¸¦ ÁØ´Ù. ¼Óµµ°¡ ÃÖ¿ì¼±ÀÏ ¶§´Â GL_FASTEST ¸ðµå¸¦ ÁöÁ¤ÇÏ°í Ç°ÁúÀÌ Áß¿äÇÒ ¶§´Â GL_NICEST·Î ÁöÁ¤ÇÑ´Ù. ¾î´À °ÍÀ̳ª »ó°ü¾ø´Ù¸é GL_DONT_CARE·Î ÁöÁ¤Çϸç ÀÌ °ªÀÌ µðÆúÆ®ÀÌ´Ù. ±×·¡¼­ º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é OpenGLÀÌ Áö ¸¾´ë·Î ¼Óµµ¿Í Ç°Áú Áß Çϳª¸¦ ¼±ÅÃÇÑ´Ù.

ÈùÆ®´Â °­Á¦ÀûÀÎ ¸í·ÉÀÌ ¾Æ´Ï¸ç ¾îµð±îÁö³ª ƯÁ¤ ±â´ÉÀÌ ¾î¶² ½ÄÀ¸·Î ±¸ÇöµÇ¾úÀ¸¸é ÁÁ°Ú´Ù´Â Èñ¸Á »çÇ×À» ¹àÈ÷´Â °Í »ÓÀ̾ ¹Ýµå½Ã ÁöÁ¤ÇÑ´ë·Î µ¿ÀÛÇÑ´Ù´Â ¹ýÀº ¾ø´Ù. ÈùÆ®¸¦ ½ÇÁ¦ ±×¸®±â¿¡ Àû¿ëÇÒ °ÍÀΰ¡ ¾Æ´Ñ°¡´Â µå¶óÀ̹ö°¡ °áÁ¤ÇÑ´Ù. µå¶óÀ̹öÀÇ ´É·ÂÀÌ µÇ°í »óȲÀÌ Çã¶ôÇÑ´Ù¸é ¿äûÀ» ¹Þ¾ÆÁÙ °ÍÀÌ°í ±×·¸Áö ¾Ê´Ù¸é ¹«½ÃÇØ ¹ö¸°´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾ÈƼ¾Ë¸®¾Æ½Ì°ú ÈùÆ® ±â´ÉÀ» Å×½ºÆ®ÇÑ´Ù.

 

AntiAlias

#include <windows.h>

#include <gl/glut.h>

 

void DoDisplay();

void DoMenu(int value);

BOOLEAN bAlias;

BOOLEAN bHint;

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

       ,LPSTR lpszCmdParam,int nCmdShow)

{

     glutCreateWindow("OpenGL");

     glutDisplayFunc(DoDisplay);

     glutCreateMenu(DoMenu);

     glutAddMenuEntry("Alias ON",1);

     glutAddMenuEntry("Alias OFF",2);

     glutAddMenuEntry("Hint ON",3);

     glutAddMenuEntry("Hint OFF",4);

     glutAttachMenu(GLUT_RIGHT_BUTTON);

     glutMainLoop();

     return 0;

}

 

void DoMenu(int value)

{

     switch(value) {

     case 1:

          bAlias = TRUE;

          break;

     case 2:

          bAlias = FALSE;

          break;

     case 3:

          bHint = TRUE;

          break;

     case 4:

          bHint = FALSE;

          break;

     }

     glutPostRedisplay();

}

 

void DoDisplay()

{

     glClear(GL_COLOR_BUFFER_BIT);

 

     // ºí·£µùÀÌ ÄÑÁ® ÀÖ¾î¾ß ¾Ë¸®¾Æ½ÌÀÌ Á¦´ë·Î µÈ´Ù.

     glEnable(GL_BLEND);

     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

 

     // ¾ÈƼ ¾Ë¸®¾Æ½Ì on, off

     if (bAlias) {

          glEnable(GL_POINT_SMOOTH);

          glEnable(GL_LINE_SMOOTH);

          glEnable(GL_POLYGON_SMOOTH);

     } else {

          glDisable(GL_POINT_SMOOTH);

          glDisable(GL_LINE_SMOOTH);

          glDisable(GL_POLYGON_SMOOTH);

     }

 

     // °íÇ°Áú Ãâ·ÂÀ» À§ÇÑ ÈùÆ®

     glHint(GL_POINT_SMOOTH_HINT, bHint ? GL_NICEST:GL_FASTEST);

     glHint(GL_LINE_SMOOTH_HINT, bHint ? GL_NICEST:GL_FASTEST);

     glHint(GL_POLYGON_SMOOTH_HINT, bHint ? GL_NICEST:GL_FASTEST);

 

     glPointSize(10.0);

     glColor3f(1,1,1);

     glBegin(GL_POINTS);

     glVertex2f(0.0, 0.8);

     glEnd();

 

     glLineWidth(5);

     glBegin(GL_LINE_STRIP);

     glVertex2f(-0.8, 0.7);

     glVertex2f(0.8, 0.5);

     glEnd();

 

     glBegin(GL_POLYGON);

     glColor3f(1,0,0);

     glVertex2f(0.0, 0.4);

     glColor3f(0,1,0);

     glVertex2f(-0.4, 0.0);

     glColor3f(0,0,1);

     glVertex2f(0.0, -0.4);

     glColor3f(1,1,0);

     glVertex2f(0.4, 0.0);

     glEnd();

 

     glFlush();

}

 

°ËÁ¤»ö ¹ÙÅÁ¿¡ Èò»öÀ¸·Î Á¡°ú ¼±À» ¾ÆÁÖ ±½°Ô ±×·Á ³õ¾ÒÀ¸¸ç ¸¶¸§¸ð´Â 4°¡Áö »ö»óÀ¸·Î È­·ÁÇÏ°Ô ±×·È´Ù. Æ˾÷ ¸Þ´º·Î ¾ÈƼ ¾Ë¸®¾Æ½Ì°ú ÈùÆ® ±â´ÉÀ» Åä±ÛÇØ º¸°í Ãâ·Â °á°ú°¡ ¾î¶»°Ô ´Þ¶óÁö´ÂÁö °üÂûÇØ º¸ÀÚ.

 

¾ÈƼ ¾Ë¸®¾Æ½ÌÀ» Àû¿ëÇÏÁö ¾ÊÀº »óÅ¿¡¼­´Â Á¡ÀÌ »ç°¢ÇüÀ¸·Î º¸ÀÌ°í Á÷¼±µµ °è´Ü Çö»óÀÌ ½ÉÇØ ´«¿¡ °Å½½¸°´Ù. °ËÁ¤ ¹ÙÅÁ¿¡ Èò»öÀÌ´Ù º¸´Ï ºÎÀÚ¿¬½º·¯¿òÀÌ ÈξÀ ´õ ½ÉÇØ º¸ÀδÙ. ´Ù°¢ÇüÀº ¿ø»öÀ̶ó ±×·¡µµ ´ú ¾î»öÇÏ´Ù.

¾ÈƼ ¾Ë¸®¾Æ½Ì ±â´ÉÀ» ÄѸé Á¡Àº µ¿±×¶þ°Ô º¸ÀÌ°í °è´Ü Çö»óµµ ÈξÀ ´úÇØ º¸ÀδÙ. µ¸º¸±â·Î È­¸éÀ» È®´ëÇØ º¸¸é ȸ»öÁ¡ÀÌ È帴ÇÏ°Ô »ðÀԵǾî ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ´Ù°¢Çü¿¡ ´ëÇؼ­´Â ¾ÈƼ ¾Ë¸®¾Æ½ÌÀÌ Á¦´ë·Î Áö¿øµÇÁö ¾Ê´Â´Ù. ÈùÆ® ±â´Éµµ Åä±ÛÇÒ ¼ö ÀÖµµ·Ï ÇØ µÎ¾ú´Âµ¥ ±×¸²ÀÌ ³Ê¹« ´Ü¼øÇؼ­ ÈùÆ®ÀÇ È¿°ú¸¦ ½Ç°¨Çϱ⠾î·Æ´Ù.