|
|
OpenGL Game Programming
¿ø¼ »çÀÌÆ® - ¼Ò½º ÄÚµå, °¡°Ý °Ë»ö Â÷·Ê [+]
¹ø¿ª ¹× ÆíÁý ¿À·ù¹ø¿ª¼ ÃÊÆÇÀº ¿ø¼ »çÀÌÆ®ÀÇ 2001³â 9¿ù ¿À·ù Á¤º¸¸¦ ¹Ý¿µÇÑ °ÍÀÔ´Ï´Ù. 2Àå 63p (2002-11-03)±×¸² 2.3ÀÇ PeakMessage()´Â PeekMessage()ÀÇ ¿ÀŸÀÔ´Ï´Ù. 2Àå 67p (2002-11-03)ÄÚµå Á¦ÀÏ ¾Æ·¡ if ¹®¿¡¼ ´Ý´Â °ýÈ£°¡ ºüÁ³½À´Ï´Ù. if (msg.message == WM_QUIT ) 3Àå 96p º¤ÅÍ µ¡¼À °ø½Ä (2005-09-29)À ºÎºÐ¿¡ A(Xa,Ya,Za) + B(Xb,Yb,Zb) = C(Xa + Xb, Ya + Yb, Za + Xb)¶ó´Â °ø½ÄÀÌ ³ª¿À´Âµ¥ CÀÇ ¸¶Áö¸· ¼ººÐÀº Za + Xb°¡ ¾Æ´Ï¶ó Za+ZbÀÔ´Ï´Ù. A(Xa,Ya,Za) + B(Xb,Yb,Zb) = C(Xa + Xb, Ya + Yb, Za + Zb) 3Àå 107pÁß°£ÀÇ 'Çà·ÄÀÇ °áÇÕ'Àº 'º¯È¯ÀÇ °áÇÕ'À̶ó°í ÇØ¾ß ¸Â½À´Ï´Ù. pressf1 ´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù. 3Àå 113p ¿ø±Ù º¯È¯ Çà·Ä| 1 0 0 0 | | x | | x | | 0 1 0 0 | * | y | = | y | | 0 0 0 1/focus | | z | | -1 | | 0 0 -1 0 | | 1 | | z/focus | ¶ó°í µÇ¾îÀִµ¥, | 1 0 0 0 | | x | | x | | 0 1 0 0 | * | y | = | y | | 0 0 0 -1 | | z | | -1 | | 0 0 1/focus 0 | | 1 | | z/focus | ¶ó¾ß ¸Â½À´Ï´Ù. pressf1´Ô°ú zungzu ´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù. 6Àå 200-201p (2001.11.26)CrossProduct ÇÔ¼öµéÀÇ ¼Ò½º Äڵ忡 - Ç¥½Ã°¡ ºüÁ³½À´Ï´Ù. ±×¸®°í normal[0] = ... ºÎºÐÀÇ ¸¶Áö¸· ºÎºÐ »öÀÎÀÌ Æ²·È½À´Ï´Ù. vector[2]°¡ ¾Æ´Ï¶ó vector[1]À̾î¾ß ÇÕ´Ï´Ù. Á¤È®ÇÑ ¼Ò½º´Â:
void CrossProduct(float point1[3], float point2[3], float point3[3], float normal[3])
{
float vector1[3], vector2[3];
// ¿ÜÀûÀ» ±¸Çϴµ¥ ÇÊ¿äÇÑ µÎ °³ÀÇ º¤Å͵éÀ» ¸¸µé¾î³½´Ù.
vector1[0] = point1[0] - point2[0];
vector1[1] = point1[1] - point2[1];
vector1[2] = point1[2] - point2[2];
vector2[0] = point2[0] - point3[0];
vector2[1] = point2[1] - point3[1];
vector2[2] = point2[2] - point3[2];
// µÎ º¤ÅÍÀÇ ¿ÜÀûÀ» ±¸ÇÏ°í ±×°ÍÀ» normal[]¿¡ ÀúÀåÇÑ´Ù.
normal[0] = vector1[1]*vector2[2] - vector1[2]*vector2[1];
normal[1] = vector1[2]*vector2[0] - vector1[0]*vector2[2];
normal[2] = vector1[0]*vector2[1] - vector1[1]*vector2[0];
}
void CrossProduct(float vector1[3], float vector2[3], float normal[3])
{
// µÎ º¤ÅÍÀÇ ¿ÜÀûÀ» ±¸ÇÏ°í ±×°ÍÀ» normal[]¿¡ ÀúÀåÇÑ´Ù.
normal[0] = vector1[1]*vector2[2] - vector1[2]*vector2[1];
normal[1] = vector1[2]*vector2[0] - vector1[0]*vector2[2];
normal[2] = vector1[0]*vector2[1] - vector1[1]*vector2[0];
}
202p ¾Æ·¡ÂÊ ¹è¿ Á¤ÀÇ ¿ÀŸ202p ¾Æ·¡ÂÊ normalVector ¹è¿ Á¤ÀÇ Áß
GLfloat normalVector = {0.0f, 1.0f, 0.0f};
¿¡¼ []°¡ ºüÁ³½À´Ï´Ù. normalVector[] = ... ¶Ç´Â normalVector[3] = ... °¡ ¸Â½À´Ï´Ù. ÂüÂü´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù. p.209 ÀÔ¹æÃ¼ÀÇ ¾Õ¸é ¹ý¼± (2003-01-09)¿¹¸¦ µé¾î¼ ÀÔ¹æÃ¼ÀÇ ¾Õ¸éÀÇ ¹ý¼±Àº (0, 1, 0)À¸·Î ÁöÁ¤µÇ´Âµ¥, ....ÀǹÌÀÌ´Ù. (0, 1, 0)Àº ´ÜÀ§ ¹ý¼±À̹ǷÎ..." ¿¡¼ (0, 1, 0)ÀÌ ¾Æ´Ï¶ó (0, 0, 1)À̾î¾ß ±× ¹®ÀåÀÇ "¾çÀÇ Z ¹æÇâÀ»..."°ú ÀÏÄ¡ÇÕ´Ï´Ù. p.245 ÄÚµå (2003-01-09)// 2D ºäÆ÷Æ®¸¦ ¼³Á¤ glOrtho(0.0f, width 1.0, 0.0, height 1.0, 1.0, 1.0); ¿¡¼ - ±âÈ£°¡ ºüÁ³½À´Ï´Ù. ´ÙÀ½°ú °°ÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù. glOrtho(0.0f, width '''-''' 1.0, 0.0, height '''-''' 1.0, 1.0, 1.0); p.260 Targa ÆÄÀÏ Çì´õ ±¸Á¶Ã¼crowy´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù... short int colorMapEntrySize ÀÇ ÇüÀÌ short int °¡ ¾Æ´Ï¶ó unsigned char¿©¾ß ÇÕ´Ï´Ù. ´Ü ±× µÚ¿¡ ³ª¿À´Â Çì´õ¸¦ Àд ¼Ò½º ÄÚµå´Â Á¤È®ÇÕ´Ï´Ù(1 ¹ÙÀÌÆ®¸¦ ÀнÀ´Ï´Ù). p. 262 LoadTGAFile ÇÔ¼öÀÇ ÁÖ¼® ¿À·ù ( 2002-08-13 )Áß°£ÀÇ //ºÒÇÊ¿äÇÑ 13 ¹ÙÀÌÆ®´Â °Ç³Ê¶Ú´Ù. ¿¡¼ 13ÀÌ ¾Æ´Ï¶ó 9 ÀÔ´Ï´Ù. ±× ¾Æ·¡ Äڵ带 º¸¸é ¾Æ½Ã°ÚÁö¸¸ 2 ¹ÙÀÌÆ® ³× °³¿Í 1 ¹ÙÀÌÆ® Çϳª¸¦ °Ç³Ê ¶Ù¹Ç·Î 9 ¹ÙÀÌÆ®ÀÔ´Ï´Ù... p.277 ¿ÀŸ Çϳª... (2002.01.29)itsuki ´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù. p277 Áß¿¡¼ GL_TEXTURE_ID´Â GL_TEXTURE_1DÀÇ ¿ÀŸÀÔ´Ï´Ù. I°¡ ¾Æ´Ï¶ó ¼ýÀÚ 1ÀÔ´Ï´Ù. p.283 ÁÖ¼® ºÎºÐitsuki ´ÔÀÌ ¾Ë·ÁÁּ̽À´Ï´Ù. 289 ÆäÀÌÁö ÄÚµåÀÇ ÁÖ¼®¿¡ ¿ÀŸ°¡ Àִµ¥, ´ÙÀ½°ú °°ÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù.(°£´ÜÈ÷ ¸»ÇÏ¸é ¿ÞÂÊ ¾Æ·¡ºÎÅÍ ¹Ý½Ã°è ¹æÇâÀÔ´Ï´Ù...)
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5f, 0.5f, 0.5f); // ¿ÞÂÊ ¾Æ·¡
glTexCoord2f(1.0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.5f); // ¿À¸¥ÂÊ ¾Æ·¡
glTexCoord2f(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f); // ¿À¸¥ÂÊ À§
glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f); // ¿ÞÂÊ À§
glEnd();
10Àå 370p MD3 ¾ð±Þ ºÎºÐ370p Á¦ÀÏ Ã³À½ ¹®´Ü¿¡ Quake3°ú MD3 ÆÄÀÏ¿¡ ´ëÇÑ ¾ð±ÞÀÌ Àִµ¥ ¿À·ùÀÔ´Ï´Ù. Ã¥¿¡ ½ÇÁ¦·Î ³ª¿À´Â °ÍÀº Quake2ÀÇ MD2 ÆÄÀÏ ´Ù·ç±âÀÔ´Ï´Ù.. 15Àå 482p ¼Ò½º ¿À·ù ( 2002-08-14 )Áß°£ ºÎºÐ¿¡ // 3D °ø°£ »óÀÇ... ... pos.y = GetHeight(pos.x, pos.z) + size 0.5f; size¿Í 0.5f »çÀÌ¿¡ - °¡ ºüÁ³½À´Ï´Ù. Á¦´ë·ÎµÈ ÄÚµå´Â pos.y = GetHeight(pos.x, pos.z) + size - 0.5f; 18ÀåÀÇ MD2 ¸ðµ¨ ·Îµù639 p¸¦ ºñ·ÔÇÑ °÷°÷¿¡ MD2 ¸ðµ¨ÀÇ »ï°¢Çü »öÀÎ ÀúÀå ºÎºÐÀÌ ³ª¿ÀÁÒ... 639p¸¦ º¸¸é for(i = 0; inumTris; i++) ·çÇÁ°¡ for(j = 0; ..) ·çÇÁ ¾È¿¡ µé¾î Àִµ¥, ·çÇÁ ³»ºÎ¸¦ ÀÚ¼¼È÷ º¸¸é j´Â ÀüÇô ¾²ÀÌÁö ¾Ê½À´Ï´Ù. for (j=0;..) ·çÇÁ´Â ¾µµ¥¾øÀÌ ½Ã°£¸¸ ³¶ºñÇÏ´Â °ÍÀ̹ǷΠÁ¦°ÅÇØ ¹ö¸®¼¼¿ä.. p 807 ¿ªÀÚ Ãßõ KGDA ȨÆäÀÌÁö ÁÖ¼Ò ( 2002.01.29)¿ª½Ã itsuki ´ÔÀÌ ¾Ë·Á Áּ̽À´Ï´Ù. http://www.kdga.or.kr°¡ ¾Æ´Ï¶ó http://www.kgda.or.kr ÀÔ´Ï´Ù. 10Àå, 15Àå cacti ¿¹Á¦ ´Ù¿î Çö»ó (2002-01-30)ÀúÀÚÀÇ ¾ê±â·Î´Â ÄÚµå Áß
glLockArraysEXT(0, MAP_X * MAP_Z * 6);
À̰ÍÀ» ÀÌ·¸°Ô ¹Ù²Ù¸é ÇØ°áÀÌ µÈ´Ù°í ÇÕ´Ï´Ù.
glLockArraysEXT(0, MAP_X * MAP_Z);
(Âü°í: http://glbook.gamedev.net/errata.asp ) 20 Àå ¿¹Á¦ simpengine.h¿ø¼ »çÀÌÆ®¿¡¼ ´Ù¿î¹ÞÀº ¼Ò½º ÄÚµå Áß simpengine.hÀÌ ¾ø½À´Ï´Ù. Ã¥¿¡ ³ª¿Â °ÍÀ» Àû´çÈ÷ ÀÔ·ÂÇÑ °ÍÀ» OgpSimpEngineHeader ÆäÀÌÁö¿¡ ¿Ã·Á µÎ¾ú½À´Ï´Ù. 17, 21Àå Űº¸µå ÄÚµå ¹ö±×17, 21Àå¿¡ ³ª¿À´Â ÄÚµåÀÇ KeyDown, KeyUp ¸Þ¼µåÀÇ ¸Å°³º¯¼ö°¡ char ÇüÀε¥ char´Â ºÎÈ£ ÀÖ´Â Çü½ÄÀ̱⠶§¹®¿¡ 127 ÀÌ»óÀÇ °ªÀ» À½¼ö·Î ÇØ¼®ÇÕ´Ï´Ù. ±×·¡¼ Ű Äڵ尡 127 ÀÌ»óÀΠ۵éÀ» Á¦´ë·Î ó¸®ÇÏÁö ¸øÇÕ´Ï´Ù. À̸¦ ÇØ°áÇÏ·Á¸é ¸Å°³º¯¼öµéÀÇ Çü½ÄÀ» unsigned char·Î ¹Ù²ã¾ß ÇÕ´Ï´Ù. ±âŸ Á¤º¸MD2 ÆÄÀÏ¿¡ ´ëÇØ^^ MD2 ÆÄÀÏÀÌ °£´ÜÇÏ°í ´Ù·ç±âµµ ÆíÇØ¼ ÁÁÁÒ. ±×·¯³ª ÄùÀÌÅ© 2 ÀÚü°¡ Çѹ° °¬À¸´Ï... MD2´Â ij¸¯ÅÍ ÆÄÀÏ ´Ù·ç´Â ¹ýÀ» ¿¬½ÀÇÏ´Â ¿ëµµ·Î¸¸ °øºÎÇϽðí, ½ÇÁ¦·Î ¹º°¡¸¦ ¸¸µå½Å´Ù¸é ÄùÀÌÅ© 2 ´ÙÀ½ ¼¼´ëÀÇ °ÔÀӵ鿡 ¾²ÀÌ´Â ÆÄÀϵéÀ» °øºÎÇϽñæ.. Àú´Â ¸Ó¸®, »óü, ÇÏü¸¦ µû·Î ¿òÁ÷ÀÏ ¼ö ÀÖ´Â ÄùÀÌÅ© 3ÀÇ MD3 ÂÊ¿¡ °ü½ÉÀÌ °©´Ï´Ù. ÀÌ·± °ÔÀÓ ¸ðµ¨ ÆÄÀϵ鿡 ´ëÇÑ Á¤º¸´Â °³¹ßÀÚ »çÀÌÆ®µéº¸´Ù´Â °ÔÀÌ¸Ó »çÀÌÆ®µé¿¡ ´õ ¸¹Àº µí Çϱ¸¿ä. ¶Ç MD2¸¦ ºñ·ÔÇÑ ¿©·¯ °ÔÀÓ Ä³¸¯ÅÍ ¸ðµ¨ÀÇ ÀÛ¼º¿¡ Æ¯ÈµÈ ¸ðµ¨¸µ µµ±¸µµ ÀÖ½À´Ï´Ù. °Ë»ö ¿£Áø¿¡¼ ?MilkShape ¸¦ ã¾Æº¸¼¼¿ä.... ±×¸®°í ÄùÀÌÅ© ÆÒ »çÀÌÆ®, ¸ðµå Á¦ÀÛ »çÀÌÆ®µµ ã¾Æ º¸½Ã±¸¿ä.. http://www.planetquake.com µîµî...
|
|