[Áöµð³ÝÄÚ¸®¾Æ]À̹ø¿¡´Â º»°ÝÀûÀ¸·Î °ÔÀÓ Äڵ带 »ìÆì º»´Ù. ¹é¹®ÀÌ ºÒ¿©ÀϰßÀ̶ó°í ½ÇÁ¦ Äڵ带 Á÷Á¢ ÀÛ¼ºÇÏ°í ½ÇÇàÇØ ºÁ¾ß ¾î¶² ½ÄÀ¸·Î 3D °ÔÀÓÀÌ Á¦À۵ǴÂÁö¸¦ ÀÌÇØÇÒ °ÍÀÌ´Ù. 3D °ÔÀÓÀÌ °ÑÀ¸·Î´Â ´Ù¼Ò È·ÁÇØ º¸ÀÏÁö ¸ô¶óµµ ½ÇÁ¦ Á¦ÀÛÀº ±×¸® È·ÁÇÏÁö ¾Ê´Ù. ¿ÀÈ÷·Á ¸¹Àº ¼öÀÛ¾÷À» ÇÊ¿ä·Î ÇÑ´Ù. ÇÏÁö¸¸ ±×·¸´Ù°í ÇØ¼ ÀÛ¾÷ ÀÚü°¡ Áö·çÇÏÁø ¾Ê´Ù. Çϳª¾¿ ¿Ï¼ºµÇ¾î°¡´Â ¸ð½ÀÀ» È®ÀÎÇÒ ¶§¸¶´Ù »õ·Î¿î ÈûÀÌ ¼Ú¾Æ³ª±â ¶§¹®ÀÌ´Ù.
À̹ø ÁÖÁ¦ÀÇ ¸¶Áö¸· ±Û¿¡ ÀÌ·¯ÇÑ ±â»ÝÀ» ½ÆÁö ¸øÇÏ´Â ¾Æ½¬¿òÀÌ ÀÖ´Ù. ¿Ö³ÄÇÏ¸é µð¹ö±ë°ú Çϳª¾¿ ±â´ÉÀÌ Ãß°¡µÇ´Â °ÍÀ» µå¶ó¸¶Æ½ÇÏ°Ô Ç¥ÇöÇÏ´Â °ÍÀº ÇÊÀÚÀÇ ´É·Â ÀÌ»óÀÇ °ÍÀ̶ó´Â »ý°¢ÀÌ µé±â ¶§¹®ÀÌ´Ù. ÀÛ¾÷ÇÏ´Â °ÍÀ» ´©±º°¡ Á¶±Ý¾¿ ÃëÀçÇÏ¿© Á¤¸®ÇÏ´Â °ÍÀ̶ó¸é ¸ð¸¦±î, ¿À·¡ ÀüÀÇ °³¹ß °úÁ¤À» ÇϳªÇϳª¾¿ À½¹ÌÇØ º¸¸é¼ ´Ù½Ã Á¤¸®Çϱâ¶õ ½±Áö°¡ ¾Ê´Ù. ±×·¡¼ »ý°¢ÇÑ °ÍÀÌ ±×³É Áö·çÇÏÁö¸¸ ÀÖ´Â ¼Ò½º¸¦ ¼³¸íÇØ º¸±â·Î °áÁ¤ÇÏ¿´´Ù. ¼Ò½º ÄÚµå´Â ±×·¸°Ô ¾î·Æ°Ô ÀÛ¼ºµÇ¾î ÀÖÁö ¾ÊÀ¸¸ç, ´©±¸³ª ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Â ¼öÁØÀÌ´Ù.
ÇÏÁö¸¸ ¸ð¹ÙÀÏ È¯°æ°ú 3D ȯ°æÀ» µ¿½Ã¿¡ ÀÌÇØÇϰí ÇÁ·Î±×·¡¹ÖÇÑ´Ù´Â °ÍÀÌ ±×¸® ½¬¿î Àϸ¸ÀÌ ¾Æ´Ï´Ù. ƯÈ÷ Ä«¸Þ¶ó ÀÛ¾÷À» ±¸ÇöÇÏ´Â °ÍÀº ¸Å¿ì ¼öÇÐÀûÀÎ ÀÌÇØ¸¦ ¹ÙÅÁÀ¸·Î ÇØ¾ß °¡´ÉÇÑ ÀÏÀÌ´Ù. ¹°·Ð PC ȯ°æÀÇ ¸¹Àº °ÔÀÓ °³¹ß SDK¿¡¼´Â ³Ê¹«³ª ´Ù¾çÇÑ ±â´ÉµéÀ» ½±°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Á¦°øÇØÁÖ°í Àֱ⠶§¹®¿¡ ¼öÇÐÀû ½Ç·Âº¸´Ù´Â Åø »ç¿ë¹ýÀ̳ª ½Ã³ª¸®¿À¿¡ ´õ ½Å°æÀ» ¾µ ¼ö ÀÖ°Ô ÇØÁֱ⵵ ÇÑ´Ù. ±×·¯³ª ¸ð¹ÙÀÏÀº ÀÏ´Ü Á¦ÇÑÀûÀΠȯ°æ¿¡¼ ÇàÇÏ´Â ÀÛ¾÷À̸ç, ¾Õ¼ ¼±ÇèÀûÀ¸·Î °³¹ßµÈ ¸ð¹ÙÀÏ 3D °ÔÀÓµµ Àü¹«ÇÑ ÇüÆíÀÌ´Ù. µû¶ó¼ ¾øÀ¸¸é ¸¸µé¾î¼ ÇÑ´Ù´Â »ý°¢À» ±âº»ÀûÀ¸·Î °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ ±â´ÉÀûÀ¸·Î ±¸ÇöÀÌ °¡´ÉÇÏ´Ù°í ÇÏ´õ¶óµµ ¼º´ÉÀ̳ª ´Ù¸¥ Á¦¾àÀÌ ÀÖÀ¸¸é ±× Á¦¾à ¾È¿¡¼ ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ß ÇÑ´Ù.
¸ð¹ÙÀÏ È¯°æÀÌ °¡Áö°í ÀÖ´Â ¾àÁ¡¿¡ ´ëÇÑ Çª³äÀº ÀÌ Á¤µµ·Î ÇØµÎÀÚ. ÀÌÁ¦ Áö·çÇÑ ÄÚµå ¼³¸í¿¡ µ¹ÀÔÇØ º¸ÀÚ. ÀÏ´Ü Çì´õ ÆÄÀÏÀ» »ìÆìº¸°í ¸ÞÀÎ ·çÇÁÀÇ ±¸¼º, °ÔÀÓ ÃʱâÈ, Űº¸µå ¾×¼Ç, ±×·¡ÇÈ ¾×¼Ç ¼øÀ¸·Î Äڵ带 ¼³¸íÇØ º¸°Ú´Ù. ±×¸®°í ÃÖÁ¾ÀûÀ¸·Î´Â ½ÇÇà °á°ú¸¦ ¼³¸íÇÏ´Â °ÍÀ¸·Î ¿¬À縦 ¸¶¹«¸®ÇÑ´Ù(ÀÌ¿Í °ü·ÃµÈ Áú¹® »çÇ×Àº www.g3d.co.kr¿¡ Á¢¼ÓÇϰųª e¸ÞÀÏ·Î Áֽøé Èû´ê´Â ´ë·Î ´äÀåÀ¸·Î µå¸®µµ·Ï ÇϰڴÙ).
G3 SDK¸¦ ÀÌ¿ëÇÑ ½ºÆäÀ̽ºÅ¥ºêÀÇ ÀüüÀûÀÎ °ÔÀÓ ÀÛ¼º ±¸¼ºµµ´Â <±×¸² 1>°ú °°´Ù. <±×¸² 1>ÀÇ ³»¿ëÀ» ¼ø¼´ë·Î ¼³¸íÇØ º¸¸é ´ÙÀ½°ú °°´Ù.
 | | <±×¸² 1> G3 SDK¸¦ ÀÌ¿ëÇÑ ÀüüÀûÀÎ °ÔÀÓ ±¸¼º È帧µµ |
