OpenGLÀº 3Â÷¿ø ±×·¡ÇÈ ¶óÀ̺귯¸®ÀÌÁö¸¸ 2Â÷¿øÀÇ ±×·¡ÇÈÀ» °ü¸®ÇÏ´Â ±â´Éµµ Á¦°øÇÑ´Ù. ÅؽºÃ³ ¸ÊÇÎÀ» À§ÇØ 2Â÷¿ø ºñÆ®¸ÊÀ» ó¸®ÇÏ´Â ±â´ÉÀÌ ÇÊ¿äÇÏ¸ç ¶ÇÇÑ 3Â÷¿ø ±×·¡ÇÈÀÌ¶óµµ Åõ¿µ ÈÄ¿¡´Â 2Â÷¿øÀÌ µÇ¹Ç·Î ÀÌ ¶ÇÇÑ ´Ù·ê ¼ö ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ¹°·Ð Àü¹®ÀûÀÎ 2Â÷¿ø ±×·¡ÇÈ ¶óÀ̺귯¸®¿¡ ºñÇÒ ¹Ù´Â ¾Æ´Ï´Ù.
ºñÆ®¸ÊÀº ¹Ì¸® ¸¸µé¾îÁø À̹ÌÁö¸¦ ÀǹÌÇÏ¸ç ´Ù¾çÇÑ Å©±â¿Í »ö»óÀ» °¡Áú ¼ö ÀÖ´Ù. ±×·¯³ª OpenGL¿¡¼´Â Èæ¹é À̹ÌÁö¸¸À» ºñÆ®¸ÊÀ̶ó°í ĪÇϸç Ä÷¯ À̹ÌÁö´Â Çȼ¿¸Ê(Pixelmap)À̶ó´Â º°µµÀÇ ¿ë¾î¸¦ »ç¿ëÇÑ´Ù. bit°¡ ¿ë¾î°¡ ¿ø·¡ 0°ú 1¸¸À» ÀǹÌÇÏ´Â Èæ¹éÀûÀÎ ¶æÀ̱⠶§¹®À̶ó°í ÇÑ´Ù. »ç½Ç µðÁöÅÐ À̹ÌÁö¶ó´Â Á¤ÀÇ°¡ °¡Àå Á¤È®Çѵ¥ ¾î·µç OpenGLÀº Ä÷¯ À̹ÌÁö¿Í Èæ¹é À̹ÌÁö¸¦ ±¸ºÐÇÑ´Ù°í ¾Ë¾Æ µÎÀÚ.
ºñÆ®¸ÊÀº º¸Åë ´ë¿ë·®ÀÇ ·¡½ºÅÍ µ¥ÀÌÅÍ·Î ±¸¼ºµÇ¹Ç·Î ÆÄÀÏ ÇüÅ·ΠÀúÀåµÇ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ±×·¯³ª ¾ÈŸ±õ°Ôµµ OpenGLÀº ÆÄÀÏ ÀÔÃâ·Â ±â´ÉÀ» Á¦°øÇÏÁö ¾ÊÀ¸¹Ç·Î ÆÄÀÏÀ̳ª ¸®¼Ò½º·ÎºÎÅÍ ºñÆ®¸ÊÀ» »ý¼ºÇϱ⠾î·Æ´Ù. °£´ÜÇÑ À̹ÌÁö¶ó¸é ¸Þ¸ð¸®¿¡¼ ·¡½ºÅÍ µ¥ÀÌÅ͸¦ Á÷Á¢ Á¤ÀÇÇÏ¿© ¸¸µé¾î ½á¾ß ÇÑ´Ù. ¸ð´« Á¾ÀÌ¿¡ ´ÙÀ½°ú °°ÀÌ À̹ÌÁö¸¦ µðÀÚÀÎÇØ º¸ÀÚ.
ºñÆ®¸ÊÀ» ¸¸µå´Â ¾ÆÁÖ ¿ø½ÃÀûÀÎ ¹æ¹ýÀε¥ °¢ ÄÀÇ Èò»öÀº ÀÌÁø¼ö 0¿¡ ´ëÀÀ½ÃÅ°°í °ËÁ¤»öÀº 1¿¡ ´ëÀÀ½ÃŲ´Ù. ÀÌ ¼ö¸¦ ³ª¿Çϸé 2Áø¼ö°¡ ³ª¿À´Âµ¥ ÀÚ¸® ¼ö°¡ ³Ê¹« ¸¹À¸¹Ç·Î º¸Åë 16Áø¼ö·Î ¾ÐÃàÇÑ´Ù. ÀÌ·¸°Ô ¸¸µç 16Áø¼ö¸¦ ¹è¿¿¡ ¼ø¼´ë·Î ±â·ÏÇÏ¸é ºñÆ®¸ÊÀÌ µÈ´Ù. OpenGLÀÇ ºñÆ®¸ÊÀº ¾Æ·¡¿¡¼ À§·Î Á¤ÀǵǹǷΠÁ¦ÀÏ ¾Æ·¡ÁÙºÎÅÍ ¹è¿¿¡ ±â·ÏÇÑ´Ù.
ºñÆ®¸ÊÀÇ ·¡½ºÅÍ µ¥ÀÌÅʹ ó¸®ÀÇ È¿À²¼ºÀ» À§ÇØ 4¹ÙÀÌÆ® ´ÜÀ§·Î Á¤·ÄµÈ´Ù. ¿Ö³ÄÇÏ¸é ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ´Â 32ºñÆ®ÀÌ°í Çѹø¿¡ 4¹ÙÀÌÆ®¾¿ ÀÐ°í ¾²´Â ¼Óµµ°¡ °¡Àå ºü¸£±â ¶§¹®ÀÌ´Ù. ÇÑ ÇàÀÌ 4ÀÇ ¹è¼ö°¡ ¾ÈµÇ´õ¶óµµ µÞ ºÎºÐ¿¡ ´õ¹Ì¸¦ Ãß°¡Çؼ¶óµµ 4ÀÇ ¹è¼ö·Î ¸ÂÃß´Â °ÍÀÌ À¯¸®ÇÏ´Ù. ±×·¯³ª À§ À̹ÌÁö´Â ÇÑ ÇàÀÌ 2¹ÙÀÌÆ® ¹Û¿¡ ¾ÈµÇ¾î ´õ¹Ì¸¦ ³ÖÀ¸¸é ¹«·Á 2¹è³ª Ä¿Áø´Ù. Á¤·Ä ´ÜÀ§¸¦ ¹Ù²Ù°í ½Í´Ù¸é ´ÙÀ½ ÇÔ¼ö·Î ºñÆ®¸ÊÀÇ ÀúÀå ¹æ½ÄÀ» º¯°æÇØ¾ß ÇÑ´Ù.
void glPixelStore[f, i](GLenum pname, GLfloat param);
ÀÌ ÇÔ¼ö·Î ¹ÙÀÌÆ® ¼ø¼(GL_PACK_SWAP_BYTES)³ª ¹ÙÀÌÆ® Á¤·Ä(GL_PACK_ALIGNMENT) µîÀÇ ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù. ¸Þ¸ð¸®¿¡¼ ºñÆ®¸ÊÀ» ÀÐÀ» ¶§ÀÇ Á¤·ÄÀº GL_UNPACK_ALIGNMENT ¿É¼ÇÀ¸·Î ÁöÁ¤Çϸç ÀÌ °ªÀÇ µðÆúÆ®°¡ 4À̹ǷΠ4¹ÙÀÌÆ® Á¤·ÄµÈ´Ù. 2³ª 1·Î ¹Ù²Ù¸é ´õ ÀÛÀº ´ÜÀ§·Î Á¤·ÄÇÒ ¼ö ÀÖµÇ ´Ü, °ªÀ» ÀÏÀÏÀÌ À߶ó¼ Àоî¾ß ÇϹǷΠ¼Óµµ¿¡´Â ºÒ¸®ÇÏ´Ù. ºñÆ®¸ÊÀÇ Ãâ·Â À§Ä¡´Â ´ÙÀ½ ÇÔ¼ö·Î ÁöÁ¤ÇÑ´Ù.
void glRasterPos[2,3,4][s,i,f,d][v](x, y,z,w);
ÁÂÇ¥¸¦ ÁöÁ¤ÇÏ´Â ÇÔ¼öÀ̹ǷΠglVertex ÇÔ¼ö¿Í Çü½ÄÀÌ °ÅÀÇ µ¿ÀÏÇÏ´Ù. ÀÌ ÇÔ¼ö°¡ ÁöÁ¤ÇÑ ÁÂÇ¥°¡ ÇöÀç À§Ä¡°¡ µÇ¸ç ÀÌ À§Ä¡¿¡¼ºÎÅÍ ºñÆ®¸ÊÀÌ Ãâ·ÂµÇ°í ºñÆ®¸Ê Ãâ·Â ÈÄ ÇöÀç À§Ä¡´Â ÀÚµ¿À¸·Î ´ÙÀ½ À§Ä¡·Î °»½ÅµÈ´Ù. ¸¶Ä¡ ÅؽºÆ® ¸ðµå¿¡¼ ´ÙÀ½ ¹®ÀÚ°¡ Ãâ·ÂµÉ À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â Ä¿¼ÀÇ °³³ä°ú À¯»çÇÏ´Ù.
ÀÌ ÇÔ¼ö°¡ ÁöÁ¤ÇÑ ÁÂÇ¥´Â º¯È¯ÀÇ ¿µÇâÀ» ¹Þ´Â´Ù. ¸¸¾à º¯È¯¿¡ »ó°ü¾øÀÌ À©µµ¿ìÀÇ Æ¯Á¤ ÁÂÇ¥¿¡ Ãâ·ÂÇÏ·Á¸é glWindowPos ÇÔ¼ö¸¦ ´ë½Å »ç¿ëÇÑ´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö´Â OpenGL 1.4 ÀÌÈĺÎÅ͸¸ Áö¿øµÇ¹Ç·Î À©µµ¿ìÁîÀÇ ±âº» ±¸Çö¿¡¼´Â ´çÀå »ç¿ëÇÒ ¼ö ¾ø´Ù. ºñÆ®¸ÊÀ» Ãâ·ÂÇÒ ¶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap);
Á¦ÀÏ ¸¶Áö¸· ÀμöÀÎ bitmapÀÌ ºñÆ®¸ÊÀÇ ¸ð¾çÀ» Á¤ÀÇÇÏ´Â ·¡½ºÅÍ µ¥ÀÌÅÍ ¹è¿ÀÌ´Ù. width, height´Â ºñÆ®¸ÊÀÇ Æø°ú ³ôÀ̸¦ Çȼ¿ ´ÜÀ§·Î ¾Ë·Á Áִµ¥ ÀÏÂ÷¿ø ¹è¿ÀÇ ·¡½ºÅ͸¸À¸·Î´Â ºñÆ®¸ÊÀÇ ¸ð¾çÀ» ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ Å©±â Á¤º¸¸¦ º°µµ·Î Á¦°øÇØ¾ß ÇÑ´Ù. À§ ºñÆ®¸ÊÀº 16 * 16 Å©±âÀ̹ǷΠÆø°ú ³ôÀÌ°¡ ¸ðµÎ 16ÀÌ´Ù.
xorig, yorig Àμö´Â ºñÆ®¸ÊÀÇ ¾î´À ºÎºÐÀÌ ÇöÀç À§Ä¡¿¡ Ãâ·ÂµÉ °ÍÀÎÁö ¿øÁ¡À» ÁöÁ¤ÇÑ´Ù. º¸ÅëÀº ÁÂÇÏ´ÜÀÎ (0,0)À» ÁöÁ¤ÇÏ¿© ºñÆ®¸ÊÀÇ ¾Æ·¡ÂÊÀÌ ÇöÀç À§Ä¡¿¡ Ãâ·ÂµÇÁö¸¸ ¸ð¾çÀÌ Æ¯ÀÌÇÑ ºñÆ®¸ÊÀº ¿øÁ¡À» º¯°æÇÒ ¼öµµ ÀÖ´Ù. xmove, ymove´Â ºñÆ®¸ÊÀ» ±×¸° ÈÄ¿¡ À̵¿ÇÒ ¾çÀ» °Å¸®¸¦ ÁöÁ¤ÇÑ´Ù. ¸¶Ä¡ ¹®ÀÚ¸¦ Ãâ·ÂÇÑ ÈÄ Ä¿¼¸¦ ¿Å±âµíÀÌ ÇöÀç À§Ä¡¸¦ Àû´ç·® ¶ç¿î´Ù.
ºñÆ®¸ÊÀº ´Ü µÎ °¡Áö »öÀ¸·Î¸¸ ±¸¼ºµÈ ±×¸²ÀÌÁö¸¸ ±×·¸´Ù°í Çؼ ²À Èæ¹éÀ¸·Î¸¸ Ãâ·ÂÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. glColor ÇÔ¼ö·Î »ö»óÀ» ÁöÁ¤ÇÏ¸é ºñÆ®¸ÊÀÇ 1¿¡ ´ëÀÀµÇ´Â ºÎºÐ¿¡ ÀÌ »ö»óÀÌ Ãâ·ÂµÈ´Ù. ±×·¡¼ ´Ü»ö ºñÆ®¸ÊÀÌÁö¸¸ ³ë¶õ»öÀ̳ª »¡°£»öÀ¸·Îµµ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾Õ¿¡¼ µðÀÚÀÎÇÑ 16 * 16 Å©±âÀÇ ºñÆ®¸ÊÀ» Ãâ·ÂÇÑ´Ù.
Bitmap |
void DoDisplay()
{
static GLubyte bitmap[] = {
0x07, 0xe0, 0x18, 0x18, 0x20, 0x04, 0x43, 0xc2,
0x44, 0x22, 0x88, 0x11, 0x81, 0x81, 0x81, 0x81,
0x80, 0x01, 0x80, 0x01, 0x92, 0x49, 0x4c, 0x32,
0x40, 0x02, 0x20, 0x04, 0x18, 0x18, 0x07, 0xe0,
};
glClear(GL_COLOR_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glColor3f(1,1,0);
glRasterPos2f(0.5,0.5);
glBitmap(16,16,0,0,20,0,bitmap);
glBitmap(16,16,0,0,20,0,bitmap);
glBitmap(16,16,0,10,20,0,bitmap);
glFlush();
}
bitmap ¹è¿¿¡ ·¡½ºÅÍ µ¥ÀÌÅ͸¦ 16Áø¼ö·Î ÀúÀåÇß´Ù. 2¹ÙÀÌÆ® Á¤·Ä·Î ÁöÁ¤ÇßÀ¸¹Ç·Î º°µµÀÇ ´õ¹Ì µ¥ÀÌÅ͸¦ »ðÀÔÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç ¾Æ·¡ÇàºÎÅÍ ¼ø¼´ë·Î Á× ³ª¿ÇÏ¸é µÈ´Ù. ¸¸¾à 4¹ÙÀÌÆ® Á¤·ÄÀ̶ó¸é ÇÑ Çà´ç ÃÖ¼Ò 4¹ÙÀÌÆ®¸¦ ½á¾ß ÇϹǷΠµÎ ¹ÙÀÌÆ®¸¶´Ù 0x00, 0x00À» »ðÀÔÇØ¾ß ÇÑ´Ù.
»ö»óÀº ³ë¶õ»öÀ¸·Î ÁöÁ¤Çß´Ù. ºñÆ®¸ÊÀÇ »ö»óÀº glBitmapÀ» È£ÃâÇÒ ¶§ Àû¿ëµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó glRasterPos¸¦ È£ÃâÇÒ ¶§ °áÁ¤µÇ¹Ç·Î glRasterPos ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ¸ÕÀú ÁöÁ¤ÇØ¾ß ÇÑ´Ù. µÎ ÇÔ¼öÀÇ ¼ø¼¸¦ ¹Ù²Ù¸é µðÆúÆ®ÀÎ Èò»öÀ¸·Î Ãâ·ÂµÈ´Ù. Ãâ·Â À§Ä¡´Â 0.5, 0.5·Î ÁöÁ¤ÇßÀ¸¹Ç·Î ¿À¸¥ÂÊ À§ Áß°£Âë¿¡¿¡¼ºÎÅÍ ºñÆ®¸ÊÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù.
¼¼ °³ÀÇ ºñÆ®¸ÊÀ» Ãâ·ÂÇØ º¸¾Ò´Ù. xmove¸¦ ¸ðµÎ 20À¸·Î ÁöÁ¤ÇßÀ¸¹Ç·Î ºñÆ®¸Ê Çϳª¸¦ Ãâ·ÂÇÑ ÈÄ ¿À¸¥ÂÊÀ¸·Î 20Çȼ¿¸¸Å À̵¿ÇÑ´Ù. ºñÆ®¸Ê ÆøÀÎ 16º¸´Ù 4¸¸Å ´õ ÁÖ¾î ¾à°£¾¿ ¿©¹éÀ» ¶ç¿ü´Ù. ¸¸¾à ymove¸¦ 20À¸·Î ÁöÁ¤ÇÏ¸é ºñÆ®¸ÊÀº ¼¼·Î·Î ¿¬À̾î Ãâ·ÂµÉ °ÍÀÌ´Ù. xmove, ymove´Â ºñÆ®¸ÊÀ» ¿¬¼Ó Ãâ·ÂÇÒ ¶§ ¹æÇâ°ú °Å¸®¸¦ ÁöÁ¤ÇÏ´Â ÀμöÀÌ´Ù.
¾ÕÂÊ µÎ ºñÆ®¸ÊÀº ¿øÁ¡À» (0,0)À¸·Î ÁöÁ¤ÇÏ¿© ºñÆ®¸ÊÀÇ ÁÂÇÏ´ÜÀÌ ÇöÀç À§Ä¡¿¡ ´ëÀÀµÈ´Ù. ¼¼¹ø° ºñÆ®¸ÊÀº y ¿øÁ¡À» 10À¸·Î ÁÖ¾î ºñÆ®¸ÊÀÇ À§ÂÊ 10Çȼ¿ ÁöÁ¡ÀÌ ÇöÀç À§Ä¡¿¡ Ãâ·ÂµÇ¸ç ±×·¡¼ ºñÆ®¸ÊÀÌ Á¶±Ý ¾Æ·¡ÂÊÀ¸·Î ³»·Á°£´Ù. ¿øÁ¡À» Á¶Á¤ÇÏ´Â ±â´ÉÀº ÆùƮó·³ º£À̽º°¡ °¢°¢ ´Ù¸¥ À̹ÌÁö¸¦ Ãâ·ÂÇÒ ¶§ ±âÁؼ±¿¡ ¸ÂÃß¾î ³ª¶õÈ÷ Ãâ·ÂÇϱâ À§ÇؼÀÌ´Ù.
3Â÷¿ø ±×·¡ÇÈ¿¡¼´Â ±Û²Ãµµ ºñÆ®¸ÊÀ¸·Î Á¦ÀÛÇÏ¿© Á÷Á¢ Ãâ·ÂÇÏ´Â °æ¿ì°¡ ¸¹Àºµ¥ ¿µ¹®ÀÚÀÇ °æ¿ì ¾ËÆĺª¸¶´Ù º£À̽º°¡ Á¦°¢°¢ÀÌ´Ù. ÀÌ·± ±Û²Ã ºñÆ®¸ÊÀº ¸ð¾ç¿¡ µû¶ó ¿øÁ¡À» ´Þ¸®ÇØ¾ß ÇÑ´Ù. ÇѱÛÀº Á¤»ç°¢Çü ¹®ÀÚÀ̹ǷΠ¿øÁ¡ Á¶Á¤À» µû·Î ÇÒ ÇÊ¿ä°¡ ¾ø°í ±ÛÀÚÀÇ Æøµµ ´ëºÎºÐ ±ÕÀÏÇϹǷΠ¶ç¾î¾²´Â °£°Ýµµ ÀÏÁ¤ÇÏ´Ù. ¼¼Á¾´ë¿Õ ¸¸¼¼.
Ä÷¯¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Â Çȼ¿¸ÊÀº ºñÆ®¸Ê¿¡ ºñÇؼ´Â À̹ÌÁö¸¦ ¸¸µé°Å³ª Ãâ·ÂÇϱâ ÈξÀ ´õ º¹ÀâÇÏ´Ù. Ãâ·Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.
void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * data);
width, height´Â À̹ÌÁöÀÇ Æø°ú ³ôÀÌÀÌ´Ù. formatÀº Çȼ¿ÀÇ »ö»ó ±¸¼ºÀ̸ç GL_RGB, GL_BGA µîÀ» ÁöÁ¤ÇÑ´Ù. À̹ÌÁö ÆÄÀÏ¿¡ µû¶ó »ö»ó Á¤º¸°¡ RGB ¼øÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀÌ ÀÖ°í BGA ¼øÀ¸·Î µÇ¾î ÀÖ´Â °ÍÀÌ ÀÖ´Ù. Æ÷¸ËÀÇ Á¾·ù´Â ·¹ÆÛ·±½º¸¦ Âü°íÇϱ⠹ٶõ´Ù. typeÀº data ¹è¿ÀÇ ¿ä¼Ò ŸÀÔÀ» ÁöÁ¤Çϸç data°¡ ½ÇÁ¦ À̹ÌÁö Á¤º¸ÀÎ ·¡½ºÅÍ µ¥ÀÌÅÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â °£´ÜÇÑ Çȼ¿¸ÊÀ» ¹è¿·Î Á¤ÀÇÇÏ°í Ãâ·ÂÇÑ´Ù.
void DoDisplay()
{
GLubyte data[32*32*3];
for (int y=0;y<32;y++) {
for (int x=0;x<32;x++) {
data[y*32*3+x*3+0] = 0xff;
data[y*32*3+x*3+1] = 0xff;
data[y*32*3+x*3+2] = 0x00;
}
}
glClear(GL_COLOR_BUFFER_BIT);
glRasterPos2f(0.0,0.0);
glDrawPixels(32, 32, GL_RGB, GL_UNSIGNED_BYTE, data);
glFlush();
}
32*32Å©±âÀÇ Çȼ¿¸ÊÀ» Á¤ÀÇÇ쵂 °¢ Çȼ¿´ç »ö»ó Á¤º¸ 3°³¾¿ÀÌ ÇÊ¿äÇϹǷΠÃÑ ÇÊ¿äÇÑ ¹ÙÀÌÆ®¼ö´Â 32*32*3ÀÌ´Ù. ÀÌ·¸°Ô ÁغñµÈ ¹öÆ۾ȿ¡ °¢ Á¡¿¡ ´ëÇØ RGB ¿ä¼Ò¸¦ ÀÏÀÏÀÌ Á¤ÀÇÇϸé ÀÛÀ¸³ª¸¶ ¾ÆÀÌÄÜ Å©±â Á¤µµÀÇ À̹ÌÁö¸¦ ¸¸µé ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ ÀÛ¾÷Àº 16Áø¼ö 3072°³¸¦ ÀÏÀÏÀÌ ÃÄ ³Ö¾î¾ß ÇϹǷΠÁ¦Á¤½ÅÀ» °¡Áø »ç¶÷ÀÌ ¼ÕÀ¸·Î ÇÒ¸¸ÇÑ ÀÛ¾÷ÀÌ ¸øµÈ´Ù. À̹ÌÁö·ÎºÎÅÍ »ö»ó Á¤º¸¸¦ 16Áø¼ö·Î ÃßÃâÇØ ³»´Â °Í¸¸ Çصµ º¸Åë ÀÏÀÌ ¾Æ´Ï´Ù.
±×·¡¼ ¾î¿ ¼ö ¾øÀÌ ·çÇÁ¸¦ µ¹¸ç ¸ðµç Çȼ¿¿¡ ´ëÇØ R, G ¿ä¼Ò´Â 255·Î ´ëÀÔÇÏ°í B ¿ä¼Ò´Â 0À¸·Î ´ëÀÔÇÏ¿© ³ë¶õ»öÀ¸·Î ä¿ö ³Ö¾ú´Ù. Á» ºñ°ÌÇÏÁö¸¸ ±ÍÂ÷´ÏÁòÀ¸·Î ÀÎÇØ ¸ðµç Çȼ¿ÀÌ ³ë¶õ»öÀÎ ÀÛÀº »ç°¢Çü À̹ÌÁö¸¦ Çϳª ¸¸µç °ÍÀÌ´Ù. ÀÌ·¸°Ô ¸¸µç À̹ÌÁö¸¦ ȸé Áß¾Ó¿¡ Ãâ·ÂÇß´Ù. Çȼ¿¸ÊÀº ºñÆ®¸Ê°ú´Â ´Þ¸® ¿øÁ¡À» ÁöÁ¤ÇÏ´Â ±â´ÉÀÌ ¾øÀ¸¹Ç·Î ¹«Á¶°Ç À̹ÌÁöÀÇ ÁÂÇÏ´ÜÀÌ ÇöÀç À§Ä¡¿¡ Ãâ·ÂµÈ´Ù. ±×·¡¼ Áß¾Ó¿¡¼ ¾à°£ ¿À¸¥ÂÊ À§¿¡ À̹ÌÁö°¡ Ãâ·ÂµÇ¾ú´Ù.
ÀÌ ¿¹Á¦´Â Çȼ¿¸ÊÀ» Ãâ·ÂÇÏ´Â °¡Àå ¿ø·ÐÀûÀÎ ¹æ¹ýÀ» º¸À̱â À§ÇØ ÀÛ¼ºÇÑ °Í »ÓÀÌ´Ù. Á¦´ë·Î ¸ð¾çÀ» °®Ãá À̹ÌÁö¸¦ »ç¿ëÇÏ·Á¸é ÆÄÀÏ¿¡¼ Àоî¿À´Â °ÍÀÌ ¿øÄ¢ÀûÀÌ´Ù. OpenGLÀº À̹ÌÁö ÆÄÀÏÀ» Àд ±â´ÉÀ» Á¦°øÇÏÁö ¾ÊÀ¸¹Ç·Î ¿î¿µÃ¼Á¦º°·Î Àû´çÇÑ À̹ÌÁö Àбâ ÇÔ¼ö¸¦ ¸¸µé¾î »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ °Á´ À©µµ¿ìÁî ȯ°æ¿¡¼ ½Ç½ÀÀ» ÁøÇàÇÏ°í ÀÖÀ¸¹Ç·Î À©µµ¿ìÁî API·Î Àб⠿ëÀÌÇÑ BMP ÆÄÀÏÀ» Ãâ·ÂÇß´Ù.
GLubyte *LoadBmp(const char *Path, int *Width, int *Height)
{
HANDLE hFile;
DWORD FileSize, dwRead;
BITMAPFILEHEADER *fh=NULL;
BITMAPINFOHEADER *ih;
BYTE *pRaster;
hFile=CreateFileA(Path,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return NULL;
}
FileSize=GetFileSize(hFile,NULL);
fh=(BITMAPFILEHEADER *)malloc(FileSize);
ReadFile(hFile,fh,FileSize,&dwRead,NULL);
CloseHandle(hFile);
int len = FileSize - fh->bfOffBits;
pRaster=(GLubyte *)malloc(len);
memcpy(pRaster, (BYTE *)fh+fh->bfOffBits, len);
// RGB·Î ¼ø¼¸¦ ¹Ù²Û´Ù.
for (BYTE *p=pRaster;p < pRaster + len - 3;p+=3) {
BYTE b = *p;
*p = *(p+2);
*(p+2) = b;
}
ih=(BITMAPINFOHEADER *)((PBYTE)fh+sizeof(BITMAPFILEHEADER));
*Width=ih->biWidth;
*Height=ih->biHeight;
free(fh);
return pRaster;
}
void DoDisplay()
{
GLubyte *data;
int Width, Height;
glClear(GL_COLOR_BUFFER_BIT);
data = LoadBmp("chestnut.bmp", &Width, &Height);
if (data != NULL) {
glRasterPos2f(-0.5,-0.5);
glDrawPixels(Width, Height, GL_RGB, GL_UNSIGNED_BYTE, data);
free(data);
}
glFlush();
}
ÀÌ ¿¹Á¦ÀÇ LoadBmp ÇÔ¼ö´Â Àμö·Î Àü´Þ¹ÞÀº À̹ÌÁö ÆÄÀϷκÎÅÍ ·¡½ºÅÍ µ¥ÀÌÅ͸¦ ¹è¿·Î ÀоîµéÀδÙ. BMP ÆÄÀÏÀÇ ±¸Á¶¿Í ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö Á¤µµ¸¸ ¾µ ¼ö ÀÖÀ¸¸é ÀÌ Á¤µµ ÇÔ¼ö´Â ¾î·ÆÁö ¾Ê°Ô ¸¸µé ¼ö ÀÖ´Ù. ÆÄÀÏ¿¡¼ ·¡½ºÅÍ µ¥ÀÌÅÍ¿¡ ÇØ´çÇÏ´Â ºÎºÐÀ» ÃßÃâÇÏ¿© ¹öÆÛ¿¡ º¹»çÇÏ¸é µÈ´Ù. ´Ü, BMP´Â »ö»ó Á¤º¸°¡ BGR ¼øÀ¸·Î ÀúÀåµÇ¾î ÀÖÀ¸¹Ç·Î RGB ¼ø¼·Î ¹Ù²Ù¾î »ç¿ëÇß´Ù. OpenGL µµ BGR ¼øÀÇ À̹ÌÁö Æ÷¸ËÀÎ GL_BGRÀ» Áö¿øÇÏÁö¸¸ ¾ÈŸ±õ°Ôµµ À©µµ¿ìÁîÀÇ OpenGLÀº ¹öÀüÀÌ ³·Àº °ü°è·Î GL_BGRÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
LoadBmp ÇÔ¼ö¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ºÐ¼®À̳ª ¼³¸íÀº »ý·«ÇÑ´Ù. °ü½ÉÀÖ´Â »ç¶÷Àº Win32 °ü·Ã ¼ÀûÀ» Âü°íÇϱ⠹ٶõ´Ù. ¾î¶² Ã¥À̶ó°í ±»ÀÌ ²À Áý¾î¼ ¼Ò°³ÇÏÁö´Â ¾Ê°ÚÁö¸¸ ½ÃÁß¿¡ ÁÁÀº Win32 ¼ÀûµéÀÌ Âü ¸¹ÀÌ ÀÖ´Ù. À̹ÌÁö¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ±â´ÉÀÌ ÇÊ¿äÇÏ´Ù¸é SaveBmp ÇÔ¼ö¸¦ ¸¸µé¾î »ç¿ëÇÏ¸é µÈ´Ù. ¸¸¾à À©µµ¿ìÁî°¡ ¾Æ´Ñ ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼ ½Ç½ÀÀ» ÁøÇàÇϰųª ÇÁ·ÎÁ§Æ®¸¦ ÇØ¾ß ÇÑ´Ù¸é ÇØ´ç ¿î¿µÃ¼Á¦ÀÇ À̹ÌÁö Á¶ÀÛ ¹æ¹ýÀ» Âü°íÇϰųª ¾Æ´Ï¸é ³²ÀÌ ¸¸µé¾î ³õÀº À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ ±¸ÇØ º¸µµ·Ï ÇÏÀÚ. ½ÇÇàÇϸé Ä÷¯ À̹ÌÁö°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
ÀÌ ¿¹Á¦¿¡¼ »ç¿ëÇÑ chestnut.bmp ÆÄÀÏÀº Àß ÀÍÀº ¹ã À̹ÌÁöÀÌ¸ç ±Û¾´ÀÌ°¡ ¼Õ¼ö ÂïÀº »çÁøÀÌ´Ù. ¾î¶² À̹ÌÁöµçÁö BMP·Î º¯È¯Çؼ »ç¿ëÇϸé À§ ÇÔ¼ö¸¦ È°¿ëÇÒ ¼ö ÀÖ´Ù. ¾ÈŸ±õ°Ôµµ BMP´Â À©µµ¿ìÁî Àü¿ë Æ÷¸ËÀ̶ó ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëÇϱâ´Â ¾î·Æ´Ù. Á» ´õ ¹ü¿ëÀûÀÎ Æ÷¸ËÀ» »ç¿ëÇ쵂 ¾ÐÃà Æ÷¸Ëº¸´Ù´Â TGA°°Àº ºñ¾ÐÃà Æ÷¸ËÀÌ À¯¸®ÇÏ´Ù. JPG³ª PNG °°Àº ¾ÐÃà Æ÷¸Ëµµ º°µµÀÇ ±×·¡ÇÈ ¶óÀ̺귯¸®¸¦ È°¿ëÇÏ¸é ¹°·Ð »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÆÄÀϷκÎÅÍ À̹ÌÁö¸¦ ±¸ÇÏ´Â ¹æ¹ý ¿Ü¿¡ ÀÌ¹Ì Ãâ·ÂµÈ ȸéÀÇ À̹ÌÁö¸¦ Àç»ç¿ëÇÒ ¼öµµ ÀÖ´Ù. »ö»ó ¹öÆÛÀÇ Çȼ¿°ªÀ» ¹öÆÛ·Î ÀоîµéÀ̰ųª »ö»ó ¹öÆÛÀÇ ÀÏÁ¤ ¿µ¿ªÀ» ´Ù¸¥ °÷À¸·Î º¹»çÇÏ¸é µÈ´Ù. ´ÙÀ½ ÇÔ¼öµéÀº ȸéÀÇ ÀϺθ¦ ¹öÆÛ·Î ÀÐ¾î µéÀÌ°í ȸ鳢¸® º¹»çÇÑ´Ù. glRasterPos·Î º¹»çÇÒ À§Ä¡¸¦ ÁöÁ¤ÇÑ ÈÄ ÀÌ ÇÔ¼ö·Î º¹»çÇÑ´Ù.
void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data);
void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
º¹»çÇÒ ¿µ¿ª°ú º¹»çÇÒ Á¤º¸ÀÇ Á¾·ù¸¦ ¹àÈù´Ù. type¿¡ GL_COLOR¸¦ ÁöÁ¤ÇÏ¸é »ö»ó µ¥ÀÌÅ͸¦ º¹»çÇÏ´Â °ÍÀÌ°í GL_DEPTH³ª GL_STENCILÀ» ÁöÁ¤ÇÏ¸é ±íÀÌ Á¤º¸¿Í ½ºÅÙ½Ç Á¤º¸±îÁö º¹»çÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹ã À̹ÌÁöÀÇ ÀϺθ¦ ¿ÞÂÊ ¾Æ·¡·Î º¹»çÇÑ´Ù.
void DoDisplay()
{
GLubyte *data;
int Width, Height;
glClear(GL_COLOR_BUFFER_BIT);
data = LoadBmp("chestnut.bmp", &Width, &Height);
if (data != NULL) {
glRasterPos2f(-0.5,-0.5);
glDrawPixels(Width, Height, GL_RGB, GL_UNSIGNED_BYTE, data);
free(data);
}
glRasterPos2f(-1.0,-1.0);
glCopyPixels(100,100,80,50,GL_COLOR);
glFlush();
}
½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
À̹ÌÁö³¢¸® º¹»çÇؼ º° ½Ç¿ë¼ºÀÌ ¾ø¾î º¸ÀÌÁö¸¸ 3Â÷¿ø ±×·¡ÇÈÀ¸·Î ±×¸° À̹ÌÁöÀÇ ÀϺθ¦ À߶ó ÅؽºÃ³·Î »ç¿ëÇÒ ¶§´Â ÀÌ·± ±â¹ýÀÌ Æí¸®ÇÏ´Ù. ȸ鿡 ±×·ÁÁø ·¡½ºÅÍ µ¥ÀÌÅ͸¦ È°¿ëÇÏ´Â °ÍÀ̹ǷΠ´ë¿ë·®ÀÇ ¹è¿À» ¼±¾ðÇÒ ÇÊ¿äµµ ¾ø°í ÆÄÀÏ ÀÔÃâ·ÂÀ» ÇÒ ÇÊ¿äµµ ¾ø´Ù.
ºñÆ®¸Ê ÀÛ¾÷Àº ½Ì±Û ¹öÆÛ È¯°æÀÏ ¶§´Â ÇÁ·ÐÆ® ¹öÆÛ¸¦ ´ë»óÀ¸·Î ÇÏÁö¸¸ ´õºí ¹öÆÛ¸µ ȯ°æ¿¡¼´Â ¹é ¹öÆÛ¸¦ ´ë»óÀ¸·Î ¼öÇàµÈ´Ù. ´ë»ó ¹öÆÛ¸¦ °Á¦·Î ¹Ù²Ù°í ½Í´Ù¸é ´ÙÀ½ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
void glDrawBuffer(GLenum mode);
void glReadBuffer(GLenum mode);
¹é ¹öÆÛ¿¡ ±×·Á ³õ°í ½º¿ÒÇÏ¸é ±ô¹Ú°Å¸²ÀÌ Á¦°ÅµÈ´Ù.
Æú¸®°ï ½ºÆ¼ÇøµÀº ´Ù°¢ÇüÀÇ ³»ºÎ¸¦ ä¿ì´Â ¾ÆÁÖ °£´ÜÇÑ ¹æ¹ýÀÌ´Ù. 32*32 Å©±âÀÇ Èæ¹é ºñÆ®¸ÊÀ» Á¤ÀÇÇÏ°í ´ÙÀ½ µÎ ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù.
glEnable(GL_POLYGON_STIPPLE);
void glPolygonStipple(const GLubyte * pattern);
patternÀº 32 * 32ÀÇ ºñÆ®¸Ê ÆÐÅÏÀ̹ǷΠÃÑ 128 ¹ÙÀÌÆ®·Î ±¸¼ºµÈ ¹è¿À̾î¾ß ÇÑ´Ù. ºñÆ®¸ÊÀ» ¸¸µå´Â °ÍÀÌ ±ÍÂú¾Æ¼ ±×·¸Áö »ç¿ëÇÏ´Â ¹æ¹ýÀº ¾ÆÁÖ ¿ø·ÐÀûÀÌ´Ù.
PolygonStipple |
void DoDisplay()
{
static GLubyte bitmap[] = {
0x07, 0xe0, 0x18, 0x18, 0x20, 0x04, 0x43, 0xc2,
0x44, 0x22, 0x88, 0x11, 0x81, 0x81, 0x81, 0x81,
0x80, 0x01, 0x80, 0x01, 0x92, 0x49, 0x4c, 0x32,
0x40, 0x02, 0x20, 0x04, 0x18, 0x18, 0x07, 0xe0,
0x07, 0xe0, 0x18, 0x18, 0x20, 0x04, 0x43, 0xc2,
0x44, 0x22, 0x88, 0x11, 0x81, 0x81, 0x81, 0x81,
0x80, 0x01, 0x80, 0x01, 0x92, 0x49, 0x4c, 0x32,
0x40, 0x02, 0x20, 0x04, 0x18, 0x18, 0x07, 0xe0,
0x07, 0xe0, 0x18, 0x18, 0x20, 0x04, 0x43, 0xc2,
0x44, 0x22, 0x88, 0x11, 0x81, 0x81, 0x81, 0x81,
0x80, 0x01, 0x80, 0x01, 0x92, 0x49, 0x4c, 0x32,
0x40, 0x02, 0x20, 0x04, 0x18, 0x18, 0x07, 0xe0,
0x07, 0xe0, 0x18, 0x18, 0x20, 0x04, 0x43, 0xc2,
0x44, 0x22, 0x88, 0x11, 0x81, 0x81, 0x81, 0x81,
0x80, 0x01, 0x80, 0x01, 0x92, 0x49, 0x4c, 0x32,
0x40, 0x02, 0x20, 0x04, 0x18, 0x18, 0x07, 0xe0,
};
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(bitmap);
glBegin(GL_TRIANGLES);
glVertex2f(0.0, 0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
32*32 Á¤µµÀÇ Èæ¹é ºñÆ®¸ÊÀÌ¸é ±Ý¹æ ¸¸µé ¼ö ÀÖÁö¸¸ ½Ã°£¿¡ ¦i±â´Ù º¸´Ï ¾Õ¿¡¼ ¸¸µé¾ú´ø ÀÛÀº ºñÆ®¸ÊÀ» ±×³É 4¹ø ¹Ýº¹Çß´Ù. Â÷ÈÄ ½Ã°£ÀÌ Çã¶ôµÇ¸é ¿¹»ÚÀåÇÑ À̹ÌÁö¸¦ µðÀÚÀÎÇØ º¸±â·Î ÇÑ´Ù. ¾î·µç µ¥ÀÌÅÍÀÇ °³¼ö´Â ä¿ö ³Ö¾úÀ¸¹Ç·Î Ãâ·ÂÀº µÇÁö¸¸ Çà ¿ÀÇÁ¼ÂÀÌ ¸ÂÁö ¾Ê¾Æ ±«»ó ¸ÁÄ¢ÇÑ ¹«´Ì°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù.
½ºÆ¼ÇøµÀº ·¡½ºÅÍ µ¥ÀÌÅ͸¸À¸·Î µµÇüÀÇ ³»ºÎ¸¦ ä¿ï ¼ö ÀÖ´Ù´Â ¸é¿¡¼ ¾ÆÁÖ °£ÆíÇÑ ¹æ¹ýÀ̱â´Ù. ±×·¯³ª °£ÆíÇѸ¸Å Á¦¾àÀÌ ¸¹¾Æ ½Ç¿ë¼ºÀº ¶³¾îÁø´Ù. ºñÆ®¸ÊÀº ¹«Á¶°Ç 32 * 32 Å©±â¿©¾ß ÇÏ¸ç ±×³ª¸¶µµ ´Ü»ö ¹«´Ì¸¸ °¡´ÉÇؼ Ç¥Çö·ÂÀÇ Á¦¾àÀÌ ½ÉÇÏ´Ù. °Ô´Ù°¡ ȸÀüÀ̳ª È®´ë, Ãà¼Òµµ Àû¿ëµÇÁö ¾Ê¾Æ Çö½ÇÀûÀ¸·Î °ÅÀÇ ¾µ ¸ð°¡ ¾ø´Ù. µµÇüÀÇ ³»ºÎ¸¦ ¿øÇÏ´Â ¹«´Ì·Î ä¿ì´Â Á¤¼®Àº ÅؽºÃ³ ¸ÊÇÎÀÌ´Ù.
ÅؽºÃ³ ¸ÊÇÎ(Texture Mapping)Àº 3Â÷¿ø ¹°Ã¼ÀÇ Ç¥¸é¿¡ À̹ÌÁö¸¦ ÀÔÈ÷´Â ±â¹ýÀÌ´Ù. 3Â÷¿ø Ç¥¸é¿¡ ¿ïÅüºÒÅüÇÑ ¸ð¾çÀ̳ª ³ª¹« ¹«´Ì µîÀ» ±×·Á ³ÖÀ¸·Á¸é Á¶¸íÀ̳ª ¹°Ã¼ÀÇ ÀçÁúÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ¸·Î´Â ÇÑ°è°¡ ¸¹´Ù. ´ë·®ÀÇ Á¤Á¡ÀÌ ÇÊ¿äÇÏ°í Á¤Á¡ÀÌ ¸¹¾ÆÁö¸é ¼Óµµµµ ´À·ÁÁø´Ù. ÅؽºÃ³ ¸ÊÇÎÀº ¹Ì¸® ¸¸µé¾îÁ® ÀÖ´Â À̹ÌÁö¸¦ ´Ù°¢ÇüÀÇ Ç¥¸é¿¡ ±×·Á ³ÖÀ½À¸·Î½á ÀÓÀÇÀÇ ¹«´Ì¸¦ ºü¸¥ ¼Óµµ·Î ±×·Á³»´Â ȹ±âÀûÀÎ ¹æ¹ýÀÌ´Ù.
ÅؽºÃ³ ¸ÊÇÎÀº À̹ÌÁö¸¦ Àоî¾ß ÇÏ°í °¢ ¸é¿¡ À̹ÌÁöÀÇ ¾îµðÂëÀÌ ´ëÀÀµÉ °ÍÀÎÁö¸¦ ÀÏÀÏÀÌ ÁöÁ¤ÇØ¾ß ÇϹǷΠ±¸Çö ´Ü°è´Â ´Ù¼Ò º¹ÀâÇÏ°í ¾î·Æ´Ù. À̹ÌÁöÀÇ µ¥ÀÌÅ;絵 ²Ï ¸¹Àº ÆíÀÌÁö¸¸ ´ÙÇàÈ÷ Çö´ëÀÇ ±×·¡ÇÈ Ä«µå´Â Çϵå¿þ¾î Â÷¿ø¿¡¼ ÅؽºÃ³¸¦ Áö¿øÇϹǷΠ¼Óµµ´Â ¸¸Á·ÇÒ¸¸Å ºü¸¥ ÆíÀÌ´Ù. ÅؽºÃ³ ¸ÊÇÎ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ¸ÕÀú ÇØ´ç ±â´ÉÀ» ÄÑ¾ß ÇÑ´Ù.
glEnable(GL_TEXTURE_2D);
ÁÖ·Î 2Â÷¿ø Æò¸é À̹ÌÁö·Î ÅؽºÃ³¸¦ ÀÔÈ÷Áö¸¸ 1Â÷¿øÀ̳ª 3Â÷¿øÀÇ À̹ÌÁö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. »ç¿ëÇÒ ÅؽºÃ³ÀÇ Â÷¿ø¿¡ µû¶ó °³º°ÀûÀ¸·Î È°¼ºÈ½ÃÄÑ¾ß Çϸç Çѹø¿¡ Çϳª¸¸ È°¼ºÈÇÒ ¼ö ÀÖ´Ù. Åë»óÀº 2Â÷¿ø ÅؽºÃ³¸¦ °¡Àå ¸¹ÀÌ »ç¿ëÇϸç ES ¹öÀüÀº 2Â÷¿ø¹Û¿¡ Áö¿øÇÏÁö ¾Ê´Â´Ù.
´ÙÀ½Àº ÅؽºÃ³·Î »ç¿ëÇÒ À̹ÌÁö¸¦ ¸Þ¸ð¸® ¹öÆÛ·Î ·ÎµåÇÑ´Ù. ¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î À̹ÌÁö¸¦ ÁغñÇÒ ¼ö ÀÖÁö¸¸ °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀº À̹ÌÁö ÆÄÀÏ¿¡¼ Àоî¿À´Â °ÍÀÌ´Ù. ¾Õ¿¡¼ ÁغñÇصРÇÔ¼ö·Î ·¡½ºÅÍ µ¥ÀÌÅ͸¦ ¹è¿¿¡ ÀÐ¾î ³õ´Â´Ù. À̹ÌÁö¸¦ ¹Ù·Î »ç¿ëÇÒ ¼ö´Â ¾øÀ¸¸ç ÅؽºÃ³ ¸ÊÇο¡ Àû´çÇÑ ÇüÅ·Π°¡°øÇØ¾ß Çϴµ¥ À̶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * data);
Àμö°¡ ±²ÀåÈ÷ ¸¹À» »Ó¸¸ ¾Æ´Ï¶ó °¢ ÀμöÀÇ Àǹ̵µ ¾î·Æ°í ¼±ÅÃÇÒ ¼ö ÀÖ´Â °ªÀÇ Á¾·ùµµ ¸¹´Ù. targetÀº À̹ÌÁö·ÎºÎÅÍ ¾î¶² ÅؽºÃ³¸¦ ¸¸µé °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. Æò¹üÇÑ ÅؽºÃ³¸¦ ¸¸µé ¼öµµ ÀÖ°í ÇÁ·Ï½Ã³ª Å¥ºê¸ÊÀ» ¸¸µé ¼öµµ ÀÖ´Ù. levelÀº ¹Ó¸ã ·¹º§ÀÌµÇ ¹Ó¸ÊÀ» »ç¿ëÇÏÁö ¾ÊÀ» ¶§´Â 0À¸·Î ÁöÁ¤ÇÑ´Ù.
³»ºÎ Æ÷¸ËÀº Åؼ¿ÀÇ Æ÷¸ËÀ» ÁöÁ¤Çϴµ¥ GL_RGB, GL_BGR µîµî ¿©·¯ °¡Áö Æ÷¸ËÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù. width, height´Â ÅؽºÃ³ÀÇ ³ôÀÌÀÌµÇ ¹Ýµå½Ã 2ÀÇ °Åµì½Â Å©±â¿©¾ß ÇÏ¸ç ¿©±â¿¡ °æ°è¼±ÀÇ µÎ²²¸¦ ´õÇØ¾ß ÇÑ´Ù. °æ°è¼±ÀÌ ¾øÀ» °æ¿ì 32, 64, 128, 256 Á¤µµÀÇ Å©±â¸é µÈ´Ù. border´Â °æ°è¼±ÀÇ µÎ²²¸¦ ÁöÁ¤Çϴµ¥ ¾øÀ¸¸é 0À» ÁØ´Ù. format, type, data´Â ·¡½ºÅÍ µ¥ÀÌÅÍÀÇ Æ÷¸Ë°ú Çȼ¿ÀÇ Å¸ÀÔ, ±×¸®°í ·¡½ºÅÍ µ¥ÀÌÅÍ ¹è¿ÀÌ´Ù.
ÅؽºÃ³¸¦ Àû¿ëÇϱâ Àü¿¡ ¸ÊÇο¡ °ü·ÃµÈ ¿©·¯ °¡Áö ¿É¼ÇµéÀ» º¯°æÇÒ ¼ö Àִµ¥ ´ëºÎºÐÀº µðÆúÆ®°¡ ¹«³ÇϹǷΠµðÆúÆ®¸¦ ÀÏ´Ü Àû¿ëÇÏ¸é µÈ´Ù. ÀÚ¼¼ÇÑ °ÍÀº ´ÙÀ½ Ç׿¡¼ µû·Î ¿¬±¸ÇØ º¸ÀÚ. ÅؽºÃ³°¡ ÁغñµÈ ´ÙÀ½Àº µµÇüÀÇ °¢ Á¤Á¡°ú ÅؽºÃ³ÀÇ ÁÂÇ¥¸¦ ´ëÀÀ½ÃŲ´Ù. µµÇüÀÇ ¾î´À ºÎºÐ¿¡ ÅؽºÃ³ÀÇ ¾îµðÂëÀ» Ãâ·ÂÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù.
ÅؽºÃ³ À̹ÌÁö´Â Å©±â°¡ Á¦°¢°¢Àε¥´Ù Å©±â¸¦ ¹Ù²Ù´Â °æ¿ìµµ Á¾Á¾ ÀÖÀ¸¹Ç·Î Çȼ¿ ´ÜÀ§·Î ÁÂÇ¥¸¦ ÁöÁ¤Çϸé ÀÏ°ü¼ºÀÌ ¾ø´Ù. ±×·¡¼ 0 ~ 1 »çÀÌÀÇ ½Ç¼ö ÁÂÇ¥·Î ºñÀ²À» ÁöÁ¤ÇÑ´Ù. Á¤Á¡ÀÇ ÁÂÇ¥ Ç¥Çö½Ã º¸Åë xyzw ¸íĪÀ» ÃàÀ¸·Î »ç¿ëÇÏÁö¸¸ Ãà ¸íĪÀÌ °°À¸¸é Çò°¥¸®¹Ç·Î ÅؽºÃ³´Â strq¶ó´Â ÁÂÇ¥Ãà ¸íĪÀ» ´ë½Å »ç¿ëÇÑ´Ù.
À̹ÌÁöÀÇ Å©±â¿¡ »ó°ü¾øÀÌ ÅؽºÃ³ÀÇ ÁÂÇÏ´ÜÀº (0,0)ÀÌ°í ¿ì»ó´ÜÀº (1,1)ÀÌ´Ù. Á¤Áß¾ÓÀº ¹°·Ð (0.5, 0.5)°¡ µÉ °ÍÀÌ´Ù. °¢ Á¤Á¡¿¡ ÅؽºÃ³ÀÇ ÁÂÇ¥¸¦ ÁöÁ¤ÇÒ ¶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
void glTexCoord[1,2,3,4][s,i,f,d][v](s, t, r, q);
Á¤Á¡¿¡ ÅؽºÃ³ ÁÂÇ¥¸¦ ´ëÀÀ½ÃÄÑ ³õÀ¸¸é OpenGLÀÌ Á¤Á¡ÀÇ À§Ä¡¿¡ ÅؽºÃ³ÀÇ ´ëÀÀµÇ´Â Çȼ¿À» Àоî Ãâ·ÂÇÒ °ÍÀÌ´Ù. Á¤Á¡µéÀÇ Áß°£¿¡´Â Á¤Á¡°ú ÅؽºÃ³ÀÇ °Å¸® ºñÀ²¿¡ ¸Â°Ô Àû´çÈ÷ ´Ã¸®°Å³ª ÁÙ¿©¼ Çȼ¿µéÀ» ´ëÀÀ½ÃÄÑ ´Ù°¢Çü Àüü¿¡ ÅؽºÃ³¸¦ ÀÔÈù´Ù. ÅؽºÃ³¿Í ´Ù°¢ÇüÀÇ Å©±â°¡ º¸Åë ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¹Ç·Î ½ºÆ®·¹ÄªÀº °ÅÀÇ Ç×»ó ¹ß»ýÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ÇǶó¹Ìµå¿¡ ´ë¸®¼® ¸ð¾çÀÇ ÅؽºÃ³¸¦ ÀÔÈù´Ù.
Mapping |
#include <windows.h>
#include <gl/glut.h>
#include <stdio.h>
void DoDisplay();
void DoKeyboard(unsigned char key, int x, int y);
void DoMenu(int value);
GLfloat xAngle, yAngle, zAngle;
GLint EnvMode = GL_REPLACE;
GLint TexFilter = GL_LINEAR;
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
glutCreateWindow("OpenGL");
glutDisplayFunc(DoDisplay);
glutKeyboardFunc(DoKeyboard);
glutCreateMenu(DoMenu);
glutAddMenuEntry("Replace",1);
glutAddMenuEntry("Modulate",2);
glutAddMenuEntry("Add",3);
glutAddMenuEntry("Nearest Filter",4);
glutAddMenuEntry("Linear Filter",5);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}
void DoKeyboard(unsigned char key, int x, int y)
{
switch(key) {
case 'a':yAngle += 2;break;
case 'd':yAngle -= 2;break;
case 'w':xAngle += 2;break;
case 's':xAngle -= 2;break;
case 'q':zAngle += 2;break;
case 'e':zAngle -= 2;break;
case 'z':xAngle = yAngle = zAngle = 0.0;break;
}
char info[128];
sprintf(info, "x=%.1f, y=%.1f, z=%.1f", xAngle, yAngle, zAngle);
glutSetWindowTitle(info);
glutPostRedisplay();
}
void DoMenu(int value)
{
switch(value) {
case 1:
EnvMode = GL_REPLACE;
break;
case 2:
EnvMode = GL_MODULATE;
break;
case 3:
EnvMode = GL_ADD;
break;
case 4:
TexFilter = GL_NEAREST;
break;
case 5:
TexFilter = GL_LINEAR;
break;
}
glutPostRedisplay();
}
GLubyte *LoadBmp(const char *Path, int *Width, int *Height)
{
HANDLE hFile;
DWORD FileSize, dwRead;
BITMAPFILEHEADER *fh=NULL;
BITMAPINFOHEADER *ih;
BYTE *pRaster;
hFile=CreateFileA(Path,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return NULL;
}
FileSize=GetFileSize(hFile,NULL);
fh=(BITMAPFILEHEADER *)malloc(FileSize);
ReadFile(hFile,fh,FileSize,&dwRead,NULL);
CloseHandle(hFile);
int len = FileSize - fh->bfOffBits;
pRaster=(GLubyte *)malloc(len);
memcpy(pRaster, (BYTE *)fh+fh->bfOffBits, len);
// RGB·Î ¼ø¼¸¦ ¹Ù²Û´Ù.
for (BYTE *p=pRaster;p < pRaster + len - 3;p+=3) {
BYTE b = *p;
*p = *(p+2);
*(p+2) = b;
}
ih=(BITMAPINFOHEADER *)((PBYTE)fh+sizeof(BITMAPFILEHEADER));
*Width=ih->biWidth;
*Height=ih->biHeight;
free(fh);
return pRaster;
}
void DoDisplay()
{
GLubyte *data;
int Width, Height;
// ÅؽºÃ³ À̹ÌÁö Áغñ
glEnable(GL_TEXTURE_2D);
data = LoadBmp("marble64.bmp", &Width, &Height);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height,
0, GL_RGB, GL_UNSIGNED_BYTE, data);
free(data);
// ÅؽºÃ³ ȯ°æ ¼³Á¤
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, EnvMode);
// ÅؽºÃ³ ÇÊÅÍ ¼³Á¤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, TexFilter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, TexFilter);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glPushMatrix();
glRotatef(xAngle, 1.0f, 0.0f, 0.0f);
glRotatef(yAngle, 0.0f, 1.0f, 0.0f);
glRotatef(zAngle, 0.0f, 0.0f, 1.0f);
// ¾Æ·§¸é Èò ¹Ù´Ú
glBegin(GL_QUADS);
glColor3f(1,1,1);
glTexCoord2f(0.0, 1.0);
glVertex2f(-0.5, 0.5);
glTexCoord2f(1.0, 1.0);
glVertex2f(0.5, 0.5);
glTexCoord2f(1.0, 0.0);
glVertex2f(0.5, -0.5);
glTexCoord2f(0.0, 0.0);
glVertex2f(-0.5, -0.5);
glEnd();
// À§ÂÊ »¡°£ º¯
glBegin(GL_TRIANGLE_FAN);
glColor3f(1,0,0);
glTexCoord2f(0.5, 0.5);
glVertex3f(0.0, 0.0, -0.8);
glTexCoord2f(1.0, 1.0);
glVertex2f(0.5, 0.5);
glTexCoord2f(0.0, 1.0);
glVertex2f(-0.5, 0.5);
// ¿ÞÂÊ ³ë¶õ º¯
glColor3f(1,1,0);
glTexCoord2f(0.0, 0.0);
glVertex2f(-0.5, -0.5);
// ¾Æ·¡ÂÊ ÃÊ·Ï º¯
glColor3f(0,1,0);
glTexCoord2f(1.0, 0.0);
glVertex2f(0.5, -0.5);
// ¿À¸¥ÂÊ ÆĶõ º¯
glColor3f(0,0,1);
glTexCoord2f(1.0, 1.0);
glVertex2f(0.5, 0.5);
glEnd();
glPopMatrix();
glFlush();
}
64 * 64 Å©±âÀÇ ´ë¸®¼® Ç¥¸é ¸ð¾ç À̹ÌÁö¸¦ marble64.bmp ÆÄÀÏ·Î ÁغñÇß´Ù. À̹ÌÁöÀÇ °¢ ºÎºÐÀ» ÇǶó¹ÌµåÀÇ °¢ Á¤Á¡¿¡ Àû´çÈ÷ ´ëÀÀ½ÃŲ´Ù. ÇǶó¹ÌµåÀÇ ²À´ë±â Á¤Á¡¿¡ À̹ÌÁöÀÇ Áß¾ÓÀ» ´ëÀÀ½ÃÅ°°í ³ª¸ÓÁö ¸ð¼¸® Á¤Á¡¿¡´Â À̹ÌÁöÀÇ °°Àº ¹æÇ⠸𼸮¸¦ ´ëÀÀ½ÃÄ×´Ù.
ÇǶó¹Ìµå¸¦ ¸¶·ç ¹Ù´Ú¿¡ ¿Ã·Á ³õ°í ´ë¸®¼® ¸ð¾çÀÌ ±×·ÁÁø º¸Àڱ⸦ À߶ó¼ À§¿¡¼ ±×´ë·Î ¾º¿î °Í°ú °°´Ù. Áß½ÉÀ» ±âÁØÀ¸·Î ÇǶó¹ÌµåÀÇ °¢ º¯¿¡ ¸Â´Â »ï°¢Çü Á¶°¢À» ÀÔÇûÀ¸¹Ç·Î Á¤¸é¿¡¼ º¸¸é ±×³É ´ë¸®¼® Æò¸éó·³ º¸ÀÌÁö¸¸ ȸÀüÇØ º¸¸é °¢ ¸éÀÇ °æ°è°¡ µå·¯³´Ù.
ÅؽºÃ³ ¹æ½ÄÀ» ¿©·¯ °¡Áö·Î º¯ÇüÇÏ´Â ±â´ÉµéÀÌ ¹Ì¸® ÀÛ¼ºµÇ¾î Àִµ¥ ´ÙÀ½ Ç׿¡¼ µû·Î »ó¼¼ÇÏ°Ô ¿¬±¸ÇØ º¸ÀÚ.
ÅؽºÃ³ ¸ÊÇÎÀº ±²ÀåÈ÷ º¹ÀâÇÑ ¿¬»êÀÌ¾î¼ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¿É¼ÇµéÀÌ ¾ÆÁÖ ¸¹´Ù. ´ÙÀ½ ÇÔ¼ö´Â ÅؽºÃ³ ¸ÊÇΠȯ°æÀ» ÁöÁ¤ÇÑ´Ù.
void glTexEnv[f, i](GLenum target, GLenum pname, GLfloat param);
target Àμö´Â ¾î¶² ȯ°æÀ» Á¶Á¤ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. GL_TEXTURE_ENV, GL_TEXTURE_FILTER_CONTROL, GL_POINT_SPRITE Áß ÇϳªÀÌ´Ù. pnameÀº Á¶Á¤ÇÏ°íÀÚ ÇÏ´Â ¿É¼ÇÀÇ À̸§ÀÌ°í paramÀº ¿É¼ÇÀÇ °ªÀÌ´Ù. GL_TEXTURE_ENV_MODE´Â Åؼ¿ÀÇ »ö»ó°ú Áö¿À¸ÞÆ®¸®ÀÇ »ö»óÀ» °áÇÕÇÏ´Â ¹æ½Ä ÁöÁ¤Çϴµ¥ ´ÙÀ½ ¿©¼¸ °¡Áö ¹æ½ÄÀÌ ÀÖ´Ù.
¹æ½Ä |
¼³¸í |
GL_MODULATE |
µÎ »ö»óÀ» °öÇÑ´Ù. |
GL_REPLACE |
»ö»óÀ» ¹«½ÃÇÏ°í ÅؽºÃ³·Î µ¤¾î¾´´Ù. |
GL_ADD |
µÎ »ö»óÀ» ´õÇÑ´Ù. |
GL_DECAL |
|
GL_BLEND |
ºí·£µù »ö»ó°ú ÅؽºÃ³¸¦ È¥ÇÕÇÑ´Ù. |
GL_COMBINE |
|
ÇǶó¹ÌµåÀÇ °¢ ¸é¿¡ °íÀ¯ÀÇ »ö»óÀÌ ÁöÁ¤µÇ¾î Àִµ¥ °áÇÕ ¸ðµå¿¡ µû¶ó ÀÌ »ö»ó°ú ÅؽºÃ³ »ö»óÀÇ ¿¬»êÀÌ °áÁ¤µÈ´Ù. REPLACE·Î µ¤¾î ¾²¸é ÅؽºÃ³ÀÇ ¹«´Ì¸¸ ³ªÅ¸³ªÁö¸¸ MODULATE³ª ADD·Î È¥ÇÕÇÏ¸é ¸éÀÇ ¿ø·¡»ö°ú ³í¸®ÀûÀ¸·Î ¼¯ÀδÙ. Æ˾÷ ¸Þ´º·Î ¸ðµå¸¦ ¹Ù²ã º¸ÀÚ.
ÅؽºÃ³ À̹ÌÁö°¡ ´Ù°¢ÇüÀ» µ¤¾î ¹ö¸®´Â °ÍÀÌ ¾Æ´Ï¶ó ¿ø·¡»ö°ú ¼¯ÀÌ´Â È¿°ú°¡ ³ªÅ¸³´Ù. ÀÌ ¸ðµå¿¡¼´Â ¶È°°Àº ÅؽºÃ³¶óµµ ´Ù°¢ÇüÀÇ ¿ø·¡ »ö¿¡ µû¶ó ¹«´ÌÀÇ »ö»óÀÌ °áÁ¤µÇ¹Ç·Î ÇϳªÀÇ ÅؽºÃ³·Î ³ë¶õ»ö, ÃÊ·Ï»ö ´ë¸®¼®À» Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½ ÇÔ¼ö´Â ÅؽºÃ³ ÆĶó¹ÌÅ͸¦ ÁöÁ¤Çϴµ¥ ÀÌ ÆĶó¹ÌÅÍ¿¡ µû¶ó ÅؽºÃ³¸¦ ±×¸®´Â ·£´õ¸µ ¹æ½ÄÀÌ ´Þ¶óÁø´Ù.
void glTexParameter[f, i][v](GLenum target, GLenum pname, GLfloat param);
targetÀº ÅؽºÃ³ÀÇ Â÷¿øÀ» ÁöÁ¤ÇÑ´Ù. pnameÀº ÆĶó¹ÌÅÍÀÇ À̸§ÀÌ°í paramÀº °ªÀÌ´Ù. ÅؽºÃ³¿Í ¹°Ã¼ÀÇ ¸éÀûÀÌ Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´Â °æ¿ì°¡ µå¹°¹Ç·Î ÅؽºÃ³¸¦ ´Ã¸®°Å³ª ÁÙ¿©¼ ÀÔÇô¾ß ÇÑ´Ù. ÅؽºÃ³ ¸ÊÀ¸·ÎºÎÅÍ ÀÔÈú »ö»óÀ» °è»êÇÏ´Â °úÁ¤À» ÅؽºÃ³ ÇÊÅ͸µÀ̶ó°í ÇÑ´Ù. GL_TEXTURE_MIN_FILTER´Â Ãà¼Ò½ÃÀÇ ÇÊÅ͸µÀ» ÁöÁ¤ÇÏ°í GL_TEXTURE_MAG_FILTER´Â È®´ë½ÃÀÇ ÇÊÅ͸µÀ» ÁöÁ¤ÇÑ´Ù. ÁÖ·Î ´ÙÀ½ µÎ °¡Áö ÇÊÅÍ°¡ »ç¿ëµÈ´Ù.
¡á ÃִܰŸ®(GL_NEAREST) : ºñÀ²»ó ´ëÀÀµÇ´Â À§Ä¡ÀÇ Åؼ¿°ªÀ» ±×´ë·Î »ç¿ëÇÑ´Ù. ¾Ë°í¸®ÁòÀº ´Ü¼øÇÏÁö¸¸ Ç°ÁúÀº ¶³¾îÁø´Ù.
¡á ¼±Çü(GL_LINEAR) : ´ëÀÀµÇ´Â À§Ä¡ ÁÖº¯ÀÇ Åؼ¿°ª¿¡ ´ëÇÑ Æò±ÕÀ» °è»êÇÑ´Ù. ¿À¹öÇì´õ°¡ ¸¹Áö¸¸ Ç°ÁúÀº ÈξÀ ´õ ÁÁ´Ù.
Ãà¼Ò½ÃÀÇ µðÆúÆ®´Â GL_NEAREST_MIPMAP_LINEARÀ̸ç È®´ë½ÃÀÇ µðÆúÆ®´Â GL_LINEARÀÌ´Ù. ¿¹Á¦¿¡¼´Â ÀǵµÀûÀ¸·Î 64 Å©±âÀÇ ÀÛÀº ÅؽºÃ³¸¦ ÀÔÇô ³õ°í ÇÊÅ͸µÀ» Åä±ÛÇØ º¸¾Ò´Ù. Â÷À̸¦ ºÐ¸íÈ÷ º¸°í ½ÍÀ¸¸é âÀ» Å©°Ô Çؼ µµÇüÀ» È®´ëÇÑ »óÅ·ΠÇÊÅ͸µÀ» ¹Ù²ã º¸¸é µÈ´Ù.
LINEAR ÇÊÅ͸µÀº ºÎµå·´°Ô È®´ëµÇÁö¸¸ NEAREST ÇÊÅ͸µÀº Ç°ÁúÀÌ ÈξÀ ´õ °ÅÄ¥¸ç °è´Ü Çö»óµµ ³ªÅ¸³´Ù. ¹°·Ð ¼Óµµ´Â ¹Ý´ë°ÚÁö¸¸ ÀÌ Á¤µµ µµÇü¿¡¼ ¼ÓµµÂ÷¸¦ ½Ç°¨Çϱâ´Â ¾î·Æ´Ù. ÅؽºÃ³¸¦ ´õ Å« °ÍÀ¸·Î »ç¿ëÇϸé È®´ë¿¡ ÀÇÇÑ ºÎÀÛ¿ëÀÌ °¨¼ÒÇϹǷΠǰÁúÀº ´õ ÁÁ¾ÆÁø´Ù.
GL_TEXTURE_WRAP_S, T, R ÆĶó¹ÌÅÍ´Â °¢ Ãà¿¡ ´ëÇÑ ÅؽºÃ³ ·¦ÇÎ ¹æ½ÄÀ» ÁöÁ¤ÇÏ¸ç ´ÙÀ½°ªÁß Çϳª¸¦ ÁöÁ¤ÇÑ´Ù.
·¦ÇÎ |
¼³¸í |
GL_CLAMP |
°æ°è ºÎ±ÙÀ» ¹Ýº¹ÇÑ´Ù. |
GL_CLAMP_TO_BORDER |
°æ°è Åؼ¿ÀÇ °ªÀ» ¹Ýº¹ÇÑ´Ù. |
GL_CLAMP_TO_EDGE |
|
GL_MIRRORED_REPEAT |
¹Ý»çµÈ ¸ð¾çÀ¸·Î ¹Ýº¹ÇÑ´Ù. |
GL_REPEAT |
¹Ýº¹ÇÑ´Ù. |
ÅؽºÃ³ ¹üÀ§¿Í Åؼ¿ ¹üÀ§°¡ ÀÏÄ¡ÇÏÁö ¾ÊÀ» °æ¿ì ¹Ýº¹ ¹× °æ°è ºÎ±ÙÀÇ Ã³¸® ¹æ½ÄÀ» ÁöÁ¤ÇÑ´Ù. ÀÌ ¿¹Á¦´Â ÅؽºÃ³°¡ ´Ù°¢Çüº¸´Ù ÀÛÀ¸¹Ç·Î ÀÌ ÆĶó¹ÌÅ͸¦ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.