![]()
| 3Â÷¿ø ±×·¡ÇÈÀÇ ¿ø¸® ÀÌÇØ OpenGL¿¡ µé¾î°¡±â¿¡ ¾Õ¼¼ °£´ÜÇÏ°Ô 3Â÷¿ø ±×·¡ÇÈÀÇ ÆÄÀÌÇÁ
¶óÀÎÀ» ÀÌÇØÇÏ°í ³Ñ¾î°¡´Â°Ô ÁÁÀ» µí ½Í¾î¼ °£´ÜÇÏ°Ô ÀÌ ¹Ù·Î ¾ÕÀÇ ³»¿ëÀº OpenGL·Î ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§Çؼ óÀ½¿¡
¼¼ÆÃ ÇÏ´Â ºÎºÐ°ú °£´ÜÇÑ ÇÔ¼öµéÀ» ºÒ·¯ µé¿©¼ OpenGL
·¡½ºÅÍÈ´Â ¸ðµç ºÎºÐÀÌ ¸¶¹«¸®°¡ µÇ°í ³ª¼ ¸ð´ÏÅÍ¿¡ »Ñ·ÁÁö´Â ºÎºÐÀÌ´Ù.
¿ì¼± 3Â÷¿øÀÇ ÁÂÇ¥°è°¡ ¾î¶»°Ô ¸ð´ÏÅÍÀÇ 2Â÷¿ø ÁÂÇ¥°è·Î ¹Ù²î´ÂÁö¿¡ ´ëÇØ¼ ¾Ë¾Æ º»´Ù. 1.µð½ºÇ÷¹ÀÌ ÀåÄ¡·ÎºÎÅÍ °¡Àå ¸Õ ÁÂÇ¥°è·ÎºÎÅÍ ½ÃÀÛÇÑ´Ù. ±×¸²¿¡¼ ¿ÞÂÊ¿¡ º¸ÀÎ¹Ù¿Í °°ÀÌ °¢°¢ÀÇ 3Â÷¿ø ¹°Ã¼´Â 3Â÷¿ø ¸ðµ¨¸µ ÁÂÇ¥°è¿¡¼ Á¤ÀǵȴÙ. °´Ã¼ ÁÂÇ¥°è(object-coordinate systme) ¶Ç´Â Áö¿ª ÁÂÇ¥°è(local coordinate system)¶ó°í ºÎ¸£±âµµ ÇÑ´Ù.2.Á¤ÀÇµÈ ¹°Ã¼´Â ¸ðµ¨¸µ º¯È¯¿¡ ÀÇÇØ ¼¼°è ÁÂÇ¥°è(world-coordinate system)·Î º¯È¯ µÇ´Âµ¥ ¿©±â¼ ÇϳªÀÇ Àå¸éÀ̳ª ¿Ïº®ÇÑ °´Ã¼ÀÇ Ç¥ÇöÀÌ ÀÌ·ç¾î Áø´Ù.¹®Á¦ ÁÂÇ¥°è(problem coordinate system) ¶Ç´Â ÀÀ¿ë ÁÂÇ¥°è(application-coordinate system)¶ó ºÎ¸£±âµµ ÇÑ´Ù. 3Â÷¿ø °´Ã¼¸¦ µð½ºÇ÷¹ÀÌ¿¡ »ý¼ºÇϱâ À§Çؼ´Â 2Â÷¿øÀ¸·Î Åõ¿µÇÏ¿© ÁÂÇ¥¸¦ »ý¼ºÇÑ´Ù. 3.ºä º¼·ýÀ» Á¤ÀÇÇϱâ À§ÇÑ ÁÂÇ¥°è·Î ºä±âÁØ ÁÂÇ¥°è(view-reference coordinate system)°¡ ÀÖ´Ù. ¶§¶§·Î ¿Þ¼Õ ÁÂÇ¥°è·Î ±¸ÇöµÇ±âµµ ÇÑ´Ù.4.ºä ÁÂÇ¥°è ´ÙÀ½Àº Á¤±Ô Åõ¿µ ÁÂÇ¥°è·Î¼(normalized-projection coordinate system) ¶Ç´Â 3Â÷¿ø ȸé ÁÂÇ¥°è(3D screen coordinate)·Î¼ ÆòÇàÅõ¿µ Á¤±Ô ºä º¼·ý ÁÂÇ¥°èÀÌ´Ù. 5.¸¶Áö¸·À¸·Î 3Â÷¿ø¿¡¼ 2Â÷¿øÀ¸·ÎÀÇ Åõ¿µÀº 2Â÷¿ø ÀåÄ¡ ÁÂÇ¥°è(2D device-coordimate system)À» ÇÊ¿ä·Î ÇÑ´Ù.Á¤±Ô ÀåÄ¡ ÁÂÇ¥°è, À̹ÌÁö ÁÂÇ¥°è, ¶Ç´Â ÀåÄ¡ ÁÂÇ¥°è¶ó ºÎ¸£±âµµ ÇÑ´Ù. ±×·³ ´ÙÀ½À¸·Î 3Â÷¿ø ÁÂÇ¥°èÀÇ Á¤Á¡ÀÌ ¾î¶² ÆÄÀÌÇÁ ¶óÀÎÀ¸·Î ¸ð´ÏÅÍÀÇ ÁÂÇ¥°è·Î º¯È¯ÀÌ µÇ´ÂÁö ¾Ë¾Æ º¸ÀÚ.
1.¿ø·¡ÀÇ Á¤Á¡À» ¸ðµ¨ °üÃø Çà·Ä·Î °öÇÏ¿©,º¯È¯µÈ ½Ã°¢ ÁÂÇ¥°è¸¦ »ý¼ºÇÑ´Ù. 2.½Ã°¢ ÁÂÇ¥°è´Â Åõ¿µ Çà·ÄÀ» °öÇØ¼ Ŭ¸®ÇÎ ÁÂÇ¥·Î º¯È¯µÈ´Ù. 3.Ŭ¸®ÇÎ ÁÂÇ¥´Â wÁÂÇ¥·Î ³ª´©¾î Á¤±ÔÈ ÀåÄ¡
ÁÂÇ¥°è·Î º¯È¯ÀÌ µÈ´Ù. 4.ÀÌ ¼¼ °ªÀÇ ÁÂÇ¥´Â ºäÆ÷Æ® º¯È¯¿¡ ÀÇÇØ 2Â÷¿ø Æò¸éÀ¸·Î ¸ÅÇεȴÙ. ´ëÃæ ÆÄÀÌÇÁ ¶óÀÎÀÌ ÀÌ·¸°Ô µ¹¾Æ°£´Ù. ±×·³ ÇϳªÇϳªÀÇ º¯È¯ÀÌ ¾î¶²
ÇÔ¼ö·Î ÀÌ·ç¾îÁö´ÂÁö ¾Ë¾Æº»´Ù. 1.¸ðµ¨ °üÃø Çà·ÄÀº 4x4Çà·Ä·Î ¹°Ã¼ÀÇ À§Ä¡¿Í ¹æÇâÀ» ¼³Á¤Çϴµ¥ »ç¿ëÇØ º¯È¯µÈ ÁÂÇ¥°è¸¦ ³ªÅ¸³½´Ù. °¡Á¤:°¢º¯ÀÌ 10ÀÇ ±æÀ̸¦ °¡Áø À°¸éü¸¦ »ý¼ºÇÏ¿© yÃàÀÇ ¾çÀÇ ¹æÇâÀ¸·Î 10¸¸Å À̵¿½ÃÄѶó. - low-levelÇ¥Çö ¹æ¹ý- glutWireCube(10.0f); //°¢º¯ÀÌ 10ÀÇ ±æÀ̸¦ °¡Áö´Â
À°¸éü »ý¼º //¸ðµ¨ °üÃø Çà·Ä°ú À§ÀÇ Çà·ÄÀ» °öÇÑ´Ù. //À°¸éü¸¦ ±×¸°´Ù. - high-levelÇÔ¼ö »ç¿ë - void glTranslatef(GLfloat x, GLfloat y, GLfloat z); glTranslatef(0.0f,10.0f,0.0f); ¿©±â¼´Â ¿¹Á¦¸¦ À̵¿¸¸ ´Ù·ç¾ú´Âµ¥ ȸÀü,Å©±â
º¯È¯µµ ¸ðµÎ ÀÌ ºÎºÐ¿¡¼ ´Ù·ç°Ô µÈ´Ù. ´Ü¼øÇÏ°Ô Çà·ÄÀ» ÁöÁ¤À» ÇØ¼
»ç¿ë 2.½Ã°¢ ÁÂÇ¥°è´Â Åõ¿µ Çà·ÄÀ» °öÇØ¼ Ŭ¸®ÇÎ ÁÂÇ¥·Î º¯È¯µÈ´Ù. ¸ÕÀú ½Ã°¢ ÁÂÇ¥°è¸¦ ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æ º»´Ù. ÀÌ°Ç Á¶¸Á
º¯È¯(viewing transformation)À̶󱸵µ ÇÑ´Ù. void glulookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); (eyex,eyey,eyez)´Â ÇöÀç ÁÖ½ÃÇϰí ÀÖ´Â ´«ÀÇ À§Ä¡¸¦ ÀǹÌÇϸç (centerx,centery,centerz)´Â ÁÖ½ÃÇϰí ÀÖ´Â Ä«¸Þ¶óÀÇ ÁÖ½ÃÁ¡À» Ç¥ÇöÇϸç (upx,upy,upz)´Â upvector¸¦ ÀǹÌÇÑ´Ù.
À§ ±×¸²¿¡¼ Ä«¸Þ¶ó´Â ¿øÁ¡¿¡ À§Ä¡Çϰí ÁÖ½ÃÁ¡(reference point)Àº zÃà À½ÀÇ ¹æÇâÀ¸·Î -100À̸ç up vector´Â ¾çÀÇ yÃà ¹æÇâÀ̹ǷΠgluLookat(0.0, 0.0, 0.0, 0.0, 0.0, -100.0 ,0.0, 1.0, 0.0); À¸·Î ÄÚµùÀÌ °¡´ÉÇÏ´Ù.
** gluLookAt(4.0, 2.0, 1.0, 2.0, 4.0, -3.0, 2.0, 2.0, -1.0);
À§ ±×¸²¿¡¼ Çѹø ºÁ º¸µµ·Ï ÇÏÀÚ. eyex,y,z´Â »¡°£ »öÀÇ ¼± ºÎºÐÀÌ´Ù. ±×·³ eyex,y,z´Â ÇØ°áÀÌ µÆ´Ù. ¹«¾ùÀÎÁö ´ÙÀ½À¸·Î centerx,y,z´Â Ä«¸Þ¶ó°¡ º¸´Â ¹æÇâÀ» °áÁ¤À» ÇØÁØ´Ù. ¾ÕÀÇ eyex,y,z´Â ´ÜÁö Ä«¸Þ¶óÀÇ À§Ä¡ÀÏ»Ó ¾î´ÀÂÊÀ» º¼°ÇÁö´Â ´Ù¸¥ ¾î ¶² Á¡ÀÌ ÀÖ¾î¼ ¹æÇâÀÌ ÀÖ´Â º¤ÅÍ °ªÀ¸·Î ÁÖÁö ¾Ê´Â ÀÌ»ó ¾î´ÀÂÊÀ» º¼Áö¸¦ ¸ð¸¥´Ù. ±×·¡¼ centerx,y,z°¡ ±× ¹æÇâÀ» Àâ¾ÆÁØ´Ù. ¿©±â¼´Â e¶ó´Â Àú Á¡ÀÌ ±× ±â´ÉÀ» ÇÑ´Ù. ±×·³ ÇϳªÇϳª¾¿ »ý°¢À» ÇØ º¸µµ·Ï ÇÏÀÚ. centerY°ªÀ» eY1Á¡À¸·Î À̵¿À» ½ÃŰ¸é ¾î¶»°Ô º¸Àϱî¿ä? ´ç¿¬È÷ Ä«¸Þ¶ó´Â °¡¸¸È÷ ÀÖ´Â »óÅ¿¡¼ º¸´Â °ÍÀÔ´Ï´Ù. ´ç¿¬È÷ ¸Ó¸® ºÎºÐÀÌ º¸À̰ÚÁÒ!! »ç¿ëÀÚ¿¡°Ô´Â ¹°Ã¼ °¡ ¾Æ·¡·Î ³»·Á°£ °Íó·³ º¸Àϰű¸¿ä.. ±×·³ ZÃàÀ» »ý°¢ÇØ º¼±î¿ä!! eZ1°ú eZ2ÀÇ Â÷ÀÌ´Â ¹«¾ùÀϱî¿ä? ¾Æ¹« Â÷À̵µ ³ªÁú ¾Ê½À´Ï´Ù. ¿Ö³Ä? ÀÌ°Ç ±×³É Ä«¸Þ¶ó°¡ ¾îµô º¸´ÂÁö¸¦ Á¤Çϴ°ÅÁö? Ä«¸Þ¶ó´Â ¿òÁ÷ÀÌÁö ¾Ê±â ¶§¹®ÀÌÁÒ.. ±×·¯¸é Ä«¸Þ¶óÀÇ eyeZº¸´Ù ¿ÞÂÊÀ¸·Î °¡¸é ´ç¿¬È÷ °ËÁ¤»ö¸¸ º¸À̰ÚÁÒ..... ±×·³ ¸¶Áö¸·ÀÇ upx,y,z¸¦ º¼±î¿ä?
0, 1.0, 0À¸·Î ¼³Á¤À» Çϸé Ä«¸Þ¶óÀÇ +yÃàÀ¸·Î ¹ý¼± º¤ÅͰ¡ ³ª°£´Ù±¸ »ý°¢À» ÇÏ¸ç µÈ´Ù. ±×·³ ÀÌ ¹°Ã¼´Â ¹Ýµå½Ã ¼ Àִ°Šó·³ º¸ÀδÙ. 0, -1.0, 0Àº -yÃàÀ¸·Î ³ª°¡¹Ç·Î ¹°Ã¼°¡ ¹°±¸³ª¹« ¼±â¸¦ Çϰí ÀÖ´Ù. ´ÙÀ½À¸·Î 1.0, 0, 0Àº +xÃàÀ¸·Î ³ª°¡¹Ç·Î ¸Ó¸®°¡ ¿ÞÂÊ ´Ù¸®°¡ ¿À¸¥ÂÊÀ¸·Î ÇâÇÏ°Ô ´©¿öÀÖÀ» °ÍÀÌ´Ù. ±×¸²À» º¸°í ºñ±³Çغ¸±æ ¹Ù¶õ´Ù. ** ¿¹½Ã ** void display(void) glulookAt()ÇÔ¼ö´Â Ä«¸Þ¶óÀÇ À§Ä¡¿Í Ä«¸Þ¶ó°¡ ¹Ù¶óº¸´Â °÷ÀÇ À§Ä¡,
±×¸®°í Ä«¸Þ¶óÀÇ À§ÂÊ ¹æÇâÀ» ÁöÁ¤ÇÔÀ¸·Î½á Á¶¸Á º¯È¯À» void PlaneView(GLfloat planeX,GLfloat planeY,GLfloat planeZ,GLfloat
roll,GLfloat pitch,GLfloat yaw) ÀÌ°Ç ±×³É Àֱ淡 ¿Ã·Á ³õÀº°Çµ¥ ³»¿ëÀº Àß ¸ð¸£°Ú´Ù. Åõ¿µ¿¡ ´ëÇØ¼ ±×·³ ¾Ë¾Æ º¸°Ú½À´Ï´Ù. Åõ¿µ¿¡´Â Á÷±³Åõ¿µ°ú Åõ½ÃÅõ¿µ(glFrustum(),gluPerspective())ÀÌ ÀÖ´Ù.
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); Á÷±³ Åõ¿µÀº ¸ðµç ¸éÀÌ »ç°¢ÇüÀÌ´Ù. ÀÌ·ÐÀûÀ¸·Î´Â ¾Õ, µÚ, À§, ¾Æ·¡, ¿ÞÂÊ, ¿À¸¥ÂÊ ¸éÀÌ ¸ðµÎ °°´Ù. ÁַΠȸ鿡 Á¤È®ÇÑ ¸ð¾ç°ú Ä¡¼ö¸¦ Ç¥ÇöÇØ¾ßÇÏ´Â CAD³ °ÇÃ༳°è¿¡ ¸¹ÀÌ »ç¿ëµÈ´Ù. glOrtho2D()´Â 2Â÷¿ø ÇüÅÂÀÇ Á÷±³ Åõ¿µÀ» Á¤ÀÇÇÑ´Ù. oid reshape (int w, int h)
void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); glMatrixMode (GL_MODELVIEW); }
glFrustum()Àº ¿øÇÏ´Â È¿°ú¸¦ ¾ò±â À§ÇØ Åõ¿µ ¹æ¹ýÀ» Á÷°üÀûÀ¸·Î
ÆÄ¾ÇÇϱâ Èûµé´Ù. ÇÏÁö¸¸ gluPerspective()´Â Á÷°üÀûÀ¸·Î void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far); void reshape(int w, int h) ±×·³ ¶Ç ³ª¿À°Ô µÈ Ŭ¸®ÇÎÀ̶ó´Â ¿ë¾î¿¡ ´ëÇØ¼ ¾Ë¾Æ º¾´Ï´Ù. À©µµ¿ì´Â ¹°¸®ÀûÀ¸·Î Çȼ¿´ÜÀ§·Î ¸ð´ÏÅÍ¿¡ »Ñ·ÁÁà¾ß Çϱ⠶§¹®¿¡
ÇÁ·Î±×·¥¿¡°Ô Ŭ¸®ÇÎ °ø°£À» °¡¸£ÄÑ ÁÖ¾î¾ß ÇÑ´Ù. ½±°Ô À©µµ¿ìÀÇ Å©±â¸¦ Á¶ÀýÇÑ´Ù±¸ °¡Á¤À» ÇÏÀÚ. Ŭ¸®ÇÎ °ø°£¼³Á¤Àº
¿ì¸®°¡ ¿øÇÏ´Â 150x100ÀÇ ÁÂÇ¥°è°¡ ½ÇÁ¦ ½ºÅ©¸°ÀÇ ±×·¯±¸ ºäÆ÷Æ®°¡ Ãà¼Ò È®´ëÀÔ´Ï´Ù. ºäÆ÷Æ®ÀÇ Å©±â¸¦ Ãà¼Ò¸¦
½Ã۸é À©µµ¿ìÀÇ ½ºÅ©¸°ÀÇ °¡·Î,¼¼·Î°ªÀÌ µé¾î°¡¼ Ãà¼Ò°¡ µÇ´Â
3.Ŭ¸®ÇÎ ÁÂÇ¥´Â
wÁÂÇ¥·Î ³ª´©¾î Á¤±ÔÈ ÀåÄ¡ ÁÂÇ¥°è·Î º¯È¯ÀÌ µÈ´Ù. Ŭ¸®ÇÎ ÁÂÇ¥´Â ´Ù½Ã wÁÂÇ¥·Î ³ª´©¾î Á¤±ÔÈ ÀåÄ¡ ÁÂÇ¥°è·Î
º¯È¯µÈ´Ù. À̶§ »ç¿ëµÈ w °ªÀº »ç¿ëµÈ º¯È¯¿¡ µû¶ó Åõ¿µÇà·ÄÀÌ 4.ÀÌ ¼¼ °ªÀÇ ÁÂÇ¥´Â ºäÆ÷Æ® º¯È¯¿¡ ÀÇÇØ 2Â÷¿ø Æò¸éÀ¸·Î ¸ÅÇεȴÙ. glViewportÇÔ¼ö´Â ¸¹ÀÌ º¸¾ÒÀ» °ÍÀÌ´Ù.
´ÙÀ½À¸·Î ¾Ë¾Æ º¸´Â ³»¿ëÀº Æú¸®°ïÀÇ »ý¼º ¹æ¹ýµé¿¡ ´ëÇØ¼ ÀÚ¼¼È÷ ¾Ë¾Æ º¸µµ·Ï ÇÑ´Ù. 3Â÷¿ø °ø°£À» Ç¥ÇöÀ» Çϴµ¥ °¡Àå ±âº»ÀÌ µÇ´Â °ÍÀº Á¡À̶ó±¸
ÇÏ¿´´Ù. ±×¸®±¸ ¼± ±×¸®±¸ ÇѸéÀ» ¸¸µå´Âµ¥´Â Æú¸®°ïÀ̶ó±¸
glBegin(GL_LINE_STRIP); ¿·ÀÇ ¼±À» ±¸¼ºÇÏ´Â ÇÔ¼ö´Â GL_LINE_LOOP¸¦ »ç¿ëÇϱ¸ ³¡¿¡ ³ª¿À´Â
¼±Àº óÀ½ ¸í½ÃµÈ Á¤Á¡°ú ¸¶Áö¸·¿¡ ¸í½ÃµÈ Á¤Á¡ »çÀ̸¦ ´ëÃæ ¼±À» ±ß´Âµ¥´Â ÀÌ·± µÎ°¡Áö ¹æ¹ýÀ¸·Î ÇÒ ¼ö°¡ ÀÖ´Ù. ±×·¯¸é
ÀÌ ¼±µéÀ» °¡Áö°í ±¸¼ºµÇ´Â »ï°¢ÇüÀº ¾î¶² ¹æ¹ýµé·Î ±×¸®°Ô »ï°¢ÇüÀ» ±×¸®´Âµ¥´Â °¨±â(Winding)¿¡ µû¶ó¼ ¾Õ¸é,µÚ¸éÀ» ±¸ºÐÇÏ°Ô µÈ´Ù.
glBegin(GL_TRIANGLES); glVertex2f(-50.0f, 0.0f); ±×·³ ÀÌ·¸°Ô Áö±Ý º¸¿©ÁÖ±¸ ÀÖ´Â Æú¸®°ïÀÌ ¾Õ¸éÀÎÁö µÞ¸éÀÎÁö¸¦ ±¸ºÐÇÏ´Â ÀÌÀ¯°¡ ¹«¾ùÀϱî? ¸¹Àº ÀÌÀ¯°¡ ÀÖ´Ù. ¾ÕµÚ¸éÀÌ ¼·Î ´Ù¸¥ ÀçÁúÀÇ Æú¸®°ïÀÌ ÇÊ¿äÇÒ ¶§µÎ
ÀÖ±¸. glFrontFace(GL_CW) ÀÌ ÇÔ¼ö´Â ½Ã°è¹æÇâ °¨±â¸¦ »ç¿ëÇÑ Æú¸®°ïÀÌ
¾Õ¸éÀ» ÇâÇÑ´Ù´Â °ÍÀ» OpenGL¿¡°Ô ¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù. ±×·³ ´Ù¸¥ °æ¿ì¸¦ ¾Ë¾Æ º»´Ù.
Æ®¶óÀÌ ¾Þ±Û ½ºÆ®¸³(Triangle Strips,»ï°¢¶ì)¶ó±¸ Çϴµ¥ ÀÌ ¹æ¹ýÀº
óÀ½ ¼¼ Á¤Á¡À» ÁöÁ¤ÇÏ¿© ù ¹øÂ° »ï°¢ÇüÀ» ³ªÅ¸³½ ÈÄ, ÀÌ ¸ðµç ºÎºÐ¿¡ ´ëÇÑ ¼Ò½º´Â ³ªÁß¿¡ ÇϳªÀÇ ¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æ º¸µµ·Ï ÇÑ´Ù. ´ÙÀ½À¸·Î Áß¿äÇÑ ¿ë¾î°¡ Àº¸éÁ¦°Å(Hidden Surface Removal)ÀÌ´Ù.
½±°Ô ÀÌ·± ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. óÀ½ ¹°Ã¼¸¦ ±×·È´Âµ¥ ÀÌ ¹®Á¦¸¦ º¸¿ÏÇϱâ À§Çؼ´Â z¹öÆÛ(±íÀÌ °Ë»ç)¶ó´Â°É ¼öÇàÀ» ÇÏ¿©
°üÃøÀڷκÎÅÍ ¹°Ã¼°¡ ¾ó¸¶ÀÇ zÃàÀÇ À½ÀÇ ¹æÇâÀ» ´ÙÀ½À¸·Î ³ª¿À´Â ¿ë¾î°¡ ¼±º°(culling)ÀÌ´Ù. ½±°Ô ¸éÀ» ¼û±â´Â °ÍÀÌ´Ù. »çº¯Çü(Quad)¸¦ ±¸¼ºÇÏ´Â ÇÔ¼ö GL_QUAD_STRIP() ¹ü¿ë Æú¸®°ï(General Polygon) Áö±ÝºÎÅÍ ¼Ò½º´Â À©»ÔÀ» ±×¸®´Â ¼Ò½ºÀÌ´Ù. »ö±òÀÌ ´Ù¸¥ µÎ ºÎºÐÀÌ
Àִµ¥ À§¿¡°ÍÀÌ ¿ø»ÔÀ» ±¸¼ºÇÏ´Â ¿·¸éÀ» ¸¸µé±¸ ¾Æ·¡°¡ void SetupRC() //±×·³ ·£´õ¸µ ÄÁÅØ½ºÆ®¸¦ ÃʱâÈ ÇØ º¸µµ·Ï ÇϰڴÙ. glShadeModel(GL_FLAT);
//¸¶Áö¸·À¸·Î ¸í½ÃµÈ Á¤Á¡¿¡¼ »ç¿ëÇÏ´Â »öÀ» »ç¿ëÇÏ¿© Æú¸®°ïÀ» ÀÏÁ¤ÇϰÔ
»öÄ¥ÇÏ°Ô glFrontFace(GL_CW);//Æ®¶óÀÌ ¾Þ±Û ÆÒÀ» »ç¿ëÇÒ°Å´Ñ±î ½Ã°è¹æÇâÀ̱¸ Æ®¶óÀÌ ¾Þ±Û½ºÆ®¸³ÀÌ¸é ¹Ý½Ã°è¹æÇâ } void RenderScene(void) //Àå¸éÀ» ±×¸± ¶§ »ç¿ëÀ» ÇÑ´Ù. if(bCull) //¼±º°À»
¿øÇÏ´ÂÁö ¾ÊÇÏ´ÂÁö¸¦ ±¸ºÐ. if(bDepth) //±íÀÌ
°Ë»ç¸¦ Å×½ºÆ® if(bOutline)
//µÞ¸éÀÇ Æú¸®°ï¸¸ ±×¸®´ÂÁö ¼³Á¤ glPushMatrix();
//ÇöÀç Çà·ÄÀ» glLoadIdentity()·Î Ãʱâȸ¦ ÇÏÁö ¾Ê°í ½ºÅÿ¡ ÀúÀåÇ϶ó´Â
ÇÔ¼öÀÌ´Ù. glRotatef(xRot,1.0f,0.0f,0.0f); glBegin(GL_TRIANGLE_FAN); //Æ®¶óÀÌ ¾Þ±Û ÆÒÀ» ±×¸®±â ½ÃÀÛÇÑ´Ù. glVertex3f(0.0f,0.0f,75.0f); //¿ø»ÔÀÇ ²ÀÁöÁ¡ ÁöÁ¤ for(angle=0.0f;
angle < (2.0f*GL_PI); angle +=(GL_PI/8.0f)) //¿øÀÇ
¦¼ö¹øÂ°Á¡À» Æ®¶óÀÌ¾Þ±Û ÆÒÀÇ Á¤Á¡À¸·Î ¼³Á¤ if((iPivot
%2) == 0) //Àû»ö°ú ³ì»öÀ» ¹ø°¥¾Æ°¡¸ç
»ç¿ëÇÑ´Ù.
glEnd(); glBegin(GL_TRIANGLE_FAN);//¹Ù´Ú ä¿ì±â glVertex2f(0.0f,0.0f); //Áß½ÉÀº ¿øÁ¡ for(angle
= 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f)) glEnd(); glPopMatrix(); //½ºÅÿ¡ ÀúÀåµÈ Çà·ÄÀ» ´Ù½Ã ºÒ·¯³½´Ù. glFlush(); //µå·ÎÀ×
¸í·ÉÀ» ½ÇÇàÇÑ´Ù. ´ÙÀ½À¸·Î Æú¸®°ï¿¡ ÆÐÅÏÀ» ä¿ì´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ. ÅØ½ºÃÄ ¸ÅÇÎÀº Á¦°¡ ¾ÆÁ÷ ¸ð¸£´Ñ±î ¹¹¶ó ÇÒ¸»Àº ¾ø±¸ ½ºÆ¼Çøµ ÆÐÅÏÀº
´ÜÁö,ä¿ì±â ÆÐÅÏ¿¡ »ç¿ëµÇ´Â 32x32 ´Ü»ö ºñÆ®¸ÊÀ¸·Î
ÀÌ ¸ð¾çÀ» ¸¸µé±â À§Çؼ Á¦ÀÏ ¹Ø¿¡¼ºÎÅÍ ½ÃÀÛÇÏ¿©
Çѹø¿¡ ÇÑÁÙ¾¿ ÀúÀåÇÏ´Â °ÍÀÌ´Ù. ÃÖ»óÀ§ ºñÆ®°¡ ¸ÕÀú ÀÐÇôÁö´Â ¹æ½ÄÀ¸·Î GLubyte fire[] ={0x00,0x00,0x00,0x00, void SetupRC() ´ÙÀ½À¸·Î ³ª¿À´Â ³»¿ëÀÌ Æú¸®°ïÀÇ Á¦¾à¿¡ ´ëÇÑ ºÎºÐÀÔ´Ï´Ù.
´ÙÀ½À¸·Î Áß¿äÇÑ ºû¿¡ ´ëÇØ¼ ¾Ë¾Æº»´Ù. ±×·³ ºû¿¡´Â ¾î¶² °ÍµéÀÌ ÀÖ´ÂÁö ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. Ambient Light(ÁÖº¯±¤)ƯÁ¤ÇÑ ¹æÇâÀÌ¿¡¼ ¿À´Â ºûÀÌ ¾Æ´Ï´Ù. ºûÀÇ ±Ù¿øÀº ÀÖÁö¸¸ ¹æ ȤÀº Àå¸é ÁÖÀ§¿¡¼ ¹Ý»çµÇ¾î µé¾î¿À±â ¶§¹®¿¡ ¹æÇâÀÌ ¾ø´Â ±¤¼±ÀÌ´Ù. Ambient light¿¡ ÀÇÇØ¼ Á¶¸íµÇ´Â ¹°Ã¼´Â ÀüüÀûÀ¸·Î ¸ðµç ¹æÇâÀ¸·ÎºÎÅÍ ºûÀÌ ºñÃß¾îÁø´Ù. ¹°Ã¼¸¦ ȸÀü½ÃÄѵµ Ambient Light¿¡ ÀÇÇØ¼ »öÀÌ º¯ÇÏÁö ¾Ê´Â´Ù. Áï, ¹æÇâÀ» °®°í ÀÖÁö ¾ÊÀº Ambient Light°¡ ±× ¹°Ã¼¸¦ ºñÃß°í ÀÖ¾ú±â ¶§¹®¿¡, ¾î´À °¢µµ¿¡¼µµ °°Àº »öÀ¸·Î º¸¿©Áö´Â °ÍÀÌ´Ù. Diffuse Light(¹Ý»ç±¤) ƯÁ¤ÇÑ ¹æÇâÀ¸·Î ºñÃçÁöÁö¸¸, ±× ºûÀÇ ¹Ý»ç´Â ¿©·¯ ¹æÇâÀ¸·Î ÀÌ·ç¾îÁø´Ù. ºûÀÌ °ñ°í·ç ¹Ý»çµÈ´Ù ÇÏ´õ¶óµµ, ¹°Ã¼¸¦ ºñ½ºµëÈ÷ ºñÃâ ¶§º¸´Ù ¹Ù·Î À§¿¡¼ ºñÃâ ¶§°¡ ¹°Ã¼ Ç¥¸éÀ» ´õ ¹à°Ô º¸ÀδÙ. ¿¹·Î½á Çü±¤µîÀÇ ºûÀ̳ª ¿ÀÈÄ¿¡ âÀ» ÅëÇØ µé¾î¿À´Â ÇÞºûÀ» »ý°¢ÇÏ¸é µÈ´Ù. Specular Light(È®»ê±¤) ¿ª½Ã ¹æÇâÀ» °¡Áö´Â ºûÀÌ´Ù. ÇÏÁö¸¸ »ç¹æÀ¸·Î “TÀ» ¹Ý»ç½ÃŰ´Â Diffuse Light¿Í´Â ´Þ¸® ƯÁ¤ ¹æÇâÀ¸·Î¸¸ ¶Ñ·ÇÇÏ°Ô ºûÀ» ¹Ý»ç½ÃŲ´Ù. °ÇÑ Specular LightÀÌ ¹°Ã¼¿¡ ´êÀ¸¸é ±× Ç¥¸é¿¡ Spot°¡ »ý±â´Âµ¥ À̰ÍÀ» Specular Highlight¶ó°í ÇÑ´Ù. ÀÌ ºÎºÐÀº phongÀÇ ¹Ý»ç¸ðÇüÀ̶ó´Â
°Ô Àִµ¥ ÀÌ°É ¼öÇÐÀû °ø½ÄÀ¸·Î ¾²°í ÇÏ´Â°Ç ¹«ÀÚ°Ô ¸Ó¸®°¡ ¾ÆÇÁ´Ù.
±»ÀÌ ¾Ë Çʿ伺µµ Á¶¸íÀ» Àû¿ëÇÏ´Â ´Ü°è¸¦ ¿ì¼±¾Ë°í »ý°¢ÇÏ¸é¼ ³Ñ¾î°¡µµ·Ï ÇÑ´Ù. 1.¸ðµç °´Ã¼ÀÇ ¸ðµç Á¤Á¡µé¿¡ ´ëÇØ ¹ý¼±µéÀ» °è»êÇÑ´Ù.
±× ¹ý¼±µéÀº ±¤¿ø¿¡ ´ëÇÑ °´Ã¼ÀÇ »ó´ëÀûÀÎ ¹æÇâÀ» °áÁ¤ÇÑ´Ù. ÁøÇàÀ» À§ÀÇ ´Ü°è¼øÀ¸·Î ÇÏÁø ¾Ê°Ú´Ù. óÀ½ºÎÅÍ ¹ý¼±ÀÌ ³ª¿À±¸ ÇÏ¸é ¸Ó¸®°¡ ¾ÆÇÁ±â ¶§¹®ÀÌ¿¡¿ä... glClearColor(0.0f,
0.0f, 0.0f, 1.0f); //ÀÌ°Ç À©µµ¿ì¸¦ Áö¿ï ¶§ ´Ù½Ã ¸»Çؼ ¹ÙÅÁ. ´ÙÀ½À¸·Î »öÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀÌ Àִµ¥ ÀÌ´Â ½¦À̵ùÀ̶ó±¸
ÇÑ´Ù. ´ÙÀ½À¸·Î Áß¿äÇÑ °³³äÀÌ ¹°Ã¼°¡ °¡Áö°í ÀÖ´Â °íÀ¯ÇÑ
ÀçÁú¿¡ µû¶ó¼ »öÀÌ ´Þ¸® º¸Àδٴ°ÍÀÌ´Ù. °¡·É °¡Á¤ÇØ º¸ÀÚ.Æú¸®°ïÀÌ Àû»öÀÏ °æ¿ì,Æú¸®°ïÀÌ ºûÀÇ
Àû»ö ¼ººÐÀ» ´ëºÎºÐ ¹Ý»çÇÏ´Â ÀçÁú·Î ÀÌ·ç¾îÁ® ÀÖ´Ù±¸ ¼³Á¤ÇÑ´Ù. GLfloat ambientLight[] = { 0.25f, 0.25f, 0.0f, 1.0f }; // ÁÖº¯±¤¿¡ »ç¿ëÇÒ »öÁöÁ¤ ¾àÇÑ ³ë¶õ»ö GLfloat diffuseLight[] = { 0.9f, 0.9f, 0.0f, 1.0f }; // ¹Ý»ç±¤ Á¶±Ý °ÇÑ ³ë¶õ»ö GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; //ºûÀ» Á¤¸éÀ¸·Î ¹ÞÀ» °æ¿ì ¼ø¹é»öÀ» ¶ì´Â°Ô º¸ÅëÀ̹ǷΠÇϾá»ö »ç¿ë glEnable(GL_LIGHTING); //Á¶¸í È¿°ú ¿¬»êÀ» ¼öÇàÀº ÇÑ´Ù°í ¼³Á¤ glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight); // ½ÇÁ¦ »ç¿ë glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); // ½ÇÁ¦ »ç¿ë GL_LIGHT0À¸·Î »ç¿ëÇϰڴٱ¸ ¾Ë·ÁÁÜ glLightfv(GL_LIGHT0, GL_SPECULAR, specular); glEnable(GL_LIGHT0); //GL_LIGHT0À» »ç¿ëÇϰڴٱ¸ ¾Ë·ÁÁÜ
±×·³ ÀçÁúÀº ÁöÁ¤ÇÏ´Â ÇÔ¼ö¸¦ ¾Ë¾Æº»´Ù. Ambient´Â ¹°Ã¼°¡ ÀºÀºÇÏ°Ô ³ªÅ¸³»´Â »öÀ̰í Diffuse´Â ¹°Ã¼ÀÇ ÁÖµÈ »ö»óÀÌ´Ù. SpecularÀº ¹°Ã¼°¡ ºû¿¡ Á¤¸éÀ¸·Î ºñÄ¥¶§ ³ªÅ¸³»´Â »öÀ̰í EmissonÀº Á¶±Ý ´Ù¸¥ °ÍÀ¸·Î ¹ß±¤»öÀÌ´Ù. Shiness´Â ºû³ª´Â Á¤µµ¸¦ ÀǹÌÇÑ´Ù. ¿©±âµÎ ¸¶Âù°¡Áö·Î »öÀ» ÁöÁ¤À» Çϰí ÇÔ¼ö¿¡ ±× »öÀ» ÁöÁ¤ÇÏ°í »ç¿ëÀ» ÇÏ¸é µÈ´Ù. GLfloat gray[] = {0.75f, 0.75f, 0.75f }; ´ÙÀ½À¸·Î ±¤¿ø(Light Source)°¡ ÇÊ¿äÇÏ´Ù. ½±°Ô ºûÀÌ
¾îµð¼ ºñÃ߳Ŀ¡ µû¶ó¼ ¹°Ã¼°¡ ºñÃß´Â ¸éÀÌ¸é ºûÀÌ ºñÃç¾ß ÇÏ°í ½±°Ô ¹ý¼±Àº Ç¥¸éÀ¸·Î µé¾î¿À´Â ºûÀÇ °¢µµ¿Í Ç¥¸éÀ¸·ÎºÎÅÍ
³ª°¡´Â ºûÀÇ °¢µµ(Ç¥¸éÀÌ ¹Ý»çÇÏ´Â ºûÀÇ ¼¼±â)¸¦ °è»êÇϱâ À§ÇÑ ¹ý¼±º¤Å͸¦ ±¸ÇÒ·Á¸é ¿ì¼± µÎ º¤ÅÍÀÇ ¿ÜÀû(µÎ º¤ÅÍ¿¡
¼öÁ÷ÀÎ º¤ÅÍ)¸¦ ±¸ÇÏ¸é µÈ´Ù. ±×·³ Æú¸®°ïÀ» ±¸¼ºÇÏ´Â ÃÖ¼Ò ´ÜÀ§ÀÇ »ï°¢ void CrossProduct(float point1[3], float point2[3],float
point3[3], float normal[3]) vector2[0] = point2[0] point3[0]; //µÎ º¤ÅÍÀÇ ¿ÜÀûÀ» ±¸ÇÏ¿©
normal[]¿¡ ÀúÀå void CrossProduct(float vector1[3], float vector2[3],
float normal[3]) high-level ÇÔ¼ö¸¦ ¾Ë¾Æ º¸ÀÚ. glNormal3f()ÀÌ´Ù. glNormal3f(1.0f, 0.0f, 0.0f); //ÀÌ ¸éÀº xÃàÀÇ ¾çÀÇ ¹æÇâÀ¸·Î 1ÀÇ Å©±â¸¦ °®´Â ¹ý¼± º¤ÅÍÀÌ´Ù.glVertex3f(1.0f, 1.0f, 1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f); glVertex3f(1.0f, 1.0f, -1.0f); //»ç°¢ÇüÀÇ Æú¸®°ïÀ» ¸¸µå´Âµ¥ +xÃà ¹æÇâÀ¸·Î ÇØ¼ ½Ã°è¹æÇâÀ¸·Î ȸÀüÇÒ°ÍÀÌ´Ù. OpenGLÀº ¹ý¼±À» Ç×»ó ´ÜÀ§ ¹ý¼±À¸·Î º¯È¯Çؼ °è»êÀ» ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â
glEnable(GL_NORMALIZE)°¡ Àִµ¥ ¼º´É»ó double VectorLength(float vector[3]) void Normalize(float normalVector[3]) for ( int idx =0; idx < 3; idx++) ±×·³ ¸¶Áö¸·À¸·Î ¼¼ Á¤Á¡¸¸ °¡Áö°í ´ÜÀ§ ¹ý¼±À» ¸¸µå´Â ÇÔ¼ö¸¦ Á¤ÀÇÇØ
º¸ÀÚ. ÀÌ Á¤µµ¸é ¹ý¼±º¤Å͸¦ ±¸ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë ¼ö°¡ ÀÖ´Ù. 1.¸ðµç °´Ã¼ÀÇ ¸ðµç Á¤Á¡µé¿¡ ´ëÇØ ¹ý¼±µéÀ» °è»êÇÑ´Ù.
±× ¹ý¼±µéÀº ±¤¿ø¿¡ ´ëÇÑ °´Ã¼ÀÇ »ó´ëÀûÀÎ ¹æÇâÀ» °áÁ¤ÇÑ´Ù. ±×·³ ´ëÃæ °³³äÀûÀ¸·Ð ºû¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ ³»¿ëÀ» ÀÌÇØÇß´Ù±¸º¸¸é
µÈ´Ù. ±âº»ÀûÀÎ ³»¿ëÀ¸·Î´Â ÀÌ Á¤µµ¸é ´Ù¸¥ ºÎºÐÀ» ÀÌÇØÇÏ
´ÙÀ½À¸·Î Áß¿äÇÑ °³³äÀÎ ÅØ½ºÃÄ ¸ÅÇο¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ. ¿ì¼± ÅØ½ºÃÄ ¸ÅÇÎÀ» ÇÒ·Á¸é À̹ÌÁöÆÄÀÏÀ» Çϳª ºÒ·¯
¿Í¾ß Çϴµ¥ º¸Åë º¸¸é bmpÆÄÀÏÀ» ¸¹ÀÌ »ç¿ëÇϰí Ã¥¿¡ ¿¹Á¦°¡ ³ª¿ÍÀÖ±â TargaÀ̹ÌÁö ÆÄÀÏÀº ¾ËÆÄ ä³ÎÀÌ ÀÖÀ¸¹Ç·Î ÅØ½ºÃÄ·Î
»ç¿ëÇϱⰡ ½±´Ù. tgaÆÄÀÏÀº ÆÄÀÏÇì´õºÎºÐ°ú ÆÄÀÏ µ¥ÀÌÅ͸¦ ¸Þ¸ð¸®¿¡
int LoadTGAFile(char *filename, TGAFILE *tgaFile) //tgaÆÄÀÏÀ»
ÀÐ¾î¼ À̹ÌÁö µ¥ÀÌÅ͸¦ ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ´Â ÇÔ¼ö // open the TGA
file // óÀ½ µÎ ¹ÙÀÌÆ®´Â
ÇÊ¿ä¾øÀ¸¹Ç·Î ³Ñ¾î°£´Ù. // À̹ÌÁö ŸÀÔÀ»
Àд´Ù.
2 =>¾ÐÃàµÇÁö
¾Ê´Â RGBÀ̹ÌÁö 3
=>¾ÐÃàµÇÁö ¾ÊÀº Èæ¹é À̹ÌÁö
// À̹ÌÁö ³Êºñ¿Í
³ôÀ̸¦ Àд´Ù.
// ºÒÇÊ¿äÇÑ 1¹ÙÀÌÆ®¸¦
°Ç³Ê ¶Ú´Ù. // colorMode
-> 3 = BGR, 4 = BGRA // À̹ÌÁö µ¥ÀÌÅ͸¦
³ÖÀ» ¸Þ¸ð¸® ÇÒ´ç // À̹ÌÁö µ¥ÀÌÅ͸¦
ÀÐ¾î µéÀ̱â // Opengl¿¡ ¸Â°Ô
BGRÀ» RGB·Î ±³Ã¼ÇÑ´Ù. // close the
file return 1; TGAFILE *myTGA; //±¸Á¶Ã¼¸¦ °´Ã¼¸¦ »ý¼ºÇØ ÁÖ±¸.. ±×·³ ÀÌÁ¦ tgaÀ̹ÌÁöµµ Áغñ°¡ µÇ¾î ÀÖÀ¸´Ï ÅØ½ºÃÄ ¸ÅÇÎÀÇ ¹æ¹ýµé¿¡
´ëÇØ¼ ¾Ë¾Æº¸ÀÚ. ±×³É °£´ÜÇÏ°Ô ¾î¶² ÇÔ¼öµéÀÌ ¾î¶² ±â´ÉÀ» ÇØ¼ ¾î¶»°Ô Æú¸®°ï¿¡
À̹ÌÁö°¡ ¹ÙÀεùµÇ´ÂÁö¿¡ ´ëÇØ¼ ¾Ë¾Æº»´Ù. glEnable(GL_TEXTURE_2D); // 2D ÅØ½ºÃĸµÀ» Çϰڴٱ¸ ¾Ë·ÁÁÜ // bmpÆÄÀÏÀ»
ÀÐ¾î µéÀÓ glGenTextures(1,
&texture); //
ÅØ½ºÃݴü¸¦ »ý¼º½ÃŲ´Ù. //1¹øÂ° ¸Å°³º¯¼ö
=>ÅØ½ºÃĸµÀº 2D»ç¿ëÇϰڴÙ. // ÅØ½ºÃÄ À̹ÌÁö¸¦ ÀÐ¾î µéÀδÙ.
glTexImage2D()¿Í glReadPixels()ÇÔ¼ö°¡ Àִµ¥ glReadPixels()´Â
ÀßÀº ¸ð¸£°ÚÁö¸¸ ÁÂÇ¥°ª¿¡ ÀÏÀÏÀÌ ¸ÂÃß¾îÁÖÁø ¾ÊÀº°Å ´ÙÀ½À¸·Î ´ÙÁß ÅØ½ºÃĸµ¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸ÀÚ. ¸»±×´ë·Î µÎ °³ÀÇ ÅØ½ºÃÄ À̹ÌÁö¸¦ °ãÄ¡°Ô ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ºÎºÐÀº
ÇöÀç ½Ã½ºÅÛ¿¡¼ Áö¿øÀÌ µÇ´ÂÁö¿¡ ´ëÇØ¼ ¸ÕÀú È®ÀÎÀ» ÇÑ GL_EXTENSIONSÀÎÀÚ³ª gluCheckExtension()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿©
ÇöÀçÀÇ ±×·¡ÇÈ Ä«µå°¡ GL_ARB_multitexture¶ó´Â È®Àå 1.´ÙÁß ÅØ½ºÃĸµÀÇ Áö¿ø ¿©ºÎ¸¦ È®ÀÎ ±×·³ 1¹øÀº ´ëÃæ À§¿¡¼ ÇѰű¸ ´ÙÀ½À¸·Î È®Àå ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ¾ò¾î¾ß ÇÑ´Ù .ÇÔ¼ö´Â wglGetProcAddress()ÀÌ´Ù. glMultiTexCoordifARB(´ÙÁß ÅØ½ºÃĸµÀ» À§ÇÑ ÅØ½ºÃÄ ÁÂÇ¥µéÀ»
ÁöÁ¤),glActiveARB(ÅØ½ºÃÄ ´ÜÀ§¸¦ ¼³Á¤) 3.ÅØ½ºÃÄ ´ÜÀ§µéÀ» ¼³Á¤ÇÏ´Â ºÎºÐ¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸ÀÚ. ÇöÀç ÅØ½ºÃÄ
´ÜÀ§´Â glActiveTextureARB()ÇÔ¼ö·Î ¼±ÅÃÇÑ´Ù. 4.ÅØ½ºÃÄ ÁÂÇ¥ÀÇ ÁöÁ¤. ´ÙÀ½À¸·Î ºí·»µù°ú ¾È°³ È¿°ú¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ºí·»µùÀÌ¶ó±¸ Çϸé ÀÌ¹Ì È¸é»ó¿¡ ±×·ÁÁø Çȼ¿ÀÇ »ö°ú ÀÌÁ¦ ¹Ù·Î °°Àº À§Ä¡¿¡ ±×·ÁÁú Çȼ¿ÀÇ »öÀÇ Á¶ÇÕÇÏ´Â ¹æ½ÄÀÌ´Ù. ¾î¶²½ÄÀ¸·Î »ö»óÀ» Á¶ÇÕÇÏ´Â Áö´Â ¾ËÆÄ°ª°ú ºí·£µù ÇÔ¼ö¿¡ ÀÇÇØ Á¤ÇØÁø´Ù. Áö±Ý±îÁö »ö»óÀ» ÁöÁ¤ÇÏ´Â ¹æ½ÄÀ¸·Î GL_RGB¸¦ »ç¿ëÇß¾ú´Âµ¥ ¿©±â¿¡´Â ¾ËÆÄ°ªÀÌ ¾ø´Ù. ¾ËÆÄ°ªÀÇ Ãß°¡¸¦ À§ÇØ GL_RGBA¸¦ »ç¿ëÇÒ¼öÀÖ´Ù. ±×¸®°í ¾ËÆÄ°ªÀ» Æ÷ÇÔÇÑ »ö»óÀ» ÁöÁ¤Çϱâ À§ÇØ glColor3f ´ë½Å glColor4f¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ºí·£µù °ø½ÄÀÌ Àִµ¥ ±×°Ç º°·ç Áß¿äÇÑ°Ô ¾Æ´Ñ°Å °°´Ù. ±×·³ ÄÚµù ºÎºÐÀ» Çѹø µû¶ó°¡ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. glEnable(GL_CULL_FACE); °ÅÀÇ ¸ðµç ºÎºÐ¿¡¼ ¸éÀÇ ¾Õ¸é¸¸±×¸®±¸ µÞ¸éÀ» ±×¸®Áö ¸»¶ó´Â ÀÌ ÇÔ¼ö¸¦ »ç¿ëÀ» Çϴµ¥ ÀÌ·¯¸éºí·£µùÈ¿°ú¸¦ ±¸ÇöÀ» ÇÒ ¼ö°¡ ¾ø´Ù. ±×·¡¼ Á¦°Å¸¦ ÇÑ´Ù. ½±°Ô ºí·»µùÀº ¾Õ¸é¿¡ Åõ¸íµµ¸¦ ÁÖ¾î¼ µÞ¸éÀÌ ºñÃß°Ô Çϱâ À§ÇÑ ¹æ ¹ýÀ̱⠶§¹®ÀÌ´Ù. glEnable(GL_BLEND); //ºí·»µù ½ÃÀÛ ´ÙÀ½À¸·Î ¾È°³¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸ÀÚ. OpenGL¿¡¼ Á¦°øÇÏ´Â ¾È°³ÀÇ Á¾·ù´Â 3°¡Áö°¡ Àִµ¥ »ç½Ç 2°¡Áö·Î ±¸ºÐµÈ´Ù. Çϳª´Â GL_EXP¿Í GL_EXP2ÀÌ°í ´Ù¸¥ Çϳª´Â GL_LINEARÀÌ´Ù. GL_EXP¿Í GL_EXP2´Â ¹Ðµµ¶ó´Â °ªÀ» ÀÌ¿ëÇØ¼ ȸé Àüü¿¡ ÁöÁ¤µÈ ¾È°³ÀÇ »öÀ¸·Î ¸¶Ä¡ ÀÚ¿íÇÑ ¿¬±â ¾È¿¡ ¹°Ã¼µéÀÌ ³õ¿©ÀÖ´Â µíÇÑ È¿°ú¸¦ ³½´Ù. GL_LINEARÀº ¾È°³°¡ ÀÌÁ¦ ¸· ½ÃÀ۵Ǵ ±íÀÌ¿Í ¾È°³°¡ ¿ÏÀüÇÏ°Ô µéÀÌ¿öÁ®¼ ´õ ÀÌ»ó ¹°Ã¼°¡ º¸ÀÌÁö ¾ÊÀ» ±íÀ̸¦ ÁöÁ¤ÇÔÀ¸·Î½á »ç½Ç °¡Àå ½ÇÁ¦ÀûÀÎ ¾È°³ È¿°ú¸¦ ¿¬ÃâÇÒ ¼ö ÀÖ´Ù.GLfloat fogColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };//¸ÕÀú ¾È°³ »ö ÁöÁ¤ glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //¹è°æ»öµµ ¾È°³»ö¿¡ ¸ÂÃá´Ù. ´ÙÀ½¿¡ initGL¿¡¼ Ãß°¡ÇؾßÇÒ °ÍÀº ¾È°³¿¡ ´ëÇÑ ¼³Á¤°ªµéÀÌ´Ù. ´ÙÀ½ÀÇ Äڵ带 Ãß°¡ÇÏÀÚ. glFogi(GL_FOG_MODE, GL_LINEAR); // ´ÙÀ½À¸·Î OpenGLÀÇ ¹öÆÛ¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸ÀÚ. ¹öÆÛ¶ó±¸
ÇÏ¸é º¸Åë µ¥ÀÌÅ͸¦ ÀÓ½ÃÀûÀ¸·Î ´ã¾Æ ³õ´Â ÀúÀå¼ÒÀÌ´Ù. ±×·¯¸é ÀϹÝÀûÀ¸·Î
¹öÆÛ¶ó´Â °³³ä°ú OpenGL¿¡¼ OpenGL¿¡¼
¹öÆÛ¶ó±¸ Çϸé ÀϹÝÀûÀ¸·Î »ö»ó ¹öÆÛ¸¦ ¶æÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ÇÏÁö¸¸
º¸Åë »ö»ó¹öÆÛ´Â ȸ鿡 ³ªÅ¸³¯ ¾ÕÀÇ
µÎ ¹öÆÛ´Â ±×·±´ë·Î ÇÔ¼ö³ª ÀϹÝÀûÀÎ ¹æ¹ýÀ» À§¿¡¼ ¸ðµÎ ´Ù·é ÆíÀÌ´Ù.
ÇÏÁö¸¸ ½ºÅÙ½Ç ¹öÆÛ¿Í ´©Àû ¹öÆÛ¿¡ °üÇØ ¿ì¼±
½ºÅÙ½Ç ¹öÆÛ´Â z¹öÆÛ(±íÀÌ ¹öÆÛ)¿Í À¯»çÇÑ Á¡ÀÌ ¸¹ÀÌ ÀÖÁö¸¸ z¹öÆÛ·Î´Â
ºÒ°¡´ÉÇÑ È¿°ú¸¦ ±¸ÇöÀ» ÇÑ´Ù. PIXELFORMATDESCRIPTORÀÇ
cStencilBits = 2;¸¦ Çϸé 2ºñÆ®ÀÇ ½ºÅÙ½Ç ¹öÆÛ°¡ »ý±â´Â °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î
´©Àû ¹öÆÛ´Â ÇϳªÀÇ ¹öÆÛ¿¡ Àå¸éµéÀ» ¿©·¯¹ø ·£´õ¸µÇÑ´Ù ±×·¯¸é °¢ ·£´õ¸µ¿¡¼
»ý±ä Çȼ¿µéÀÌ ´©Àû ¹öÆÛ ÀÌ»óÀ¸·Î
±×³É ±âº»ÀûÀÎ ¹æ¹ýµé¿¡ ´ëÇÑ ³»¿ëÀ» ¸¶¹«¸® ÇÏ·Á±¸ ÇÑ´Ù. ´ÙÀ½À¸·Î
¾Ë¾Æ µÎ¾î¾ß ÇÏ´Â °³³äÀÌ º¹ÀâÇÑ Æú¸® |