1. °ÔÀÓ ¸®¼Ò½º¸¦ Á¦ÀÛÇÑ´Ù.
2. °ÔÀÓ¿¡ »ç¿ëÇÏ´Â º¯¼ö ¹× ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.
3. ÅØ½ºÃÄ ¹× À̹ÌÁö¸¦ ¼ÂÆÃÇÑ´Ù.
4. °ÔÀÓ ¸ÞÀÎ ·çƾÀ» ÀÛ¼ºÇÑ´Ù.
5. °ÔÀÓ ¸ÞÀÎ ·çÇÁÀÇ »ç¿ëÀÚ°¡ ÀÔ·ÂÇϴ Ű À̺¥Æ®¸¦ ó¸®ÇÑ´Ù.
6. °ÔÀÓ ¿î¿µ¿¡ ÇÊ¿äÇÑ Ãæµ¹ ¹× ·çƾÀ» ÀÛ¼ºÇÑ´Ù.
7. °ÔÀÓ »ó¿¡ º¸¿©ÁÙ ±×·¡ÇÈ ·çƾÀ» ¼³°èÇϰí ÀÛ¼ºÇÑ´Ù.
polygon/3d plane Generation
- ½ºÆäÀ̽º Å¥ºê »ó¿¡¼ º¸¿©ÁÖ´Â ¹°Ã¼¿Í Æò¸éÀ» º¸¿©ÁÖ´Â ºÎºÐÀ» ÀÛ¼ºÇÑ´Ù.
normal vector Generation
- ȸ鿡 º¸¿©ÁÙ Æò¸éÀÇ ¹æÇâÀ» ¼³Á¤ÇÑ´Ù.
Texture Binding(Texture Index)
- ȸ鿡 º¸¿©ÁÙ Æò¸é¿¡ ÀÔÇôÁú ÅØ½ºÃĸ¦ ¼±ÅÃÇÑ´Ù.
Texture Coordinate
- ȸ鿡 º¸¿©ÁÙ Æò¸é¿¡ ÅØ½ºÃĸ¦ ÀÔÈù´Ù.
DrawElements(3D °ø°£¿¡ Àû¿ë)
- 3D °ø°£¿¡ ¾Õ¿¡ ¼³¸íÇÑ µ¥ÀÌÅ͵éÀ» Àû¿ëÇÏ°í ±×·ÁÁØ´Ù.
OpenGL°ú ´Þ¸® OpenGL ES¿¡¼ ¹°Ã¼¸¦ ±×¸± ¶§ »ç¿ëÇÏ´Â ÇÔ¼öÀÌ´Ù.
3D Buffer Flipping
- 3D ¿µ¿ª ¹öÆÛ¸¦ LCD ȸ鿡 ±×·ÁÁØ´Ù.
2D Image Blitting
- ·ÎµùµÈ 2D À̹ÌÁö¸¦ ÇÊ¿äÇÑ ºÎºÐ¸¸ LCD¿¡ »Ñ·ÁÁØ´Ù(UI ºÎºÐ).
8. Sound ·çƾ ó¸®
- Ű À̺¥Æ® ¹× °ÔÀÓ ·çƾÀÇ º¯È¿¡ µû¸¥ »ç¿îµå¸¦ Ç÷¹À̽ÃŲ´Ù.
9. °ÔÀÓ Á¾·áÇÑ´Ù.
10. ¸®¼Ò½º¸¦ ÇØÁ¦ÇÑ´Ù.
11. ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù.
ÀÌ¿Í °°Àº ÀýÂ÷·Î °ÔÀÓÀ» ÀÛ¼ºÇÑ´Ù. ƯÈ÷ 2D °ÔÀÓÀÌ ¾Æ´Ï¶ó 3D °ÔÀÓÀÎ °æ¿ì¿¡´Â ȸ鿡 3D ¹°Ã¼¸¦ ¾î¶»°Ô ¸¸µé¾î°¡¸ç, ¸¸µé¾îÁø ¹°Ã¼¿¡ À̹ÌÁö¸¦ ¾î¶² ½ÄÀ¸·Î ÀÔÇô°¡´ÂÁö¿¡ ´ëÇØ¼ ÁýÁßÀûÀ¸·Î ¾Ë¾Æº¸±â ¹Ù¶õ´Ù. À̹ø È£¿¡¼µµ ÀÌ ºÎºÐ¿¡ ´ëÇØ¼µµ ÃæºÐÈ÷ ¾ð±ÞÇ߱⠶§¹®¿¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
Çì´õ ÆÄÀÏ
ÀÚ, ¿ì¼± Çì´õ ÆÄÀÏÀ» »ìÆìº¸ÀÚ. Çì´õ ÆÄÀÏ¿¡´Â °ÔÀÓ¿¡ ÇÊ¿äÇÑ °ÔÀÓ ½ºÅÜÀÇ »ó¼ö, ŸÀÏ ¸ÊÀÇ ¼Ó¼º, Vertex, Coords, Index, Normal µîÀÇ °¢Á¾ Á¤º¸°¡ µé¾î ÀÖ´Ù. Çì´õ ÆÄÀϸ¸ º¸´õ¶óµµ °ÔÀÓ ÇÁ·Î±×·¡¹Ö ½Ç·ÂÀÌ ¶Ù¾î³ µ¶ÀÚµéÀº ¾î´À Á¤µµ °ÔÀÓÀÇ ¼öÁØÀ» ÆÄ¾ÇÇÒ ¼ö ÀÖÀ»Áöµµ ¸ð¸£°Ú´Ù. »ó¼ö´Â °ÔÀÓÀÇ »óŸ¦ ³ªÅ¸³»´Â °ÍÀ¸·Î, ÀÎÆ®·Î(Intro), ij¸¯ÅÍ ¼±ÅÃ, ½ÇÁ¦ °ÔÀÓ, °ÔÀÓ Á¾·á µîÀÇ »óŸ¦ Á¤ÀÇÇÏ¸ç °ÔÀÓÀÇ Àü¹ÝÀûÀÎ È帧À» Á¦¾îÇÏ°Ô µÈ´Ù.
<¸®½ºÆ® 1>ÀÇ FirstStage[8][8]¿¡´Â ŸÀÏ ¸Ê¿¡ ÇÊ¿äÇÑ Á¤º¸ µ¥ÀÌÅͰ¡ µé¾î ÀÖ´Ù. À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ Ã¹ ¹øÂ° ½ºÅ×ÀÌÁö¿¡ ´ëÇÑ Å¸ÀÏ Á¤º¸ µ¥ÀÌÅ͸¦ °¡Áö°í Àִµ¥, °¢ ŸÀϸ¶´Ù ´Ù¸¥ °ªµéÀ» ¼³Á¤ÇÔÀ¸·Î½á ¸ÊÀ» ±¸¼ºÇÒ ¼ö ÀÖ´Ù. ŸÀÏ¿¡ Àû¿ëµÇ´Â ¼Ó¼ºÀº ´ÙÀ½°ú °°´Ù.
| <¸®½ºÆ® 1> ù ¹øÂ° ½ºÅ×ÀÌÁöÀÇ Å¸ÀÏ ¸Ê | | | |
static short FirstStage[8][8] = { 0,0,0,0,0,0,0,0,
0,9,2,9,9,2,9,0,
0,2,0,2,4,0,2,0,
0,2,0,2,2,2,2,0,
0,2,0,2,0,2,0,0,
0,2,2,0,2,2,2,0,
0,0,2,2,2,0,2,0,
0,0,0,0,0,0,0,0 };
| |  |
0 = À§Çè Áö¿ª
1 = Á¤º¹ÇÑ Áö¿ª
2 = Á¤º¹ÇØ¾ß ÇÒ Áö¿ª
4 = ºñȰ¼ºÈµÈ ½ºÅ×ÀÌÁö Ŭ¸®¾î Áö¿ª
5 = Ȱ¼ºÈµÈ ½ºÅ×ÀÌÁö Ŭ¸®¾î Áö¿ª
9 = À¯È¿ Áö¿ª(»çÀü ¸ð¾çÀÇ ÅØ½ºÃ³)
ŸÀÏ ¸Ê¿¡ ´ëÇÑ ¼Ó¼ºµéÀ» Á¤ÀÇÇßÀ¸´Ï ÀÌÁ¦ ŸÀÏ ¸Ê¿¡ ´ëÇÑ ½ºÅ×ÀÌÁö ¸ÊµéÀÇ vertex À§Ä¡ Á¤º¸¸¦ Á¤ÀÇÇØ º¸ÀÚ. ½ºÅ×ÀÌÁö ¸ÊÀÇ Á¤Á¡µéÀÇ À§Ä¡´Â cubeVerticesXX[][]¸¦ ÅëÇØ¼ ÇÒ ¼ö ÀÖ´Ù. Áï cubeVerticesXX´Â ŸÀÏ ¸Ê(FirstStage[][])ÀÇ vertex À§Ä¡¸¦ ÀǹÌÇϸç, cubeVertices00´Â FirstStage[0][0]¿Í µ¿ÀÏÇϰí, cubeVertices01Àº FirstStage[0][1]¿Í µ¿ÀÏÇÏ´Ù.
| <¸®½ºÆ® 2> °¢ ŸÀϵéÀÇ Vertex List | | | |
GLfloat cubeVertices00[] = -1.5f, -1.0f, -4.0f, -1.5f, -1.0f, -3.0f, -0.5f, -1.0f, -3.0f, -0.5f, -1.0f, -3.0f, -0.5f, -1.0f, -4.0f, -1.5f, -1.0f, -4.0f
GLfloat cubeVertices01[] = -0.5f, -1.0f, -4.0f, -0.5f, -1.0f, -3.0f, 0.5f, -1.0f, -3.0f, 0.5f, -1.0f, -3.0f, 0.5f, -1.0f, -4.0f, -0.5f, -1.0f, -4.0f
GLfloat cubeVertices02[] = 0.5f, -1.0f, -4.0f, 0.5f, -1.0f, -3.0f, 1.5f, -1.0f, -3.0f, 1.5f, -1.0f, -3.0f, 1.5f, -1.0f, -4.0f, 0.5f, -1.0f, -4.0f
GLfloat cubeVertices03[] = 1.5f, -1.0f, -4.0f, 1.5f, -1.0f, -3.0f, 2.5f, -1.0f, -3.0f, 2.5f, -1.0f, -3.0f, 2.5f, -1.0f, -4.0f, 1.5f, -1.0f, -4.0f
....
....
....
| |  |
±× ¿ÜÀÇ °ÔÀÓ¿¡ °¢Á¾ ÇÊ¿äÇÑ µ¥ÀÌÅ͵éÀ» <¸®½ºÆ® 3>°ú °°ÀÌ Á¤ÀÇÇÑ´Ù.
| <¸®½ºÆ® 3> °¢ ŸÀÏÀÇ µ¥ÀÌÅÍ °ªµé | | | |
// ÅØ½ºÃÄ ¸ÊÇÎÀÇ CoordÀÇ À§Ä¡ GLfloat cubeCoords[] = { // Coords 2f 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };// DrawElements ½Ã ÀÎÅØ½º°ª GLushort cubeIndices[] = { 0, 1, 2, 3, 4, 5 } // FaceÀÇ NormalÀÇ °ª GLfloat cubeNormals[] = { /* Normals 3f*/ 0.0f,-1.0f, 0.0f // Bottom Face }
// ½ºÅ×ÀÌÁö ¸ÊÀÇ ¹öÅØ½º °ªµéÀÇ Àç¹è¿GLfloat *VertexName[8][8] = { cubeVertices00, cubeVertices01, cubeVertices02, cubeVertices03,..........cubeVertices70, cubeVertices71, cubeVertices72, cubeVertices73, cubeVertices74, cubeVertices75, cubeVertices76, cubeVertices77 };
| |  |
<¸®½ºÆ® 4>´Â g3main.c¿¡ ¼±¾ðµÇ¾î ÀÖ´Â °ÔÀÓ ·ÎÁ÷¿¡ ÇÊ¿äÇÑ Àü¿ª º¯¼ö ¹× ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀÌ´Ù.
| <¸®½ºÆ® 4> °ÔÀÓ¿¡ ÇÊ¿äÇÑ Àü¿ª º¯¼ö ¹× ÇÔ¼ö ¸®½ºÆ® | | | |
//======================================================================// Variables //====================================================================== G3DRAWSURFACE g3Draw[2] ; // Surfaces unsigned int nflip ; // Surface Number unsigned int nGAMESTATE ; // Game State unsigned short trans_color ; // temp trans_color unsigned short g_wWidth = 240 ; // Screen Width unsigned short g_wHeight = 176 ; // Screen Height int ExKey ; // Key int nAvatarNum; // ij¸¯ÅÍ °¹¼ö int nStage = 1 ; // ÇöÀç ½ºÅ×ÀÌÁö GLuint tm_cube[10]; // fire texture G3IMAGE_16 *pm_cube[10]; // fire texture images int nOldArrow = 0; // ÀÌÀü ij¸¯ÅÍ ¹æÇâ int nNewArrow = 0; // ÇöÀç ij¸¯ÅÍ ¹æÇâ int nNowPos[2] = 1,1; // ÇöÀçÀÇ Æ÷Áö¼Ç float MoveCount = 0.0f; // ij¸¯ÅÍÀÇ ¿òÁ÷ÀÎ °Å¸® int nArrow = 0 ; // Űº¸µå ÀåÇâ int charmoveX = 0; // ij¸¯ÅÍÀÇ ÁÂÇ¥ xÃà int charmoveZ = 0; // ij¸¯ÅÍÀÇ ÁÂÇ¥ zÃà int charmoveY = 0; // ij¸¯ÅÍÀÇ ÁÂÇ¥ yÃà int nScore = 0 ; // ½ºÄÚ¾î int nStageCnt = 500; // Ä«¿îÆ® º¯¼ö int nStageClear = 0; // ½ºÅ×ÀÌÁö ¿Ï°á º¯¼ö int nDie = 0 ; // ij¸¯ÅͰ¡ Á×¾úÀ» ¶§ int nFall = 0 ; // ij¸¯ÅͰ¡ ¶³¾îÁ³À» ¶§ int nAction = 0; // Á¡ÇÁ ¾×¼Ç º¯¼ö char ScorePan[6]; // ½ºÄÚ¾î char CountPan[6]; // Ä«¿îÆ® unsigned short nSelIntroBtn = 0; // Start ¹× exit ¼±Åà º¯¼ö unsigned short nSelChar = 1; // ij¸¯ÅÍ ¼±Åà º¯¼ö //======================================================================// Function //======================================================================int InitGame(void); // ÃʱâÈ ºÎºÐ void KeyProcess(int nGameState); // »ç¿ëÀÚ ÀԷ¿¡ ´ëÇÑ Ã³¸® void UpdateGame(int nGameState); // °»½Å ºÎºÐ void EndGame(void); // End Program void LoadTexture(); // ÅØ½ºÃ³ ·Îµù void TileBinding(int nStage, int i, int k); // ŸÀÏ¸Ê ¹ÙÀεù void ArrowPuppy(int nArrow) // ij¸¯ÅÍ ¹æÇâ °áÁ¤ void checkmap(int nStage); // ÇöÀç ŸÀϸÊÀÇ ¼Ó¼º üũ void MoveChar(int nArrow); // ij¸¯ÅÍÀÇ À̵¿ °Å¸® int checkclear(void); // ½ºÅ×ÀÌÁö ¿Ï¼ö üũ int SynchFrame(DWORD nDelayCount); // ÇÁ·¹ÀÓ Á¦¾î ºÎºÐ GLvoid ReSizeGLScene(GLsizei width, GLsizei height); // Sizing Scene unsigned char gAddObjectMeshFromFile(unsigned char nObjID, char* pNGOName); // 3D °´Ã¼ Á¤º¸ ¾ò±â unsigned char gAddObjectAnimFromFile(unsigned char nObjID, char* pNBAName); // 3D ¾Ö´Ï¸ÞÀÌ¼Ç Á¤º¸ ¾ò±â
| |  |
°ÔÀÓ¿¡ ÀÌ¿ëµÇ´Â µ¥ÀÌÅÍ, º¯¼ö, ÇÔ¼öµéÀ» ¸ðµÎ Á¤ÀÇÇÏ¿´´Ù. ÀÌÁ¦ºÎÅÍ´Â º»°ÝÀûÀ¸·Î ³»ºÎ¸¦ µé¿©´Ù º¸ÀÚ.
¸ÞÀÎ ·çÇÁ
½ºÆäÀ̽ºÅ¥ºêÀÇ ¸ÞÀÎ ·çÇÁ´Â »ó´çÈ÷ °£´ÜÇÏ´Ù. InitGame()¸¦ ÅëÇØ¼ °¢Á¾ µ¥ÀÌÅ͸¦ ÃʱâÈÇϰí, »ç¿ëÀÚ°¡ Á¾·á۸¦ ´©¸¦ ¶§±îÁö ¹«ÇÑ·çÇÁ¸¦ µ¹¸é¼ KeyProcess() ÇÔ¼ö¸¦ ÅëÇØ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ°Ô µÇ°í, ÀÔ·ÂµÈ Å° °ªÀº UpdateGame() ÇÔ¼ö¿¡¼ °ÔÀÓ¿¡ ¹Ý¿µµÈ´Ù. À̸¦ G3_SurfaceFlip() ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á LCD ȸ鿡 Ãâ·ÂÇÏ°Ô µÇ´Â °£´ÜÇÑ ±¸Á¶¸¦ Áö´Ï°í ÀÖ´Ù. SynchFrame(150)Àº 150ms¸¶´Ù »ç¿ëÀÚ Å° ÀÔ·ÂÀ» ¹Þ°í, À̸¦ °ÔÀÓ¿¡ ¹Ý¿µÇÏ´Â ÇÔ¼öÀÌ´Ù. G3_Main() ÇÔ¼ö´Â <¸®½ºÆ® 5>¸¦ Âü°íÇϱ⠹ٶó¸ç, °¢ ÇÔ¼öµé¿¡ ´ëÇØ¼ ÀÚ¼¼È÷ »ìÆìº¸ÀÚ.
| |
void G3_Main(void *arg) { // ½ºÆäÀ̽º Å¥ºêÀÇ °ÔÀÓ ÃʱâÈ ºÎºÐ InitGame(); // CUBE_START = °ÔÀÓ ½ÃÀÛ(ÀÎÆ®·Î) // CUBE_EXIT = °ÔÀÓ Á¾·á // CUBE_CHOOSE = ij¸¯ÅÍ ¼±Åà ºÎºÐ // CUBE_MAIN = °ÔÀÓÀÇ ¸ÞÀÎ ºÎºÐ // °ÔÀÓ ·çÇÁÀÇ ½ÃÀÛ ÁöÁ¡À» ÁöÁ¤ nGAMESTATE = CUBE_START // °ÔÀÓ ·çÇÁ while(1) { // °ÔÀÓ·çÇÁÀÇ FPS¸¦ ÁöÁ¤ÇÑ´Ù. ´ÜÀ§´Â ¹Ð¸®¼¼ÄÁµå ´ÜÀ§ÀÌ´Ù. if( SynchFrame(150) ) { // °ÔÀÓÀÇ Å° ÀÔ·Â ºÎºÐÀ» °üÀåÇÑ´Ù. KeyProcess(nGAMESTATE) ; // °ÔÀÓ ±×·¡ÇÈ ºÎºÐÀ» ±×¸®°í Á¦¾îÇÑ´Ù. UpdateGame(nGAMESTATE) ; // LCD ȸ鿡 º¸¿©ÁØ´Ù . G3_SurfaceFlip(&g3Draw[nflip]) ; nflip = (nflip + 1) & 0x01 ; } | |  |
°ÔÀÓ ÃʱâÈ
°ÔÀÓÀÇ ÃʱâÈ ±â´ÉÀº ´ÙÀ½ÀÇ InitGame() ÇÔ¼ö¿¡¼ ó¸®ÇØ ÁØ´Ù. ¸» ±×´ë·Î ÃʱâÈ ÇÔ¼ö¿¡¼´Â PCM »ç¿îµå¸¦ ÃʱâÈÇϰí, 3D ¹öÆÛ¸¦ »ý¼ºÇϸç, 2D ÅØ½ºÃÄ ¸ÊÇΰú °ÔÀÓ¿¡ ÀÌ¿ëµÇ´Â °¢Á¾ µ¥ÀÌÅ͸¦ »ý¼ºÇϰí ÃʱâÈÇÑ´Ù. <¸®½ºÆ® 6>À» º¸¸é ¾Ë°ÚÁö¸¸, ¼ö¸¹Àº µ¥ÀÌÅ͵éÀ» ÃʱâÈÇÏ¿©¾ß ÇÑ´Ù.
| |
int InitGame(void){ int i; //½ºÅ©¸° Ç¥¸é ¹öÆÛ¸¦ ·çÇÁ¸¦ µ¹¸ç ¾ò¾î¿Â´Ù. for ( i = 0 ; i < 2 ; i++) G3_LcdSurfaceGet(&g3Draw[i], i); //Àü¼Û¿ë ¹öÆÛ¸¦ ½Ã½ºÅÛ¿¡ ·¹Áö½ºÅÍÀÇ °ªÀ¸·Î ÀúÀåÇÑ´Ù. G3_SurfaceSet(&g3Draw[0]); nflip = 1; // PCM »ç¿îµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÃʱâÈÇØ ÁØ´Ù. G3_PcmInit(PCM_M11,PCM_16BIT); // 3D ¹öÆÛ¸¦ »ý¼ºÇÏ°í ½ºÅ©¸° »çÀÌÁî¿¡ ¸Â´Â »çÀÌÁî·Î »ý¼ºÇÑ´Ù. glCreate(0, 0, g_wWidth, g_wHeight); ReSizeGLScene(g_wWidth, g_wHeight);
// Set Up Our Perspective GL Screen // 2DÅØ½ºÃÄ ¸ÊÇÎÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. glEnable(GL_TEXTURE_2D); // Smooth ShadingÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. glShadeModel(GL_SMOOTH); // 3D ¹öÆÛ¸¦ °ËÁ¤»öÀ¸·Î ¸¸µç´Ù. glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background // ±íÀÌ ¹öÆÛ¸¦ ¼ÂÆÃÇÑ´Ù. glClearDepthf(1.0f);
// ±íÀ̰ª ºñ±³ ¿¬»êÀ» Á¦¾îÇÏ°í ±íÀÌ ¹öÆÛ¸¦ °»½Å glEnable(GL_DEPTH_TEST); // ±íÀÌ Å×½ºÆ®¿¡¼ ºñ±³ ÇÔ¼ö¸¦ ¼³Á¤(±íÀÌ ¹öÆÛ¿¡ 1°ú °°À¸¸é Åë°ú) glDepthFunc(GL_LEQUAL); // Ä÷¯¿Í ÅØ½ºÃ³ ÁÂÇ¥ º¸°£ÀÇ Ç°ÁúÀ» ¼³Á¤ÇÑ´Ù. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // ¾Õ¸éÀ» ÇâÇÏ´Â Æú¸®°ïÀ» ÆÇ´ÜÇÏ´Â ¹æ¹ýÀ» Á¦¾î(½Ã°è¹Ý´ë¹æÇâ == CCW) glFrontFace(GL_CCW); // vertex array¸¦ °¡´ÉÄÉ ÇÑ´Ù. glEnableClientState(GL_VERTEX_ARRAY); // normal array¸¦ °¡´ÉÄÉ ÇÑ´Ù. glEnableClientState(GL_NORMAL_ARRAY); // ÅØ½ºÅÍ Coord array¸¦ °¡´ÉÄÉ ÇÑ´Ù. glEnableClientState(GL_TEXTURE_COORD_ARRAY); // ÅØ½ºÃĸ¦ ·ÎµùÇÑ´Ù. LoadTexture(); // ¾Æ¹ÙŸ 3°³¸¦ »ý¼ºÇÑ´Ù. nAvatarNum = 3; G3_3DgCreate((unsigned char)nAvatarNum); // 0-2±îÁöÀÇ À妽º¿¡ ´ÙÀ½ ¸Þ½Ã¸¦ ÁöÁ¤ gAddObjectMeshFromFile(0, "dog.NGO"); gAddObjectMeshFromFile(1, "bear.NGO"); gAddObjectMeshFromFile(2, "mon.NGO"); // À§ 3°³ÀÇ ¸ðµ¨ À§Ä¡¸¦ 3D°ø°£¿¡ ÁöÁ¤ G3_3DgSetAvatarPosition(0, 0, -1024, -4608); G3_3DgSetAvatarPosition(1, 0, -1024, -4608); G3_3DgSetAvatarPosition(2, 0, -1024, -4608); // ´ë±â ¾Ö´Ï¸ÞÀ̼ÇÀ» À妽º 0, 1 ¸ðµ¨¿¡ ÁöÁ¤ gAddObjectAnimFromFile(0, "wait.NBA"); gAddObjectAnimFromFile(1, "wait.NBA"); // 3D °ø°£À» ZÃàÀ¸·Î 1.0f ¿òÁ÷ÀδÙ. glTranslatef(0.0f,0.0f,1.0f); // »ç¿ë ij¸¯ÅÍÀÇ ¹æÇâÀ» 6½Ã ¹æÇâÀ¸·Î ¼ÂÆÃ nOldArrow = 3; nNewArrow = 3; return 1;}
| |  |
Űº¸µå ¾×¼Ç
´ÙÀ½À¸·Î »ç¿ëÀÚÀÇ Å° ÀÔ·ÂÀ» ¹Þ¾Æ¼ ó¸®ÇÏ´Â KeyProcess() ÇÔ¼ö¸¦ º¸ÀÚ. ÇÔ¼öÀÇ ÀÎÀÚ °ªÀÎ nGameState´Â ÇöÀç °ÔÀÓÀÇ »óÅ¿¡ ´ëÇÑ ÀÎÀÚ °ªÀÌ´Ù. nGameState¿¡ µû¶ó¼ °ÔÀÓÀÇ »óŸ¦ º¯È½Ãų ¼ö ÀÖ´Ù. ¸¸¾à nGameStateÀÇ °ªÀÌ CUBE_EXIT¶ó¸é °ÔÀÓ Á¾·á¸¦ ÀǹÌÇϸç, ÀÌ¿¡ µû¶ó °ÔÀÓÀ» Á¾·áÇÏ°Ô µÈ´Ù.
°ÔÀÓÀº CUBE_START, CUBE_CHOOSE, CUBE_EXIT, CUBE_CHOOSE, CUBE_MAINÀÇ ³× °¡Áö »óŸ¦ °¡Áú ¼ö ÀÖÀ¸¸ç, CUBE_START´Â °ÔÀÓÀÇ Ã¹ ȸé(intro)À» ¶æÇϰí, CUBE_CHOOSE´Â ij¸¯Å͸¦ ¼±ÅÃÇÏ´Â »óÅÂ, CUBE_MAINÀÌ ½ÇÁ¦ °ÔÀÓÀ» Çϰí ÀÖ´Â »óÅÂ, CUBE_EXIT´Â °ÔÀÓÀ» Á¾·áÇÏ´Â »óŸ¦ ÀǹÌÇÏ°Ô µÇ°í, ÀԷ¹ÞÀº Ű °ªÀº °ÔÀÓÀÇ »óÅÂ¿Í ÇÔ²² °ÔÀÓ¿¡ ¹Ý¿µµÈ´Ù.
2, 4, 5, 6, 8 ۰¡ °ÔÀÓ¿¡ ÀÌ¿ëµÇ´Âµ¥, 2, 4, 6, 8´Â ¹æÇâŰ ¿ªÇÒÀ» ÇÏ°Ô µÇ°í, 5´Â È®ÀÎŰ¿Í °°Àº ¿ªÇÒÀ» ÇÑ´Ù. <¸®½ºÆ® 7>ÀÇ KeyProcess() ÇÔ¼ö¸¦ º¸¸é 5, 6Ű¿¡ ´ëÇÑ ³»¿ëÀÌ Àִµ¥ 2, 4, 8Ű´Â 6Ű¿Í °°Àº ±¸Á¶·Î ÀÌ·ç¾îÁ® Àֱ⠶§¹®¿¡ Æ÷ÇÔÇÏÁö ¾Ê¾Ò´Ù. óÀ½ nGameState´Â CUBE_START·Î °ÔÀÓÀÌ ½ÃÀ۵ǰí, G3_KeyGetEx() ÇÔ¼ö¸¦ ÅëÇØ¼ ½ÇÁ¦·Î »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ°Ô µÈ´Ù. ÀԷ¹ÞÀº ۰¡ 6(->)À̶ó¸é ÇöÀç °ÔÀÓ »óÅÂ(nGameState)¸¦ üũÇÏ°í ¸¸¾à CUBE_CHOOSE¶ó¸é ÇöÀç »óŰ¡ ij¸¯Å͸¦ ¼±ÅÃÇÏ´Â »óÅ·ΠÀνÄÇÏ°Ô µÅ À̸¦ ´ëÇÑ Ã³¸®¸¦ ÇÏ°Ô µÈ´Ù. ¸¸¾à CUBE_MAINÀ̶ó¸é °ÔÀÓÀÌ ½ÇÇàµÇ°í ÀÖ´Â »óÅÂÀ̹ǷΠij¸¯Å͸¦ ¿À¸¥ÂÊÀ¸·Î À̵¿Çϰí, ±×¿¡ µû¸¥ Ãâ·Â±îÁö ó¸®ÇÏ°Ô µÈ´Ù.
| <¸®½ºÆ® 7> °ÔÀÓÀÇ Å° À̺¥Æ® °ü¸® | | | |
void KeyProcess(int nGameState){ // ÀÔ·ÂŰ °ª º¯¼ö int ExKey; // ´·ÁÁø ۰ªÀ» ¾ò´Â´Ù. G3_KeyGetEx(&ExKey); // 6¹ø ۰¡ ´·ÁÁ³À» ¶§ if(ExKey & G3C_VK_6) //if push '6' button { switch(nGameState) { case CUBE_START: nSelIntroBtn = 2; // Á¾·á °¡´É break; case CUBE_CHOOSE: nSelChar = 2; // °õµ¹ÀÌ ¼±Åà break; case CUBE_MAIN: if(!nAction) // ij¸¯ÅͰ¡ ¿òÁ÷À̰í ÀÖ´Â »óŰ¡ ¾Æ´Ï¶ó¸é { // ij¸¯ÅÍ ¿òÁ÷ÀÓ nAction = 1; // ij¸¯ÅͰ¡ À̵¿ÇÒ °Å¸®¸¦ ÃʱâÈ fMoveCount = 0.0f; //¿ìÃø ¹æÇâÀ¸·Î ¼ÂÆÃ nArrow = 2; nNewArrow = 2; // ÇöÀç À§Ä¡°ªÀ» Áõ°¡(¸Ê ¼Ó¼º¿¡¼) nNowPos[1]++; // ij¸¯ÅÍÀÇ ¹æÇâÀ» ÁöÁ¤ if(!( nOldArrow == nNewArrow))ArrowPuppy(nNewArrow); // Á¡ÇÁ ¾Ö´Ï¸ÞÀ̼ÇÀ» ÇØ´ç ij¸¯ÅÍ¿¡ ÁöÁ¤ gAddObjectAnimFromFile(nSelChar-1, "walk.NBA"); // ¾Ö´Ï¸ÞÀÌ¼Ç ±¸µ¿ G3_3DgPlayAvatarAnim(nSelChar-1); // ¾Ö´Ï¸ÞÀÌ¼Ç 1ȸ Ç÷¹ÀÌ·Î ÁöÁ¤ G3_3DgRepeatAvatarAnim( nSelChar-1, 1); } break; } } ...........// if push '2' button...........// if push '4' button...........// if push '8' button...........// if push '5' button...........
| |  |
±×·¡ÇÈ ¾×¼Ç
±×·¡ÇÈ ¾×¼ÇÀº UpdateGame(int nGameState) ºÎºÐ¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù. ¾Õ¼ ¼³¸íÇÑ nGameState¸¦ Index·Î ±¸º°ÇÏ¿© °ÔÀÓÀÇ ±×·¡ÇÈ Àüü¸¦ ³ªÅ¸³» ÁØ´Ù. ¸ÞÀÎ ·çÇÁ¿¡ ÀÖ¾ú´ø void UpdateGame(int nGameState) ºÎºÐ¿¡¼ ÇÏ´Â ¿ªÇÒÀº ´ÙÀ½°ú °°´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº <¸®½ºÆ® 8>ÀÇ UpdateGame() ÇÔ¼ö¸¦ Âü°íÇϱ⠹ٶõ´Ù.
nGameStateÀÇ »óÅ¿¡ µû¶ó¼ swtch¹®À» °¢°¢¿¡ ÇØ´çÇÏ´Â case¸¦ ½ÇÇàÇÑ´Ù.
nGameState°¡ CUBE_EXITÀÏ °æ¿ì¿¡´Â °ÔÀÓÀÌ Á¾·áµÇ¹Ç·Î Á¾·á¿¡ ´ëÇÑ Ã³¸®¸¦ ÇØÁØ´Ù. Á¾·á¿¡ ´ëÇÑ Ã³¸®´Â ȸéÀ» °ËÀº»öÀ¸·Î Áö¿ì°í ¡®SpaceCube Á¾·á!¡¯¶ó´Â ¹®ÀÚ¿À» ȸ鿡 Ãâ·ÂÇØ ÁØ´Ù.
nGameState°¡ CUBE_STARTÀÏ °æ¿ì¿¡´Â °ÔÀÓÀÌ ½ÃÀ۵Ǵ »óÅÂÀ̹ǷΠ°ÔÀÓ ÀÎÆ®·Î ȸéÀ» º¸¿©ÁØ´Ù. °ÔÀÓ ÀÎÆ®·Î ȸ鿡¼ 4¹ø ۸¦ ´·¶À» °æ¿ì start roll over À̹ÌÁö¸¦ »Ñ·ÁÁÖ°í, 6¹ø ۸¦ ´·¶À» °æ¿ì¿¡´Â exit roll over À̹ÌÁö¸¦ »Ñ·ÁÁØ´Ù.
nGameState°¡ CUBE_CHOOSEÀÏ °æ¿ì¿¡´Â ¹è°æÀ» Ŭ¸®¾îÇϰí ŸÀÌÆ² À̹ÌÁö¸¦ »Ñ¸®°í »ç¿ëÇÒ Ä³¸¯Å͵éÀ» »Ñ·ÁÁØ´Ù.
NGameState°¡ CUBE_MAINÀÏ °æ¿ì¿¡´Â 3D ¹öÆÛÀÇ È¸éÀ» Áö¿ì°í ±íÀÌ ¹öÆÛ¸¦ ÃʱâÈÇÑ´Ù. ȸ鿡 »Ñ¸± ½ºÅ×ÀÌÁö ¸ÊµéÀÇ face normal ÁÂÇ¥¸¦ Àаí face¿¡ ÀÔÇôÁú texture ÁÂÇ¥µµ Àаí 8*8 ŸÀϸÊÀ» ÁöÁ¤µÈ ¼Ó¼º¿¡ ¸ÂÃç ÅØ½ºÃĸ¦ ¹ÙÀεùÇÏ¿© DrawElements·Î 3D °ø°£¿¡ ±×·ÁÁØ´Ù. ±×·ÁÁØ »óÅ¿¡¼ ŰÆÐµåÀÇ ¹øÈ£ 1¹ø ۸¦ ´©¸£¸é »ó, 3¹ø ۸¦ ´©¸£¸é ÇÏ, 2¹ø ۸¦ ´©¸£¸é ¿ì, 4¹ø ۸¦ ´©¸£¸é Á·Π°¢°¢ À̵¿ÇÑ´Ù.
| <¸®½ºÆ® 8> °ÔÀÓÀÇ È¸é °»½Å ºÎºÐÀ» °ü¸® | | | |
void UpdateGame(int nGameState){ int i,k; switch(nGameState) { // °ÔÀÓ Á¾·á½Ã¿¡ ȸ鿡 »Ñ·ÁÁÜ case CUBE_EXIT: { // °ËÀº»öÀ¸·Î Áö¿ì°í G3_RectFill(NULL, &g3Draw[nflip], 0, 0, 240, 176, 0x0000); // "SpaceCube Á¾·á!" ¶ó´Â ¹®ÀÚ¿À» ȸ鿡 Ãâ·Â G3_TextOut(NULL, &g3Draw[nflip], 50, 80, (char*)"SpaceCube Á¾·á!", 0xffff); } break; // °ÔÀÓ ÀÎÆ®·Î ȸé case CUBE_START: { // ÀÎÆ®·Î À̹ÌÁö¸¦ »Ñ¸² G3_BitBlt(NULL, &g3Draw[nflip], 0, 0, IntroImg.iWidth, IntroImg.iHeight,(unsigned har*) & IntroImg, 0, 0, IntroImg.iWidth,IntroImg.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 17, 141, Introbtn.iWidth/4, Introbtn.iHeight, unsigned char*) & Introbtn, 0, 0, Introbtn.iWidth,Introbtn.iHeight); // 4¹ø ۸¦ ´·¶À» ¶§ start roll over À̹ÌÁö¸¦ »Ñ·ÁÁÜ if(nSelIntroBtn == 1) G3_BitBlt(NULL, &g3Draw[nflip], 17, 141, Introbtn.iWidth/4, Introbtn.iHeight, unsigned char*) & Introbtn, Introbtn.iWidth/4, 0, Introbtn.iWidth,Introbtn.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 133, 141, Introbtn.iWidth/4, Introbtn.iHeight, (unsigned char*) & Introbtn, Introbtn.iWidth/2, 0, Introbtn.iWidth,Introbtn.iHeight); // 6¹ø ۸¦ ´·¶À» ¶§ exit roll over À̹ÌÁö¸¦ »Ñ·ÁÁÜ if(nSelIntroBtn == 2) G3_BitBlt(NULL, &g3Draw[nflip], 133, 141, Introbtn.iWidth/4, ntrobtn.iHeight,(unsigned char*) & Introbtn,(Introbtn.iWidth/4)*3,0, Introbtn.iWidth,Introbtn.iHeight); } break; case CUBE_CHOOSE: { // ¹è°æÀ» Ŭ¸®¾î G3_RectFill(NULL, &g3Draw[nflip], 0, 0, 240, 176, 0x7123); // ŸÀÌÆ² À̹ÌÁö ±×·ÁÁÜ G3_BitBlt(NULL, &g3Draw[nflip], 14, 7, CharSelTitle.iWidth, CharSelTitle.iHeight, (unsigned char*) & CharSelTitle, 0, 0, CharSelTitle.iWidth,CharSelTitle.iHeight); // »ç¿ëÇÒ Ä³¸¯Å͵éÀ» ±×·ÁÁÜ G3_BitBlt(NULL, &g3Draw[nflip], 14, 38, SelChar.iWidth/4, SelChar.iHeight, unsigned char*) & SelChar, 0, 0, SelChar.iWidth,SelChar.iHeight); // ÁÂÃø¹æÇâ È»ìÇ¥ ±×·ÁÁÜ G3_BitBlt(NULL, &g3Draw[nflip], 15, 152, LeftArrow.iWidth/2, LeftArrow.iHeight, unsigned char*) & LeftArrow, 0, 0, LeftArrow.iWidth, LeftArrow.iHeight); // 4¹ø ۸¦ ´·¶À» ¶§ ¾Æ·¡¿Í °°Àº À̹ÌÁö¸¦ ±×·ÁÁÜ(¼±Åà ij¸¯ÅÍ, ¼±Åà ¹æÇâ) if(nSelChar == 1){ G3_BitBlt(NULL, &g3Draw[nflip], 14, 38, SelChar.iWidth/4, SelChar.iHeight, (unsigned char*) & SelChar, SelChar.iWidth/4, 0, SelChar.iWidth,SelChar.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 15, 152, LeftArrow.iWidth/2, LeftArrow.iHeight, (unsigned char*) & LeftArrow, LeftArrow.iWidth/2, 0, LeftArrow.iWidth, LeftArrow.iHeight); } G3_BitBlt(NULL, &g3Draw[nflip], 122, 38, SelChar.iWidth/4, SelChar.iHeight, (unsigned char*) & SelChar, SelChar.iWidth/2, 0, SelChar.iWidth,SelChar.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 169, 152, RightArrow.iWidth/2, RightArrow.iHeight, (unsigned char*) & RightArrow, 0, 0, RightArrow.iWidth, RightArrow.iHeight); // 6¹ø ۸¦ ´·¶À» ¶§ ¾Æ·¡¿Í °°Àº À̹ÌÁö¸¦ ±×·ÁÁÜ(¼±Åà ij¸¯ÅÍ, ¼±Åà ¹æÇâ) if(nSelChar == 2){ G3_BitBlt(NULL, &g3Draw[nflip], 122, 38, SelChar.iWidth/4, SelChar.iHeight, (unsigned char*) & SelChar, (SelChar.iWidth/4)*3, 0, SelChar.iWidth,SelChar.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 169, 152, RightArrow.iWidth/2, RightArrow.iHeight, (unsigned char*) & RightArrow, RightArrow.iWidth/2, 0, RightArrow.iWidth, RightArrow.iHeight); } // select ¹öưÀ» ±×·ÁÁÜ G3_BitBlt(NULL, &g3Draw[nflip], 75, 152, Selbtn.iWidth/2, Selbtn.iHeight, (unsigned char*) & Selbtn, 0, 0, Selbtn.iWidth, Selbtn.iHeight); } break; case CUBE_MAIN: { // 3D ¹öÆÛÀÇ È¸éÀ» Áö¿ì°í ±íÀÌ ¹öÆÛ¸¦ ÃʱâÈ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // ȸ鿡 »Ñ¸± ½ºÅ×ÀÌÁö ¸ÊµéÀÇ face normal ÁÂÇ¥¸¦ Àаí glNormalPointer (GL_FLOAT, 0, cubeNormals); // face¿¡ ÀÔÇôÁú texture ÁÂÇ¥µµ Àаí glTexCoordPointer(2, GL_FLOAT, 0, cubeCoords); // 8*8 ŸÀϸÊÀ» ÁöÁ¤µÈ ¼Ó¼º¿¡ ¸ÂÃß¾î ÅØ½ºÃĸ¦ ¹ÙÀεùÇÏ¿© // DrawElements·Î 3D°ø°£¿¡ ±×·ÁÁÜ for(i = 0; i < 8; i++) { for(k = 0; k < 8; k++) { // Texture Binding ÇÔ TileBinding(nStage, i, k); if(!(FirstStage[i][k] == 0)){ // [i][k]ŸÀÏÀÇ ¹öÅØ½º¸¦ ÁöÁ¤ glVertexPointer (3, GL_FLOAT, 0, VertexName[i][k]); // 3D °ø°£¿¡ ±×·ÁÁØ´Ù. glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, cubeIndices); } } } // nArrow “‡ÇâÀ¸·Î ij¸¯Å͸¦ À̵¿ // 1 = »ó, 3 = ÇÏ, 2 = ¿ì, 4 = Á if((nArrow == 4)&&(fMoveCount < 0.5f))MoveChar(nArrow); if((nArrow == 2)&&(fMoveCount > -0.5f))MoveChar(nArrow); if((nArrow == 1)&&(fMoveCount < 0.5f))MoveChar(nArrow); if((nArrow == 3)&&(fMoveCount > -0.5f))MoveChar(nArrow); // ÁöÁ¤µÈ ij¸¯Å͸¦ ±×·ÁÁÜ G3_3DgUpdateAvatar((unsigned char)(nSelChar-1)); glPushMatrix(); G3_3DgTransformAvatar((unsigned char)(nSelChar-1)); G3_3DgDrawAvatar((unsigned char)(nSelChar-1)); glPopMatrix(); glFlush(); G3_3DBitBlt(NULL, &g3Draw[nflip], 0, 0, g_wWidth, g_wHeight, (unsigned char*)glGetDisplayBuffer(), 0, 0, 240, 176); G3_BitBlt(NULL, &g3Draw[nflip], 4, 3, TSTitle.iWidth/2, TSTitle.iHeight, (unsigned char*)&TSTitle, 0, 0, TSTitle.iWidth, TSTitle.iHeight); G3_BitBlt(NULL, &g3Draw[nflip], 124, 3, TSTitle.iWidth/2, TSTitle.iHeight, (unsigned char*)&TSTitle, TSTitle.iWidth/2, 0, TSTitle.iWidth, TSTitle.iHeight); sprintf((char*)ScorePan, "%d", nScore); G3_TextOut(NULL, &g3Draw[nflip], 185, 10, (char*)ScorePan, 0x0); sprintf((char*)CountPan, "%d", nStageCnt); G3_TextOut(NULL, &g3Draw[nflip], 65, 10, (char*)CountPan, 0x0); // ij¸¯ÅͰ¡ »ì¾ÆÀÖ°í Ä«¿îÆÃÀÌ ³¡³µÀ¸¸é if((!nDie)&&(!nStageCnt)){ nDie=1; gAddObjectAnimFromFile(nSelChar-1, "die.NBA"); G3_3DgRepeatAvatarAnim( nSelChar-1, 1); } // ij¸¯ÅͰ¡ »ì¾ÆÀÖ°í Ä«¿îÆÃÀÌ 0ÀÌ ¾Æ´Ï¸é Ä«¿îÅ͸¦ °¨¼Ò else if((!nDie)&&(nStageCnt>0)) nStageCnt--; // ½ºÅ×ÀÌÁö¸¦ Ŭ¸®¾îÇÏ¿´À¸¸é if(nStageClear){ // clearround À̹ÌÁö¸¦ ȸ鿡 »Ñ·ÁÁØ´Ù. G3_BitBlt(NULL, &g3Draw[nflip], 50, 30, ClearRound2.iWidth, ClearRound2.iHeight, (unsigned char*)&ClearRound2, 0, 0, ClearRound2.iWidth, ClearRound2.iHeight); } // ij¸¯ÅͰ¡ À§Çè Áö¿ª¿¡ ÀÖÀ» ¶§ timeover À̹ÌÁö¸¦ ±×·ÁÁÜ if(nFall){ G3_BitBlt(NULL, &g3Draw[nflip], 50, 30, Fall.iWidth/2, Fall.iHeight, (unsigned char*)&Fall, Fall.iWidth/2, 0, Fall.iWidth, Fall.iHeight); G3_3DgSetAvatarPosition(nSelChar-1, (256*charmoveX), -1024-(charmoveY+=100), -4608 + (charmoveZ*256)); } // Á¦ÇÑ ½Ã°£ÀÌ ³Ñ¾úÀ» ¶§ TimeOver À̹ÌÁö¸¦ »Ñ·ÁÁÜ if(nDie){ G3_BitBlt(NULL, &g3Draw[nflip], 50, 30, TimeOver.iWidth, TimeOver.iHeight, (unsigned char*)&TimeOver, 0, 0, TimeOver.iWidth, TimeOver.iHeight); }}break;}
| |  |
½ÇÇà °á°ú
¿½ÉÈ÷ ¸¸µé¾î¿Â °ÔÀÓÀÇ È¸éÀ» º¸µµ·Ï ÇÏÀÚ. <ȸé 1>¿¡¼ <ȸé 6>Àº °¢ »óÅ ȸéÀÌ´Ù.
 | |  | | <ȸé 1> CUBE_START »óÅ ȸé | | <ȸé 2> CUBE_EXIT »óÅ ȸé |
 | |  | | <ȸé 3> CUBE_CHOOSE »óÅ ȸé | | <ȸé 4> CUBE_MAIN(Play) »óÅ ȸé |
 | |  | | <ȸé 5> CUBE_MAIN(fall) »óÅ¿¡¼ ij¸¯ÅͰ¡ À§ÇèÁö¿ª¿¡ Á¸ÀçÇϰí ÀÖÀ» ¶§ÀÇ È¸é | | <ȸé 6> CUBE_MAIN(TimeOver) »óÅ¿¡¼ ŸÀÓÄ«¿îÅͰ¡ ´Ù µÇ¾úÀ» ¶§ÀÇ È¸é |
°ÔÀÓ Á¦ÀÛÀº ¿µÈ °°Àº ¿¹¼ú
Áö±Ý±îÁö ½ºÆäÀ̽º Å¥ºê¶ó´Â ºñ±³Àû °£´ÜÇÑ °ÔÀÓÀ» ±¸ÇöÇÑ ¼Ò½ºÄڵ带 °¡Áö°í ¼³¸íÀ» ÇØº¸¾Ò´Ù. »ç½Ç, °ÔÀÓÀ̶ó°í ÇÏ´Â °ÍÀº »ç¿ëÀÚ¿¡°Ô ¿©·¯ °¡Áö ¸¸Á·°¨À» Á¦°øÇؾßÁö¸¸ ÁÁÀº °ÔÀÓÀÌ µÈ´Ù. ´«¿¡ º¸±â ÁÁ¾Æ¾ß Çϰí, Àç¹Ì Àֱ⵵ ÇØ¾ß Çϰí, ±Íµµ Áñ°Å¿ö¾ß ÇÑ´Ù. ÀÌ·± Ãø¸é¿¡¼ °ÔÀÓ Á¦ÀÛÀº ±â¼úÀ̶ó±âº¸´Ù´Â ¿µÈ¿Í °°Àº ¿¹¼ú¿¡ °¡±õ´Ù°í º¼ ¼ö ÀÖ´Ù. ±âȹ, µðÀÚÀÎ, È¿°ú, ÆíÁý, ÄÚµù, ¹èÆ÷ µî ¸ð¹ÙÀÏ °ÔÀÓÀÌ ¼º°øÇϱâ À§Çؼ´Â ´Ù¾çÇÑ ºÐ¾ßÀÇ ÀϼյéÀÌ ÇÊ¿äÇÏ´Ù. ƯÈ÷ ¸ð¹ÙÀÏ 3D´Â ±âÁ¸ÀÇ 2D °ÔÀÓ Á¦ÀÛ°ú´Â ÆÇÀÌÇÏ°Ô ´Ù¸¥ °³¹ß Á¢±Ù ¹æ¹ýÀ» ¿ä±¸Çϰí ÀÖ´Ù.
µû¶ó¼ ¸ð¹ÙÀÏ 3D °ÔÀÓÀÌ ÀϹÝȵDZâ À§Çؼ´Â ´õ ¸¹Àº »ç¶÷µéÀÌ Á¦ÀÛ¿¡ Âü¿©ÇÏ°í °ü·Ã ÀηµéÀÌ ¸¹ÀÌ ¸¸µé¾îÁ®¾ß °¡´ÉÇϸ®¶ó°í º»´Ù. À̸¦ À§Çؼ ¿À´Ãµµ ¿½ÉÈ÷ ³ë·ÂÇÏ´Â ºÐµé¿¡°Ô °¨»çÀÇ ¸¶À½À» ÀüÇÏ°í ½Í´Ù. ±×¸®°í ±×·¯ÇÑ ³ë·Â µÚ¿¡´Â ÁÁÀº °á°úµéÀÌ ³ª¿À±â¸¦ ±â´ëÇÑ´Ù. @ |