[Áöµð³ÝÄÚ¸®¾Æ]ÇöÀç ¸ð¹ÙÀÏ È¯°æ¿¡¼ °ÔÀÓÀ» ¸¸µé±â À§Çؼ´Â À§ÇÇ(WIPI), SK-VM, GNEX(GVM), ºê·ç(Brew) µî ¸ð¹ÙÀÏ ÄÁÅÙÃ÷ °³¹ß µµ±¸¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù. ÃÖ±Ù¿¡´Â À§ÇǸ¦ Áß½ÉÀ¸·Î ¸ð¹ÙÀÏ Ç÷§ÆûÀÌ ÅëÇÕµÇ¾î °¡°í Àִµ¥, ƯÈ÷ À§ÇÇ Ç÷§ÆûÀ» žÀçÇÑ ´Ü¸»±âµéÀÌ ¸¹ÀÌ ½ÃÆÇµÉ ¿¹Á¤À̶ó À§ÇÇ Ç÷§Æû °ü·Ã °ÔÀÓµéÀÌ ´ë·® Ãâ½ÃµÉ Àü¸ÁÀÌ´Ù.
¸ð¹ÙÀÏ °ÔÀÓÀÇ °³¹ß Ãß¼¼´Â ´Ü¸»±âÀÇ ¼º´ÉÀÌ ³ô¾ÆÁü¿¡ µû¶ó Á» ´õ ºü¸£°í ÁÁÀº ±×·¡ÇÈÀ» ±â¹ÝÀ¸·Î ÇÏ´Â °ÍÀ¸·Î ÁøÇàµÇ°í ÀÖ´Ù. ƯÈ÷ ³ÐÀº °ø°£°¨À» Á¦°øÇÏ´Â 3D ±â¹ÝÀÇ °ÔÀÓÀº °³¹ßÀÚ »çÀÌ¿¡¼ °ü½ÉÀÌ ÁýÁߵǴ ºÐ¾ß°¡ µÇ°í ÀÖ´Ù. 3D ÄÁÅÙÃ÷´Â ´Ü¸»±â¿¡ 3D ¼ÒÇÁÆ®¿þ¾î ¿£ÁøÀÌ Å¾ÀçµÈ Áö³ÇغÎÅÍ ¹ÙÅÁÈ¸é ¾Æ¹ÙŸ³ª °ÔÀÓ µîÀ¸·Î Ȱ¿ëµÇ±â ½ÃÀÛÇßÀ¸¸ç, ¿ÃÇØ´Â 3D °ü·Ã ÄÁÅÙÃ÷°¡ ´õ¿í ¸¹ÀÌ ³ª¿Ã °ÍÀ¸·Î ¿¹»óµÈ´Ù.
¸ð¹ÙÀÏ °ÔÀÓÀ» ¸¸µé¾î º» °³¹ßÀÚ¶ó¸é ´ç¿¬È÷ 3D °ÔÀÓÀ» ¸¸µé±â À§ÇØ ¾î¶°ÇÑ ÅøÀÌ ÇÊ¿äÇÑ Áö ±Ã±ÝÇØ ÇÒ °ÍÀÌ´Ù. À̸¦ À§ÇØ 3ȸ¿¡ °ÉÃÄ ¸ð¹ÙÀÏ 3D °ÔÀÓ Á¦ÀÛ¿¡¼ ½ÇÁ¦·Î »ç¿ëµÇ°í ÀÖ´Â SDK¸¦ ÀÌ¿ëÇÑ ½ÇÀü ÇÁ·Î±×·¡¹ÖÀ» ¿¬ÀçÇÏ·Á°í ÇÑ´Ù.
´Ù¸¸ ¸ð¹ÙÀÏ 3D¿Í °ü·ÃµÈ ¿©·¯ °¡Áö ½ÃÀå µ¿ÇâÀ̳ª ±â¼ú ³»¿ëµéÀ» »ó¼¼ÇÏ°Ô ¼Ò°³ÇÏ°í ½Í¾îµµ Çö½ÇÀûÀÎ ¿©°Ç ¶§¹®¿¡ ¸¸Á·½º·¯¿ï ¸¸Å ÃæºÐÈ÷ ¼³¸íÇÏÁö ¸øÇÏ´Â Á¡Àº ÀÎÁ¤ÇÒ ¼ö¹Û¿¡ ¾ø´Ù(ºü¸£°Ô º¯ÈµÇ°í ÀÖ´Â ¸ð¹ÙÀÏ ±â¼ú°ú ½ÃÀå »óȲ»Ó¸¸ ¾Æ´Ï¶ó ¸ð¹ÙÀÏ °ü·Ã °¢ ¾÷üµéÀÇ Áß¿äÇÑ »ç¾÷ ¿µ¿ªÀ̹ǷΠ¸ðµç ³»¿ëÀ» ¼Ò°³Çϱâ´Â »ç½Ç»ó ¾î·Æ´Ù). µû¶ó¼ 3D¿Í °ü·ÃµÈ Á¦Ç° Á¤º¸°¡ ºñ±³Àû ÀÚ¼¼ÇÏ°Ô ¼¼úµÇÁö ¸øÇÒ ¼öµµ ÀÖÀ½À» ¹Ì¸® ¾çÇØÇØ Áֱ⠹ٶõ´Ù.
G3 SDK ¼Ò°³
´ç¿¬ÇÑ ¸»À̰ÚÁö¸¸ °ÔÀÓÀ» ¸¸µé±â À§Çؼ´Â SDK°¡ ÀÖ¾î¾ß ÇÑ´Ù. ¸ð¹ÙÀÏ ÇÁ·Î±×·¡¹ÖÀ» ÇØº» µ¶ÀÚ¶ó¸é ´Ù¿î·Îµå Ç÷§Æû¿¡ µû¶ó¼ SDK°¡ Á¸ÀçÇϰí, À̸¦ ÀÌ¿ëÇØ¾ß¸¸ ÄÁÅÙÃ÷¸¦ Á¦ÀÛÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù.
¿ì¸®°¡ ÈçÈ÷ ¾Ë°í ÀÖ´Â Ç÷§Æû Áß ´Ù¿î·Îµå °¡´ÉÇÑ SDK·Î´Â À§ÇÇ SDK, SK-VM SDK, ºê·ç SDK, GNEX SDK µîÀÌ ÀÖ´Ù. 2¿ù ¸» ÇöÀç ¸î¸î SDK¿¡´Â 3D ¸ðµ¨À» ·ÎµùÇϰí ȸ鿡 Ç¥½ÃÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Ãß°¡ÀûÀ¸·Î Á¦°øÇÏ´Â ¸ðµâÀÌ Å¾ÀçµÈ °Íµéµµ ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ¹Ì ÆÛÁ® ÀÖ´Â ´Ü¸»±â ȯ°æ¿¡¼´Â ¼º´É ¹®Á¦·Î ÀÎÇØ ¾ÆÁ÷±îÁö ¸¸Á·½º·¯¿î ¼Óµµ¸¦ Á¦°øÇÏÁö´Â ¸øÇϰí ÀÖ´Ù. ±×·¯³ª 3°³ À̵¿Åë½Å »ç¾÷ÀÚµéÀ» Áß½ÉÀ¸·Î 3D °ÔÀÓ Á¦ÀÛÀ» À§ÇÑ È®Àå APIµéÀ» ¸¶·ÃÇϰí Àֱ⠶§¹®¿¡ Á¶¸¸°£ °³¹ßÀڵ鿡°Ôµµ ÁÁÀº °ÔÀÓÀ» Á¦ÀÛÇÒ ¼ö Àִ ȯ°æÀÌ Á¦°øµÇ¸®¶ó ±â´ëÇÑ´Ù.
º» ¿¬Àç¿¡¼´Â ÀÌ¿Í °°Àº Çö½ÇÀ» °í·ÁÇØ ´Ù¿î·Îµå °¡´ÉÇÑ Ç÷§ÆûÀ» À§ÇÑ SDK°¡ ¾Æ´Ï¶ó ¼º´É ÃÖÀûȰ¡ °¡´ÉÇÑ ÀÓº£µðµå ŸÀÔÀÇ °ÔÀÓÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Â SDK¸¦ ÀÌ¿ëÇØ °³¹ß ȯ°æÀ» »ìÆìº»´Ù. ÇöÀç °í¹Ìµå°¡ °³¹ßÇÑ G3 SDK´Â ÀÓº£µðµå ÇüÅÂÀÇ 3D °ÔÀÓÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Â SDK·Î, ½ÇÁ¦ ÀÓº£µðµåÇü 3D °ÔÀÓÀ» °³¹ßÇÏ´Â µ¥ Ȱ¿ëµÇ°í ÀÖ´Ù.
G3 SDK´Â ¸ð¹ÙÀÏ 3DÀÇ Ç¥ÁØÀÎ OpenGL ES(OpenGL for Embedded Systems) 1.0À» Áö¿øÇÑ´Ù. 3D ¸ðµ¨À» ·ÎµùÇÏ°í ¸ðµ¨À» ¹èÄ¡Çϰí Ä«¸Þ¶ó ¿öÅ©¸¦ Áö¿øÇÏ´Â ¶óÀ̺귯¸®¸¦ Á¦°øÇϱ⠶§¹®¿¡ ¸ð¹ÙÀÏ 3D °ÔÀÓÀ» °³¹ßÇÏ´Â µ¥ ÁÁÀº ȯ°æÀ» Á¦°øÇÑ´Ù. µû¶ó¼ ¸ð¹ÙÀÏ 3D Ç¥ÁØ¿¡ ±âÃÊÇÑ °ÔÀÓ °³¹ßÀ» ¼öÇàÇØ º¼ ¼ö ÀÖ´Ù´Â Ãø¸é¿¡¼ ÀÇÀǰ¡ ÀÖ´Ù°í »ý°¢µÈ´Ù. À̹ø È£¿¡¼´Â G3 SDK¸¦ ÀÌ¿ëÇÑ 3D ÇÁ·Î±×·¡¹ÖÀ» ½ÃÀÛÇϱ⿡ ¾Õ¼ ¸ð¹ÙÀÏ 3DÀÇ ÀÀ¿ë ºÐ¾ß¿Í °ü·Ã ±â¼ú¿¡ ´ëÇØ¼ °£·«ÇÏ°Ô ¾ð±ÞÇϰíÀÚ ÇÑ´Ù.
¸ð¹ÙÀÏ 3D ÀÀ¿ë ºÐ¾ß
´Ü¼øÇÑ À½¼º ÅëÈ À§ÁÖÀÇ À̵¿Åë½Å ½ÃÀå¿¡¼ °ÔÀÓÀ̳ª ¹ÙÅÁȸé°ú °°Àº ÄÁÅÙÃ÷¿Í ºê¶ó¿ìÀú¸¦ ÅëÇØ Á¢¼ÓÇÏ´Â ¹«¼± ÄÁÅÙÃ÷´Â ÀÌ¹Ì ÁÁÀº ¼öÀÍ ¸ðµ¨À» Á¦°øÇØÁÖ°í ÀÖ´Ù. ¶ÇÇÑ ±âÁ¸ ÄÁÅÙÃ÷ ½ÃÀåÀÇ °æÀïÀÌ ½ÉÇØÁö°í Ä÷¯ÆùÀ̳ª Ä«¸Þ¶óÆù µî À¶ÇÕÇü °í¼º´É ÈÞ´ë ´Ü¸»±â°¡ ´ëÁßȵʿ¡ µû¶ó °í¼º´É ´Ü¸»±â¿¡ ÀûÇÕÇÑ Â÷º°µÈ °í±Þ ÄÁÅÙÃ÷°¡ ¿ä±¸µÇ°í ÀÖ´Ù.
°í¼º´É ÈÞ´ë ´Ü¸»±â°¡ °®Ãç¾ß ÇÒ »õ·Î¿î ±â´ÉµéÀº ¸Þ°¡Çȼ¿ Ä«¸Þ¶ó, MPEG4 µ¿¿µ»ó, ±×¸®°í 3D Áö¿ø µîÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ½ÃÀå »óȲ¿¡ ¸ÂÃç ÇöÀç ´Ù¾çÇÑ Ä¨ Á¦Á¶»ç, ´Ü¸»±â Á¦Á¶»ç, À̵¿Åë½Å»çµéÀÌ ¸ðµÎ ÀÌ·¯ÇÑ ¼ºñ½º¸¦ ÁغñÇϰí ÀÖ´Ù. ÀÌ Áß¿¡¼ ¸ð¹ÙÀÏ 3D ±â´ÉÀ» ÀÌ¿ëÇÑ ¼ºñ½º ÀÀ¿ë ºÐ¾ß´Â [±×¸² 1]ó·³ 3D ¹ÙÅÁÈ¸é ¼ºñ½º, 3D °ÔÀÓ, 3D UI µîÀÌ ÇöÀç ¼ºñ½º °¡´ÉÇÑ ¹üÁÖ¿¡ ÀÖ´Ù.
 |
| [±×¸² 1] ¸ð¹ÙÀÏ 3D ÀÀ¿ë ºÐ¾ß |
3D ¹ÙÅÁÈ¸é ¼ºñ½º
ÈÞ´ëÆù¿¡¼ °¡Àå ½±°Ô È®ÀÎÇÒ ¼ö ÀÖ´Â ÄÁÅÙÃ÷°¡ ¹Ù·Î ¹ÙÅÁȸéÀÌ´Ù. Ãʱ⿣ 2D À̹ÌÁö¸¦ Áß½ÉÀ¸·Î Àû¿ëµÇ´Ù°¡ ÃÖ±Ù¿¡´Â ´Ù¿î·Îµå Ç÷§Æû¿¡¼ Á¦ÀÛµÈ ÀÀ¿ë ÇÁ·Î±×·¥À¸·Îµµ Àû¿ëÇÒ ¼ö ÀÖµµ·Ï º¯°æµÇ¾ú´Ù. ÀÌ·¯ÇÑ º¯È´Â ´Ü¼øÇÑ ÇüÅÂÀÇ ¹ÙÅÁȸéÀÌ ¾Æ´Ï¶ó Á» ´õ ´ÙÀ̳»¹ÍÇÑ À̹ÌÁöÀÇ ¹ÙÅÁȸéÀ» ¿ä±¸ÇÏ´Â »ç¿ëÀÚµéÀÇ ¼ö¿ä°¡ ¸¹¾ÆÁ³´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ Ãø¸é¿¡¼ ±âÁ¸ÀÇ 2D À̹ÌÁö°¡ ¾Æ´Ñ 3D ¾Æ¹ÙŸ°¡ ÃãÃß°í °¨Á¤À» Ç¥ÇöÇØ Á» ´õ Çö½Ç°¨ÀÌ ÀÖ°í, °³¼º ÀÖ´Â ¹ÙÅÁȸéÀ» ²Ù¹Ð ¼ö ÀÖ´Â ¼ºñ½º¸¦ »ý°¢ÇÒ ¼ö ÀÖ´Ù.
3D ¹ÙÅÁÈ¸é ¼ºñ½º´Â ÇöÀç KTFÀÇ Ãֽд܏»±âÀÎ LG-KV1400 ¸ðµ¨À» ÅëÇØ ¼ºñ½ºµÇ°í ÀÖ´Ù. KTF ¡®¸ÅÁ÷¿£(Magic¨Ú)¡¯¿¡¼ ¡®3D ±×¸²³ª¶ó¡¯ ¼ºñ½º·Î Á¦°øµÇ´Â ÀÌ ¼ºñ½º´Â ij¸¯ÅÍ, ¾Ö´Ï¸ÞÀ̼Ç, ¹ÙÅÁ ±×¸² µîÀ» º¯°æÇØ °¡¸é¼ »ç¿ëÀÚ°¡ ¿øÇÏ´Â 3D ij¸¯ÅÍ, ¹è°æ, ¾Ö´Ï¸ÞÀ̼ÇÀ» ¼±ÅÃ, Á¶ÇÕÇØ ÀڽŸ¸ÀÇ È¸éÀ» ±¸¼ºÇÒ ¼ö ÀÖ´Ù.
ÀÌ·± ¼ºñ½º´Â ¾ÆÁ÷±îÁö LGÀüÀÚ¿Í »ï¼ºÀüÀÚ ´Ü¸»±â¸¦ ÅëÇØ KTF¿Í SKÅÚ·¹ÄÞ ¼ºñ½º¿¡¼¸¸ °¡´ÉÇÏÁö¸¸ ¾ÕÀ¸·Î ´Ù¾çÇÑ ´Ü¸»±â Á¦Á¶»çÀÇ Á¦Ç°°ú À̵¿Åë½Å ¼ºñ½º·Îµµ Á¦°øµÉ °ÍÀ¸·Î ¿¹»óµÈ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ´Ù¾çÇÑ ÇüÅÂÀÇ ÀÀ¿ëÀÌ °¡´ÉÇϱ⠶§¹®¿¡ ¾ÕÀ¸·Î ´õ Àç¹ÌÀÖ´Â ¹ÙÅÁÈ¸é ¼ºñ½ºµµ ±â´ëÇØ º»´Ù.
 | [Ç¥ 1] ÇöÀç Á¦°øµÇ´Â 3D ¹ÙÅÁ È¸é ¼ºñ½º |  | |  |
|
| | | KTF | SKT | | ¹ÙÅÁÈ¸é ¼ºñ½º¹æ½Ä | Æù ³»ÀåÇü | WTOP ´Ù¿î·Îµå Çü | | ÄÁÅÙÃ÷ Á¦°ø¹æ½Ä | Å׸¶Çü, Á¶ÇÕÇü | Å׸¶Çü | | Áö¿ø ´Ü¸»±â | LG KV1400»ï¼º S1000´õ Ãß°¡¿¹Á¤ | GIGA ´ëÀÀ ´Ü¸»±â |
|
| |
|
| |
¸ð¹ÙÀÏ 3D °ÔÀÓ
¸ð¹ÙÀÏ 3D °ÔÀÓÀº Å©°Ô ´Ù¿î·ÎµåÇü °ÔÀÓ, ÀÓº£µðµåÇü °ÔÀÓ, PDA ¶Ç´Â ÄÜ¼Ö °ÔÀÓ±â ÇüÅ·Π³ª´ ¼ö ÀÖ´Ù. ´Ù¿î·ÎµåÇü °ÔÀÓÀº ´Ù¿î·Îµå Ç÷§ÆûÀ» ÀÌ¿ëÇØ °³¹ßµÈ °ÔÀÓÀ¸·Î, ¿©·¯ ´Ü¸»±â¿¡¼ ´Ù¿î·ÎµåÇØ °ÔÀÓÀ» Áñ±æ ¼ö ÀÖÀ¸³ª À̸¦ À§Çؼ´Â 3D ¿£ÁøÀÌ ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ±¸ÇöµÇ¾î¾ß ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù(ÇÏÁö¸¸ »ç¿ëÀÚµéÀÌ °®°í ÀÖ´Â ´ëºÎºÐÀÇ ´Ü¸»±â°¡ ¼º´ÉÀÌ ³·Àº CPU¸¦ ±â¹ÝÀ¸·Î »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ ½ÇÁ¦·Î´Â ÃֽŠÈÞ´ëÆùÀ» °¡Áö°í ÀÖ¾î¾ß 3D È¿°ú¸¦ ³»´Â °ÔÀÓµéÀ» ÀÌ¿ëÇØ º¼ ¼ö ÀÖ´Ù).
ÀÓº£µðµåÇü °ÔÀÓÀ¸·Î´Â ÈÞ´ëÆùÀÌ Ãâ½ÃµÉ ¶§ ÇÔ²² žÀçµÇ¾î Á¦°øµÇ´Â °ÔÀÓÀ¸·Î ´Ù¿î·ÎµåÇü °ÔÀÓ¿¡ ºñÇØ ´Ü¸»±â¿¡ ÃÖÀûÈµÈ ÇüÅ·Π°ÔÀÓÀÌ Á¦°øµÉ ¼ö ÀÖ´Ù. PDA ¶Ç´Â ÄÜ¼Ö °ÔÀÓ±â ÇüÅÂÀÇ °ÔÀÓÀº ½ÇÁ¦ PDA ¶Ç´Â ³ëŰ¾ÆÀÇ N-Gage µî¿¡¼ µ¿ÀÛÇÏ´Â °ÔÀÓÀÌ´Ù.
ÇöÀç 3D °ÔÀÓÀÌ ¸¹ÀÌ ¸¸µé¾îÁöÁö ¾Ê°í ÀÖ´Â ÀÌÀ¯´Â ¸¶¶¥È÷ ÄÁÅÙÃ÷¸¦ Á¦ÀÛÇÒ ¸¸ÇÑ ´Ü¸»±â°¡ ¾ø´Ù´Â ÀÌÀ¯°¡ °¡Àå Å©¸ç, ¶Ç ´Ù¸¥ ÀÌÀ¯´Â °³¹ß ¿©°ÇÀÌ ¾ÆÁ÷±îÁö ÁÁÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÏ´Ü 3D ¼º´ÉÀÌ ¶Ù¾î³ ´Ü¸»±â°¡ ½ÃÀå¿¡ ¸¹ÀÌ Ç®¸®¸é 3D °ÔÀÓ ¿ª½Ã Áõ°¡ÇÒ °ÍÀ¸·Î »ý°¢µÈ´Ù. ±¹³»ÀÇ °æ¿ì¿£ ÀϺΠ´Ü¸»±â¿¡ 3D °ÔÀÓÀÌ Àû¿ëµÇ¾úÀ¸³ª ¾ÆÁ÷±îÁö ÀϹÝȵǴ Ãß¼¼´Â ¾Æ´Ï´Ù. Á¶¸¸°£ Á» ´õ ÁÁÀº 3D °ÔÀÓÀ» Áñ±æ ¼ö ÀÖ´Â ´Ü¸»±â°¡ Ãâ½ÃµÉ °ÍÀ¸·Î ±â´ëÇϰí ÀÖ´Ù.
ÀϺ»ÀÇ °æ¿ì Hi-Corp¶ó´Â ȸ»çÀÇ 3D ¼ÒÇÁÆ®¿þ¾î ¿£ÁøÀÌ Å¾ÀçµÈ ÆùÀÌ ¸¹ÀÌ Ãâ½ÃµÅ ÀÖ´Ù. ´Ù¾çÇÑ °ÔÀÓ ÄÁÅÙÃ÷°¡ ÀÖÁö¸¸ ¼ÒÇÁÆ®¿þ¾î ¿£Áø ±â¹ÝÀ̱⠶§¹®¿¡ ÁÖ·Î ¾û¼ºÇÏ°í ¾î¼³Ç ÇüÅ·ΠÁ¦À۵Ǿî ÀÖ´Ù. À¯·´ ¼öÃ⠸𵨿¡¼´Â ³ëŰ¾Æ¿Í °°Àº N-Gage °ÔÀÓÇü ´Ü¸»±â¿¡ ¸î °¡Áö 3D ÄÁÅÙÃ÷¸¦ Á¦°øÇϰí Àִµ¥, ÀÌ Á¦Ç°Àº ´ÑÅÙµµÀÇ ÈÞ´ë¿ë °ÔÀӱ⠡®°ÔÀÓº¸ÀÌ¡¯¸¦ º¥Ä¡¸¶Å·ÇÑ Á¦Ç°ÀÌ´Ù. À̵¿Åë½Å/½º¸¶Æ®Æù¿ë OSÀÎ ½Éºñ¾È(Symbian) OS¸¦ žÀçÇÏ¿´À¸¸ç, 3D °ÔÀÓÀ¸·Î´Â ¸ðÅä ·¹À̼, Åù ·¹ÀÌ´õ µîÀÌ ÀÖ´Ù.
À¯·´ÀÇ °æ¿ì ¸ð¹ÙÀÏ °ÔÀÓÀ» Á¦ÀÛÇϱâ À§ÇÑ Ç÷§ÆûÀ¸·Î J2ME¸¦ °¡Àå ¸¹ÀÌ »ç¿ëÇÑ´Ù. J2ME ȯ°æ¿¡¼ 3D °ÔÀÓÀ» Á¦ÀÛÇÏ·Á¸é JSR184 Ç¥ÁØ ±Ô°ÝÀÌ Ãß°¡·Î Á¦°øµÇ¾î¾ß ÇÑ´Ù. À¯·´Àº ÈÞ´ëÆùÀÇ Æ¯¼ºÀ̳ª ±Ô°ÝÀÌ ´Ü¸»±â Á¦Á¶»ç Áß½ÉÀ¸·Î Á¦À۵DZ⠶§¹®¿¡ À̵¿Åë½Å »ç¾÷ÀÚ°¡ ÁÖµµÇÏ´Â ¿ì¸®³ª¶óó·³ ´Ù¿î·Îµå ÇüŰ¡ ¾Æ´Ï¶ó ¿ÜºÎ ÀúÀåÀåÄ¡¸¦ ÅëÇØ ÄÁÅÙÃ÷ °ø±ÞÀÌ °¡´ÉÇÏ´Ù. µû¶ó¼ J2ME ȯ°æ À̿ܿ¡ ¸î °¡Áö µ¶ÀÚÀûÀΠȯ°æµµ Á¸ÀçÇÑ´Ù. N-GageÀÇ °æ¿ì´Â ½Éºñ¾È ¿î¿µÃ¼Á¦ À§¿¡ FathammerÀÇ X-Forge¸¦ Àû¿ëÇßÀ¸¸ç, À̹ۿ¡ Synergenix InteractiveÀÇ Mophun, In-FusioÀÇ ExEn (Excution Engine) µîÀÌ ÀÖ´Ù.
3D ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º
¹ÙÅÁÈ¸é ´ÙÀ½À¸·Î ¸¹ÀÌ »ç¿ëÇÏ´Â °ÍÀÌ ÈÞ´ëÆù¿¡ Àû¿ë °¡´ÉÇÑ 3D ÀÀ¿ëÀ¸·Î ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI) ºÎºÐÀ» ²ÅÀ» ¼ö ÀÖ´Ù. º¸Åë ÈÞ´ëÆùÀÇ ¸Þ´º´Â ´ëºÎºÐ ´Ü¸»±â Á¦Á¶»çÀÇ Æ¯¼º¿¡ µû¶ó ´Ù¾çÇÑ ÇüÅ·ΠÁ¦À۵Ǵµ¥ ¿©±â¿¡ 3D ÇüÅÂÀÇ ¸Þ´º¸¦ »ðÀÔÇÏ¸é »ç¿ëÀÚ¿¡°Ô ÁÁÀº ½Ã°¢ È¿°ú¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù.
ÇÏÁö¸¸ ¸ðµç GUI¸¦ 3D·Î º¯°æÇÏ·Á¸é ¸®¼Ò½ºÀÇ ºÎ´ãÀÌ Å©°í µðÀÚÀÎ ºñ¿ëµµ ¸¹ÀÌ µé±â ¶§¹®¿¡ ´çÀå Àû¿ëµÇ±â¿¡´Â ¹«¸®°¡ µû¸¥´Ù. ¶ÇÇÑ 2D À̹ÌÁö¸¦ ÀÌ¿ëÇØµµ ¾î´À Á¤µµ 3D È¿°ú¸¦ ³ªÅ¸³¾ ¼ö Àֱ⠶§¹®¿¡ ÀÌ¿¡ ´ëÇØ¼´Â ±â¼úÀû Ãø¸é°ú UIÀÇ µðÀÚÀÎ Ãø¸é¿¡¼ ¸ðµÎ ½Ã°£°ú ³ë·ÂÀÌ ÇÊ¿äÇÒ °ÍÀ¸·Î º¸ÀδÙ.
Çϵå¿þ¾î °¡¼Ó±â
¼ÒÇÁÆ®¿þ¾î ¿£Áø¿¡ ºñÇØ ´õ ³ôÀº ¼º´ÉÀ» ³¾ ¼ö ÀÖ´Â Çϵå¿þ¾î °¡¼Ó±â´Â ±× ÇüŰ¡ ¸Å¿ì ´Ù¾çÇÏ´Ù. ÀÏ´Ü ¾Ë·ÁÁø Çϵå¿þ¾î °¡¼Ó±â¿¡ ´ëÇØ ¾Ë¾Æº¸¸é Ä÷ÄÄÀÇ Q3D, ³×¿À¸ÅÁ÷ÀÇ MiMagic6, ¸ÅÁ÷¾ÆÀÌÀÇ VRender3D, ATIÀÇ Imageon 2300, Sanshin ElectronicsÀÇ GShark plus µîÀÌ ÀÖ´Ù. ÀÚ¼¼ÇÑ ¼º´ÉÀ̳ª ½ºÆå¿¡ ´ëÇÑ »çÇ×Àº °¢ Á¦Á¶»çÀÇ È¨ÆäÀÌÁö¸¦ ÅëÇØ ÀÚ¼¼È÷ ¾Ë¾Æº¼ ¼ö ÀÖÀ¸¹Ç·Î ¿©±â¼´Â °£´ÜÇÑ Æ¯¼º¸¸ »ìÆì º»´Ù.
Ä÷ÄÄ Q3D
Ä÷ÄÄÀÇ MSM6100 °è¿ºÎÅÍ Q3D¶ó´Â Çϵå¿þ¾î ¿£ÁøÀÌ Æ÷ÇԵŠÁ¦°øµÇ°í ÀÖÀ¸¸ç, OpenGL ES Ç¥ÁØÀ» Áö¿øÇÏ´Â ÇüŶó°í ÇÑ´Ù. ¼Óµµ´Â ÃÊ´ç ¾à 10¸¸ Æú¸®°ïÀ¸·Î ¾Ë·ÁÁ® ÀÖÀ¸¸ç, ½ÇÁ¦·Î À̸¦ ÀÌ¿ëÇϱâ À§Çؼ´Â ¸î °¡Áö Ãß°¡ÀûÀÎ ÄÚµåµéÀ» ÇÔ²² Àû¿ë½ÃÄÑ¾ß Çϱ⠶§¹®¿¡ ´Ü¸»±â Á¦Á¶»ç¿¡¼ À̸¦ ÀÌ¿ëÇÏ·Á´Â ¿òÁ÷ÀÓÀÌ ±×·¸°Ô ³ôÁö ¾ÊÀº ÆíÀÌ´Ù.
³×¿À¸ÅÁ÷ MiMagic6
³×¿À¸ÅÁ÷ ¿ª½Ã 3D °¡¼Ó±â¸¦ ÀåÂøÇÑ ¸ð¹ÙÀÏ Ä¨ÀÎ MiMagic6À» °³¹ß Áß¿¡ ÀÖ´Ù. ARM926EJ Äھ ¹ÙÅÁÀ¸·Î APA ±â¹ÝÀÇ ¸ÖƼ¹Ìµð¾î ¿£ÁøÀ» ÅëÇØ¼ OpenGL ES ±Ô°ÝÀ» ¸¸Á·Çϵµ·Ï ±¸¼ºÇÑ Ä¨ÀÌ´Ù.
¸ÅÁ÷¾ÆÀÌ VRender3D
¸ÅÁ÷¾ÆÀÌÀÇ VRender3D´Â ARM920T Äھ ¹ÙÅÁÀ¸·Î 3D ±×·¡ÇÈ ¿£Áø°ú MPEG4 ¿£ÁøÀ» ³»ÀåÇϰí Àִ ĨÀ¸·Î ÇöÀç ´ÙÀÌ·ºÆ®3D ÇüÅÂÀÇ 3D API¸¦ Á¦°øÇϰí ÀÖ´Ù.
ATI Imageon 2300
PC¿ë ±×·¡ÇÈ °¡¼Ó ĨÀ» Á¦ÀÛÇϴ ȸ»çÀÎ ATI´Â PDA³ª ÈÞ´ëÆù¿¡ ÀûÇÕÇÑ ÇüÅÂÀÇ °¡¼Ó ĨÀÎ Imageon 2300À» Ãâ½ÃÇÏ¿´´Ù. ÀÌ Ä¨Àº CPU°¡ ¾ø´Â ¼ø¼ö °¡¼Ó ĨÀ¸·Î OpenGL ES ±Ô°ÝÀ» ¸¸Á·Çϴ ĨÀÌ´Ù.
GShark plus
ÀϺ» ¾÷üÀÎ Sanshin ElectronicsÀÇ GShark plus´Â µ¶ÀÚÀûÀÎ ±Ô°ÝÀÇ 3D ¿£ÁøÀ¸·Î ATI Á¦Ç°°ú ¸¶Âù°¡Áö·Î CPU°¡ ¾ø´Â ¼ø¼ö °¡¼Ó ĨÀÌ´Ù.
¸ð¹ÙÀÏ 3D Ç¥ÁØ µ¿Çâ
ÃÖ±Ù ¸ð¹ÙÀÏ 3D °ü·Ã ¾÷°èµéÀÇ ÈµÎ´Â ±¹Á¦ °ø°³ Ç¥ÁØÀ¸·Î ºÎ°¢µÇ°í ÀÖ´Â OpenGL ESÀÌ´Ù. ÇöÀç ±¹³»¿Ü À̵¿Åë½Å»ç, ´Ü¸»±â/Ĩ Á¦Á¶»ç, 3D ¿£Áø °³¹ß»ç µî °ÅÀÇ ´ëºÎºÐ ȸ»çµéÀÌ OpenGL ES¸¦ ¼ö¿ëÇØ Á¦Ç°À» °³¹ßÇϰí ÀÖ´Ù. Áö³ ÇØ 7¿ù ¸ð¹ÙÀÏ ½Ã½ºÅÛ¿ë ±×·¡ÇÈ ÀÎÅÍÆäÀ̽º °³¹ß µ¿¸ÍÀÎ ¡®Å©·Î³ë½º ±×·ì(Khronos Group)¡¯ÀÌ OpenGL ES Ver 1.0À» ºñÁØÇÑ ÀÌ·¡ ¼¼°èÀÇ ÁÖ¿ä Ĩ¼Â/ÄÚ¾î, ¼ÒÇÁÆ®¿þ¾î °³¹ß ¾÷üµéÀÌ ÁÙÀ̾î ÀÌ ±×·ìÀÇ ¸â¹ö·Î Âü¿©Çϰí ÀÖ´Ù.
Çѱ¹¿¡¼´Â SKÅÚ·¹ÄÞ, °í¹Ìµå¸¦ ºñ·ÔÇØ ¸î¸î ¾÷ü°¡ ȸ¿ø»ç·Î Ȱµ¿Çϰí ÀÖ´Ù(KTF ¿ª½Ã 2003³â OpenGL ES¸¦ Æ÷ÇÔÇϰí ÀÖ´Â °í¹ÌµåÀÇ 3D ¿£ÁøÀ» Ç¥ÁØ ¿£ÁøÀ¸·Î ¼±Á¤ÇÏ¿´´Ù). ÀÌ¿¡ µû¶ó ÈÞ´ëÆù Á¦Á¶»ç´Â OpenGL ES¸¦ ¼ö¿ëÇϵµ·Ï Á¦Ç°À» °³¹ßÇϰí ÀÖÀ¸¸ç, ¾ÕÀ¸·Î ÀÌ·¯ÇÑ Ãß¼¼´Â Å« º¯È°¡ ¾øÀ» °ÍÀ¸·Î º¸ÀδÙ.
¸ð¹ÙÀÏ 3DÀÇ °ø°³ Ç¥ÁØ, OpenGL ES
OpenGL ES´Â [±×¸² 2]¿¡¼ º¸´Â °Íó·³ Å©·Î³ë½º ±×·ì¿¡¼ ÁÖ°üÇÏ´Â OpenGLÀÇ ÀÓº£µðµå ½Ã½ºÅÛ ¹öÀüÀ¸·Î, ÈÞ´ë¿ë ´Ü¸»±â³ª ±â±âÀÇ ÀÓº£µðµå µð½ºÇ÷¹À̺¸´Ù Çâ»óµÈ 2D/3D ±×·¡ÇÈ ¼º´ÉÀ» Á¦°øÇϱâ À§ÇØ ¹«·á·Î ¹èÆ÷µÇ´Â ³·Àº ·¹º§ÀÇ °æ·® APIÀÌ´Ù.
OpenGLÀ» ±â¹ÝÀ¸·Î Ç쵂 »ç¿ëºóµµ°¡ ³·°Å³ª ºÒÇÊ¿äÇÑ ºÎºÐÀ» Á¦°ÅÇÑ OpenGL 1.3ÀÇ ¼ºê¼Â(subset)À¸·Î, SW ¾ÖÇø®ÄÉÀ̼ǰú HW/SW ±×·¡ÇÈ ¿£Áø°£ Ãʰ淮ÀÇ API¸¦ Á¦°øÇÑ´Ù. ¹öÀü 1.0 ½ºÆåÀº Common(ÇÚµå¼Â°ú °°Àº ÃÖ¼ÒÈµÈ ¸ð¹ÙÀÏ µð¹ÙÀ̽º¿¡ »ç¿ë °¡´É), Common-Lite(PDA³ª ¼ÂÅé¹Ú½º °°Àº µð¹ÙÀ̽º¿¡ »ç¿ë °¡´É) ·»´õ·¯¿Í ³×ÀÌÆ¼ºê Ç÷§Æû À©µµ¿ì ½Ã½ºÅÛ°ú ¿¬°áÇØÁÖ´Â EGL µîÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.
 |
| [±×¸² 2] Å©·Î³ë½º ±×·ìÀÇ »ç¾÷ ÁøÇà ¹æÇâ |
ÀÌ·¯ÇÑ ÀÓº£µðµå ½Ã½ºÅÛÀ» À§ÇÑ Ç¥ÁØ API´Â ¸ðµç ¸ÞÀÌÀú±Þ ¸ð¹ÙÀÏ/ÀÓº£µðµå Ç÷§Æû¿¡¼ ´Ù¾çÇÑ 3D ±×·¡ÇȰú °ÔÀÓ Á¦°øÀ» ¿ëÀÌÇÏ°Ô ÇØÁÖ¸ç, ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ ÆíÀǼºÀ» Á¦°øÇÑ´Ù.
¡ß »ê¾÷ Ç¥ÁØ & ·Î¿Æ¼ ÇÁ¸®(Industry Standard and Royalty Free), °³¹ßÀÚµéÀº Ç÷§ÆûÀ̳ª ÀûÀº ¾çÀÇ Äڵ带 ÀÛ¼ºÇϱâ À§ÇÑ ÈûÀ» ½ñ±âº¸´Ù ÄÁÅÙÃ÷ °³¹ß¿¡ ´õ ÁýÁßÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.
¡ß ÀûÀº ¸Þ¸ð¸® ¿ä±¸·® & ÀúÀü·Â ¼Òºñ(Small footprint & low power consumption)
¡ß SW¿¡¼ HW ·»´õ¸µÀ¸·ÎÀÇ ÀÚ¿¬½º·¯¿î À̵¿(Seamless transition from software to hardware rendering)
¡ß È®Àå °¡´É & ÁøÈ ¹ßÀü(Extensible & Evolving)
¡ß »ç¿ë Æí¸®¼º(Easy to use)
¡ß dzºÎÇÑ ¹®¼ ÀÚ·á(Well-documented)
Common profile°ú ´õ ÀÛÀº ¸Þ¸ð¸®°¡ ÇÒ´çµÈ Ç÷§ÆûÀ» À§ÇÑ Command-Lite profile·Î ³ª´µ¾îÁ® ÀÖÀ¸¸ç, ÇÙ½ÉÆÇ(core addition)°ú È®ÀåÆÇ(extension)À» ÅëÇØ ´õ ¸¹Àº ±â´ÉÀ» Ãß°¡ÀûÀ¸·Î Á¦°øÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºµÇ¾î ÀÖ´Ù. OpenGL 2.0ÀÇ ¼ºê¼ÂÀ̱⠶§¹®¿¡ OpenGLÀÇ ÀåÁ¡Àº À¯ÁöÇÑ »óÅ¿¡¼ ¸ð¹ÙÀÏ È¯°æ¿¡ ¿ä±¸µÇ´Â ±â´É¸¸À» Á¦°øÇϵµ·Ï °í¾ÈµÅ ÀÖ´Ù.
 | [Ç¥ 2] OpenGL-ES ÆÄÀÌÇÁ¶óÀÎ ÁÖ¿ä ±¸¼º |  | |  | |
| | Geometry Processing - Vertex Arrays - Points, Lines, Triangles - Matrix Stack - Viewport, DepthRange - Vertex Lighting - ShadeModel | Rasterization - Multisampling (optional) - Points & anti-aliased points - Lines & anti-aliased lines - Polygons Face Culling - PolygonOffset-fill mode | Texture Mapping - 2D Textures - Wrap repeat, edge_clamp - Compressed Texture - TexSubImages, Copy TexImage - Multitexture - RGVA pixel and packed pixel formats, L, LA - All Filters | | Fragment Processing - Fog - Scissor Test - Alpha Test - Stencil Test (optional) - Depth Test (optional) - Blending - Logic Op - Dither | FramebufferOperaions /Miscellaneous | ClearReadPixels / Alpha Test / DitherFlush / FinishHintGet-static stat (constants) | | | | |
| |
OpenGL ES´Â ÀÏÁ¾ÀÇ Ç¥ÁØ ÀÎÅÍÆäÀ̽ºÀ̹ǷΠ½ÇÁ¦ ÄÚµå´Â 3D ¿£Áø ¾÷üµéÀÌ Á¦ÀÛÇØ¾ß ÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ ºÎºÐÀº ¼ÒÇÁÆ®¿þ¾î ¶Ç´Â Çϵå¿þ¾î·Î ±¸ÇöÇØ¾ß¸¸ ÇÑ´Ù. ÇöÀç ¼ÒÇÁÆ®¿þ¾î·Î ±¸ÇöµÈ °ÍµéÀº ½ÃÀå¿¡ ³ª¿Í ÀÖ´Â Á¦Ç°µµ ¸¹ÀÌ ÀÖÀ¸³ª, ¾ÆÁ÷ Çϵå¿þ¾î·Î ±¸ÇöµÈ Á¦Ç°Àº ±× ¼ö°¡ ÀûÀº ÆíÀÌ´Ù.
Å©·Î³ë½º ±×·ìÀº OpenGL ES ¿Ü¿¡µµ ¿Àµð¿À, ºñµð¿Àó·³ ¹Ìµð¾î¿Í °ü·ÃµÈ OpenMLÀ» ÇÔ²² Ç¥ÁØÈÇϰí ÀÖ´Ù. ÇÏÁö¸¸ ¾ÆÁ÷±îÁö ±¹³»¿¡¼´Â ÀÌ¿Í °ü·ÃµÈ Ưº°ÇÑ È°µ¿Àº ¹Ì¹ÌÇÏ´Ù.
ÀÓº£µðµå ±×·¡ÇÈ ¶óÀ̺귯¸®
OpenGL-ES´Â EGL(Embedded Graphic Library)À̶ó´Â °ø¿ë Ç÷§Æû ÀÎÅÍÆäÀ̽º ·¹À̾ Æ÷ÇÔÇϰí Àִµ¥, EGLÀº Ç÷§ÆûÀ̳ª ¿î¿µÃ¼Á¦¿Í »ó°ü¾øÀÌ ±×·¡ÇÈ ÀÛ¾÷À» »ç¿ëÇÒ ¼ö ÀÖ°Ô µµ¿ÍÁÖ´Â °ÍÀÌ´Ù. Áï Ç÷§ÆûÀ̳ª ¿î¿µÃ¼Á¦°¡ ´Ù¸¥ ȯ°æ¿¡¼ ÀÛµ¿Çϰí ÀÖ´Â ·»´õ¸µ ¿£Áø¿¡¼µµ ¿øÇÏ´Â ±×·¡ÇÈ ÀÛ¾÷À» ÇÒ ¼ö ÀÖµµ·Ï ÇÔ¼öµéÀ» Áö¿øÇØ ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
 |
| [±×¸² 3] EGL ±¸¼ºµµ |
½ÇÁ¦·Î OpenGL ES¸¦ ±â¹ÝÀ¸·Î EGLÀ» ÀÌ¿ëÇØ ¸ð¹ÙÀÏ È¯°æ¿¡¼ »óÀ§ ·¹º§ÀÇ 3D ±×·¡ÇÈ API ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é [±×¸² 3]ó·³ ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ÀÌ ±×¸²Àº Àڹ٠ȯ°æÀÇ ¸ð¹ÙÀÏ 3D JSR184ÀÇ µ¿ÀÛ ¹æ½ÄÀ» ¼³¸íÇϰí ÀÖ´Ù.
GSM ½ÃÀå¿¡¼ ÁÖ¸ñ¹Þ´Â JSR184
ÃÖ±Ù OpenGL-ES¿Í ´õºÒ¾î ÁÖ¸ñ¹Þ°í ÀÖ´Â °ÍÀÌ JSR-184ÀÌ´Ù. GSMÀº À¯·´À» Áß½ÉÀ¸·Î ¹Ì±¹°ú Áß±¹ µî Àü ¼¼°è À̵¿Åë½Å ½ÃÀåÀÇ 70%¸¦ Â÷ÁöÇϰí ÀÖ´Ù. ÀÌó·³ GSM ½ÃÀåÀ» ¿¹ÀÇ ÁÖ½ÃÇϴ Ĩ, ´Ü¸»±â, ÄÁÅÙÃ÷ µî °ü·Ã ¾÷üµéÀº ÀڽŵéÀÇ Á¦Ç°À» Â÷º°ÈÇϱâ À§ÇØ ¼Ó¼Ó 3D¸¦ µµÀÔÇϰí ÀÖÀ¸¸ç, À̸¦ À§ÇØ ´ëºÎºÐÀÇ GSM ÆùÀÌ Ã¤¿ëÇϰí ÀÖ´Â Àڹ٠ȯ°æ¿¡ ÃÖÀûÈµÈ 3D ±×·¡ÇÈ API¸¦ ÇÊ¿ä·Î ÇÏ°Ô µÇ¾ú´Ù. ÀÌ·¯ÇÑ Çʿ並 ÃæÁ·½Ã۱â À§ÇØ Á¦Á¤µÈ °ÍÀÌ J2ME¸¦ À§ÇÑ Ç¥ÁØ 3D ±×·¡ÇÈ APIÀÎ JSR-184ÀÌ´Ù.
J2ME ȯ°æ¿¡¼ 3Â÷¿ø ±×·¡ÇÈÀ» ±¸ÇöÇϱâ À§ÇØ ³·Àº ·¹º§(low-level)ÀÎ OpenGLÀ» ÀÌ¿ëÇÒ °æ¿ì Äڵ尡 ±æ¾îÁ® MIDlet(MIDP Application)ÀÇ µ¢Ä¡°¡ Ä¿Áö¹Ç·Î ¼Óµµ°¡ ´À·ÁÁú ¼ö¹Û¿¡ ¾ø´Ù. ¶ÇÇÑ ÀÚ¹Ù 3D API¸¦ ÀÌ¿ëÇÒ °æ¿ì¿£ ½ºÆåÀÇ ¾çÀÌ ³Ê¹« ¹æ´ëÇϱ⠶§¹®¿¡ ¿ª½Ã MIDP(Mobile Information Device Profile)À» ÀÌ¿ëÇϱ⿣ ÀûÇÕÇÏÁö ¾Ê´Ù.
ÀÌ·¯ÇÑ ´ÜÁ¡À» º¸¿ÏÇϱâ À§ÇØ Á¦¾ÈµÈ JSR 184´Â J2ME¸¦ À§ÇÑ Ç¥ÁØ 3D ±×·¡ÇÈ API·Î¼, °´Ã¼ÁöÇâÀû ¾ð¾îÀÎ ÀÚ¹ÙÀÇ Æ¯¼ºÀ» À̾î¹Þ¾Æ ¿ÀºêÁ§Æ®ÀÇ Àç»ç¿ë°ú °øÀ¯¸¦ ¿øÄ¢À¸·Î ÇÑ´Ù. OpenGL ES¿Í JSR 184¿¡¼ »ç¿ëµÇ´Â ±×·¡ÇÈ °³³äÀ̳ª ´Ü°èÀû ÀýÂ÷´Â [±×¸² 4]¿Í °°ÀÌ µ¿ÀÏÇϳª ´Ù¸¸ Ç¥ÇöÇÏ´Â ¹æ½Ä¿¡¼ Â÷À̸¦ º¸ÀδÙ.
 |
| [±×¸² 4]JSR 184 ±×·¡ÇÈ Ã³¸® ´Ü°è |
OpenGL ES¿Í JSR184ÀÇ ºñ±³´Â OpenGL°ú ÀÚ¹Ù 3D¸¦ ºñ±³ÇÏ´Â °Í°ú À¯»çÇÑ °üÁ¡¿¡¼ ¼³¸íÇÒ ¼ö ÀÖ´Ù. Áï OpenGLÀÌ 3D ±×·¡ÇÈÀÇ ±âº»ÀûÀÎ ±â´ÉÀ» Á¦°øÇÏ´Â µ¥ ºñÇØ ÀÚ¹Ù 3D´Â »óÀ§ ·¹º§±îÁö ±â´ÉÀ» Á¦°øÇÏ´Â °Í°ú ¸¶Âù°¡Áö·Î OpenGL ES´Â ¸ð¹ÙÀÏ È¯°æ¿¡ ÀûÇÕÇÑ 3D ±×·¡ÇÈÀÇ ±âº»ÀûÀÎ ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀ̶ó¸é JSR184´Â J2ME ȯ°æ¿¡¼ ¸ð¹ÙÀÏ 3D¸¦ Áö¿øÇÒ ¼ö ÀÖµµ·Ï ¸¸µç »óÀ§ ·¹º§ÀÇ ÆÐŰÁö¶ó°í ÇÒ ¼ö ÀÖ´Ù.
±¹³» À̵¿Åë½Å »ç¾÷ÀÚÀÇ 3D Ç¥ÁØ
SKÅÚ·¹ÄÞÀº ÀÚüÀûÀ¸·Î 3D ¿£ÁøÀ» žÀçÇÑ GIGA(Graphic Instruction Graphic Acceleration) ´Ü¸»±â ±Ô°ÝÀ» ÅëÇØ 3D Ç¥ÁØÀ» ÁöÁ¤ÇÏ¿´´Ù. ¿©±â¿¡´Â OpenGL ES API¿Í ÇÔ²² ÀÚüÀûÀÎ 3D °ü·Ã APIµéÀÌ Æ÷ÇԵǾî ÀÖÀ¸¸ç °è¼Ó ¾÷±×·¹À̵åµÇ°í ÀÖ´Ù. KTF´Â OpenGL ES ±Ô°ÝÀ» Æ÷ÇÔÇϰí ÀÖ´Â °í¹ÌµåÀÇ 3D ¿£ÁøÀ» Ç¥ÁØÀ¸·Î ÁöÁ¤ÇÏ¿´°í, ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇÑ »óÀ§ ·¹º§ API¿¡ ´ëÇÑ Ç¥ÁØÀ» ¸¶·ÃÇϰí ÀÖ´Ù.
G3 SDK¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö
G3 SDK´Â °ÔÀÓ °³¹ßÀÚ°¡ Ưº°ÇÑ Çϵå¿þ¾î ÀåÄ¡ ¾øÀÌ ÀÓº£µðµåÇü °ÔÀÓ ¼ÒÇÁÆ®¿þ¾î¸¦ PC¿¡¼ °³¹ßÇÒ ¼ö Àִ ȯ°æÀ» Á¦°øÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î Á¦ÀÛµÈ ¼ÒÇÁÆ®¿þ¾î °³¹ß µµ±¸ÀÌ´Ù. µû¶ó¼ ¸ð¹ÙÀÏ 3D¿¡ °ü½É ÀÖ´Â »ç¶÷À̶ó¸é ´©±¸³ª ½±°Ô ¸ð¹ÙÀÏ 3D ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇϵµ·Ï ÇØÁØ´Ù. G3 SDKÀÇ ±¸Á¶¿Í °£´ÜÇÑ ¿¹Á¦¸¦ ¾Ë¾Æº¸ÀÚ.
G3 SDKÀÇ ±¸Á¶
G3 SDK¿¡ žÀçµÈ 3D ¿£ÁøÀº OpenGL ES 1.0°ú ȣȯÀº ¹°·Ð ¸ðµ¨ ¹× ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌÅÍ ·Îµù°ú º» ¾Ö´Ï¸ÞÀÌ¼Ç µî°ú °°Àº Áøº¸µÈ ÇüÅÂÀÇ ±â´ÉÀ» Á¦°øÇÔÀ¸·Î½á °³¹ßÀÚ¿¡°Ô °í±Þ °ÔÀÓÀ» °³¹ßÇÒ ¼ö Àִ ȯ°æÀ» Áö¿øÇÑ´Ù.
 |
| [±×¸² 5] G3 SDK ±¸Á¶ |
G3 SDK´Â [±×¸² 5]¿Í °°Àº APIµé·Î ±¸¼ºµÇ¸ç, °¢ APIµéÀº °ÔÀÓ °³¹ßÀڵ鿡°Ô À¯¿ëÇÑ ±â´ÉÀ» Áö¿øÇÑ´Ù. APIÀÇ Á¾·ù¿Í °¢ APIÀÇ ¿ªÇÒÀº <Ç¥ 3>°ú °°´Ù. G3 SDKÀÇ ÀÚ¼¼ÇÑ ³»¿ëÀº °³¹ßÀÚ »çÀÌÆ®(http://g3d.co.kr)¿¡¼ ȸ¿ø °¡ÀÔÇÑ ÈÄ SDK¸¦ ´Ù¿î¹Þ¾Æ ¼³Ä¡ÇØ º¸¸é È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ APIµéÀÇ ½ÇÁ¦ ±¸ÇöÀº ´Ü¸»±âÀÇ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ȯ°æ¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ°ÚÁö¸¸ °ÔÀÓ °³¹ßÀÚµéÀÌ ÀÌ·¸°Ô ±¸Çö±îÁö ½Å°æ ¾µ ÇÊ¿ä´Â ¾øÀ» °ÍÀÌ´Ù.
 | [Ç¥ 3] G3 SDK¿¡¼ Á¦°øµÇ´Â API |  | |  | |
| | API Á¾·ù | ¿ªÇÒ | | 3D Graphics API | »óÀ§ ·¹º§ API Á¦°ø(3D ¸ðµ¨·Îµù, 3D ¾Ö´Ï¸ÞÀÌ¼Ç ·Îµù) OpenGL, ES APIÁ¦°ø(ÅØ½ºÃ³ ¸ÊÇÎ, ¼ÎÀ̵ù, ¾ÈƼ ¾Ù¸®¾î½Ì, ¶óÀÌÆÃ) | | 2D Graphics API | À̹ÌÁö µ¥ÀÌÅÍ ·Îµù, bitblit, ½ºÇÁ¶óÀÌÆ®, ¾ËÆÄ ºí·»µù | | Standard API | ¹®ÀÚ¿ ¹× ¸Þ¸ð¸® °ü·Ã ANSI Cȣȯ | | Sound API | MIDI, wav, MA2, MA3, MA5 Ç÷¹ÀÌ Áö¿ø (Çϵå¿þ¾î Á¾¼ÓÀû) | | Font API | 16x16, 32x32, °¢°¢ 1Á¶¾¿ Á¦°ø, ÆùÆ® È¿°ú | | File I/O API | ±âº» ÀÔÃâ·Â Áö¿ø | | Network API | ³×Æ®¿öÅ© Á¢¼Ó Áö¿ø | | | | |
| |
G3 SDK´Â ±âº»ÀûÀ¸·Î PC ȯ°æ¿¡¼ VC++¸¦ ÀÌ¿ëÇØ DLL ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. »ý¼ºµÈ DLL ÆÄÀÏÀº ¿¡¹Ä·¹ÀÌÅÍ¿¡¼ ·ÎµùµÇ¾î µ¿ÀÛÇÏ°Ô µÈ´Ù. ¿¡¹Ä·¹ÀÌÅÍ »ó¿¡¼ÀÇ µ¿ÀÛÀº ¸ð¹ÙÀÏ ´Ü¸»±â¿¡¼µµ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇϵµ·Ï ±¸¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ¿¡¹Ä·¹ÀÌÅ͸¦ ÅëÇØ µð¹ö±ë °úÁ¤À» °ÅÄ¡¸é¼ À©µµ¿ì °³¹ß ȯ°æ¿¡¼ °ÔÀÓ ÇÁ·Î±×·¥À» ¿Ï¼ºÇÒ ¼ö ÀÖ°Ô µÈ´Ù. <±×¸² 6>Àº ÃÖÁ¾ÀûÀ¸·Î Ÿ°Ù ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇϱâ À§ÇÑ °³¹ß °úÁ¤À» ³ªÅ¸³»°í ÀÖÀ¸¸ç µð¹ö±ëÀÌ ¿Ï·áµÈ °ÔÀÓÀÇ °æ¿ì Ÿ°Ù ´Ü¸»±â¿ë ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇØ ÄÄÆÄÀÏÇϸé ÃÖÁ¾ÀûÀΠŸ°Ù ¹ÙÀ̳ʸ®°¡ »ý¼ºµÈ´Ù.
 |
| [±×¸² 6] G3 SDK¸¦ ÀÌ¿ëÇÑ ¸ð¹ÙÀÏ ´Ü¸»±â¿ë °ÔÀÓ °³¹ß °úÁ¤ |
G3 SDK¸¦ ÀÌ¿ëÇØ °³¹ßµÈ °ÔÀÓ ¼ÒÇÁÆ®¿þ¾î´Â [±×¸² 6]ÀÇ °úÁ¤À» °ÅÃÄ ÃÖÁ¾ÀûÀ¸·Î G3 SDK ¶óÀ̺귯¸®°¡ žÀçµÈ ¸ð¹ÙÀÏ ±â±â¿¡¼ µ¿ÀÛÇÒ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÌ´Ù. G3 SDK ¼³Ä¡½Ã Á¦°øµÇ´Â ¡®G3 °ÔÀÓ ¸¶¹ý»ç¡¯¸¦ ÅëÇØ °ÔÀÓ °³¹ßÀ» À§ÇÑ ÅÛÇø´ ¼Ò½º¸¦ VC++ ȯ°æ¿¡¼ ½±°í ºü¸£°Ô ¸¸µé ¼ö ÀÖ´Ù.
3D ±×·¡ÇÈ ¿¹Á¦
G3 SDK´Â 3D °ÔÀÓÀ» Áö¿øÇϱâ À§ÇÑ ÇÏÀ§ ·¹º§ API¿Í »óÀ§ ·¹º§ API¸¦ Á¦°øÇÑ´Ù. ÇÏÀ§ ·¹º§ API´Â OpenGL ES 1.0¿¡ ȣȯµÇ´Â ÇüÅ·ΠÁ¦°øµÇ°í, »óÀ§ ·¹º§ API´Â 3D ¸ðµ¨, ¿¡´Ï¸ÞÀÌ¼Ç ·Î´õ, ¿¡´Ï¸ÞÀÌ¼Ç ¿£Áø, °¢Á¾ 3D ÀÌÆåÆ® ó¸® À¯Æ¿¸®Æ¼ API·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
 |
| [ȸé 1] G3 ÇÁ·ÎÁ§Æ® ¼³Á¤ °ÔÀÓ °³¹ß °úÁ¤ |
¸ÕÀú 3D ÇÁ·Î±×·¡¹ÖÀ» ÇÏ·Á¸é [ȸé 1]°ú °°ÀÌ G3_3Dg.lib°ú gl.libÀ» ¸µÅ©½ÃÄÑ¾ß Çϰí gl.h¿Í G3_3Dg.h¸¦ ÀÎŬ·çµå(include)½ÃÄÑ¾ß ÇÑ´Ù. ±×¸®°í ´Ù¸¥ ½ÇÇà ÆÄÀϰú ¸¶Âù°¡Áö·Î G3_3Dg.dll°ú g3.dllÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¿©±â¼´Â 3D ±×·¡ÇȽºÀÇ ±âÃÊ ÀÌ·ÐÀ» ¾Ë°í ÀÖ´Ù°í °¡Á¤ÇÑ »óÅ¿¡¼ ¿¹Á¦¸¦ Áß½ÉÀ¸·Î G3 SDK¸¦ »ç¿ëÇØ¼ ¾î¶»°Ô 3D ±×·¡ÇȽº¸¦ ±×¸± °ÍÀÎÁö¿¡ ´ëÇØ¼ ¿¹Á¦¸¦ Áß½ÉÀ¸·Î ±â¼úÇϵµ·Ï ÇϰڴÙ. ÀÌ ¿¹Á¦´Â OpenGL ES 1.0ÀÇ ÇÏÀ§ ·¹º§ API¸¦ »ç¿ëÇØ¼ ÇǶó¹Ìµå ÇüÅÂÀÇ °´Ã¼¸¦ ÅëÇØ 3Â÷¿ø °ø°£¿¡¼ RGB Ä÷¯ °ªÀ» Ç¥½ÃÇÏ´Â ¿¹ÀÌ´Ù.
| [¸®½ºÆ® 1-1] 3D ÇǶó¹Ìµå ±×¸®±â ¼Ò½º - PART I | | | |
#include "g3def.h"
#include "g3stdlib.h"
#include "g3graphic.h"
#include "g3res.h"
#include "gl.h"
G3DRAWSURFACE g3Draw[2]; // LCD framebuffer
GLvoid ReSizeGLScene(GLsizei width, GLsizei height);
int InitGL(GLvoid);
int DrawGLScene(GLvoid);
// Viewport Stuff
static unsigned short G3wWidth, G3wHeight;
unsigned short trans_color; // tmp trans_color
GLfloat rtri, xrot; // Angle For The Triangle ( NEW )
GLfloat depth = -5.0;
int nflip;
void G3_Main(void *arg)
{
int k;
G3wWidth = 240;
G3wHeight = 176;
for (k = 0 ; k < 2 ; k++)
{
G3_LcdSurfaceGet(&g3Draw[k], k);
}
G3_SurfaceSet(&g3Draw[0]);
nflip = 1;
ReSizeGLScene(G3wWidth, G3Height);
InitGL();
while (1)
{
// Normal Blit
G3_BitBlt(NULL, &g3Draw[nflip], 0, 0, shop_s.iWidth,shop_s.iHeight,
(unsigned char*)&shop_s, 0, 0, shop_s.iWidth,shop_s.iHeight );
DrawGLScene(); // Draw 3D | |
 |
[¸®½ºÆ® 1-1]Àº G3 SDK¸¦ »ç¿ëÇØ¼ ¾î¶»°Ô 3D ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´ÂÁö º¸¿©ÁÖ°í ÀÖ´Ù. ¸ÕÀú 3D ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ·Á¸é gl.h Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµå½ÃÄÑ¾ß ÇÑ´Ù. ±×¸®°í 2D¿¡¼ÀÇ ÀÛ¾÷°ú °°ÀÌ G3_LcdSurfaceGet() ÇÔ¼ö·Î LCD ȸé°ú ´ëÀÀµÇ´Â °¡»ó ÇÁ·¹ÀÓ ¹öÆÛ¸¦ ¾ò°Ô µÇ¸ç, ±× ÈÄ »ý¼ºµÈ Ç¥¸é ¹öÆÛ¸¦ G3_SurfaceSet() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ LCD ȸ鿡 ¼³Á¤ÇÑ´Ù.
3D ±×·¡ÇȽºÀÇ »ç¿ëÀ» À§Çؼ´Â Ãʱ⠼³Á¤À» ÇØ¾ß ÇÑ´Ù. ResizeGLScene() ÇÔ¼ö¿Í InitGL() ÇÔ¼ö¸¦ ÅëÇØ¼ 3D ±×·¡ÇȽº °ü·Ã ÃʱâÈ ÀÛ¾÷À» ÇÑ´Ù([¸®½ºÆ® 1-2]).
| [¸®½ºÆ® 1-2] 3D ÇǶó¹Ìµå ±×¸®±â ¼Ò½º - PART II | | | |
// Resize And Initialize The GL Window
GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}
glCreate(0, 0, width, height);
glViewport(0,0, width, height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
glPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}
// All Setup For OpenGL Goes Here
int InitGL(GLvoid)
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black Background
glClearDepthf(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
// Really Nice Perspective Calculations
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
return 1; | |
 |
ResizeGLScene() ÇÔ¼ö¿¡¼´Â 3D ÀÛ¾÷À» À§ÇÑ ¿µ¿ªÀÇ »ý¼º, ºäÆ÷Æ® ¼³Á¤, ÇÁ·ÎÁ§¼Ç °ü·Ã ¼³Á¤ µîÀ» ÇÏ°Ô µÈ´Ù. glCreate() ÇÔ¼ö¸¦ »ç¿ëÇØ 3D ÀÛ¾÷ ¿µ¿ªÀ» »ý¼ºÇϰí, glViewport() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ½ÇÁ¦ LCD¿Í »ç»óµÇ´Â ºäÆ÷Æ®¸¦ ¼³Á¤ÇÑ´Ù. glPerspective() ÇÔ¼ö¸¦ ÅëÇØ ÇÁ·ÎÁ§¼Ç ¸ÅÆ®¸¯½º¿¡ ´ëÇÑ ¼³Á¤À» ÇÑ´Ù. [¸®½ºÆ® 1-2]¿¡¼ ÀÛ¾÷µÈ ³»¿ëÀ» »ìÆìº¸¸é ³Êºñ¸¦ width·Î Çϰí, ±× ³ôÀ̸¦ height·Î ÇÏ´Â ±×¸®±â ¿µ¿ªÀÌ »ý¼ºµÇ¸ç, ºäÆ÷Æ®ÀÇ Å©±â´Â ±×¸®±â ¿µ¿ªÀÇ Å©±â¿Í µ¿ÀÏÇϰí, Ç¥ÇöµÉ 3D ¿ÀºêÁ§Æ®µéÀº ¿ø±Ù¹ý ±â¹ÝÀ¸·Î ±×·ÁÁö´Â ¼³Á¤À» ÇÑ °ÍÀÌ µÈ´Ù.
InitGL() ÇÔ¼ö¿¡¼´Â GLÀ» ÅëÇØ¼ ±×¸®°íÀÚ ÇÏ´Â Á» ´õ ¼¼¹ÐÇÑ ¼³Á¤À» ÇÏ°Ô µÇ´Âµ¥, ±× ³»¿ëÀ» »ìÆìº¸ÀÚ. glShadeModel() ÇÔ¼ö¸¦ ÅëÇØ¼ ¼ÎÀ̵ùÀ» ¾î¶»°Ô ÇÒ °ÍÀÎÁö ¼³Á¤ÇÑ´Ù. G3 SDK¿¡¼´Â ÆòÆòÇÑ ¼ÎÀ̵ù(GL_FLAT)°ú ºÎµå·¯¿î ¼ÎÀ̵ù(GL_SMOOTH)ÀÌ Á¦°øµÈ´Ù. ´ÙÀ½À¸·Î glClearColor() ÇÔ¼ö¸¦ ÅëÇØ¼ »ý¼ºµÈ ȸéÀÇ ÃÊ±â ¹è°æ»öÀ» ¼³Á¤ÇÑ´Ù. glClearColor()ÀÇ Ã¹ ¹øÂ° ÀÎÀÚ´Â R°ª, µÎ ¹øÂ° ÀÎÀÚ´Â G°ª, ¼¼ ¹øÂ° ÀÎÀÚ´Â B°ªÀ» ³ªÅ¸³»¸ç ¸¶Áö¸· ÀÎÀÚ´Â ¾ËÆÄ(alpha) °ªÀÌ´Ù. ±× ´ÙÀ½ÀÇ ¼¼ ¶óÀÎÀº ±íÀÌ ¹öÆÛ(depth buffer)¿Í °ü·ÃµÈ °ÍÀÌ´Ù.
Áö±Ý±îÁö ResizeGLScene() ÇÔ¼ö¿Í InitGL() ÇÔ¼ö¸¦ ÅëÇØ 3D ±×·¡ÇȽº¸¦ »ç¿ëÇϱâ À§ÇÑ Ãʱ⠼³Á¤À» ¿Ï·áÇß´Ù. µû¶ó¼ 3D °´Ã¼¸¦ ±×¸± ¼ö Àִ ȯ°æÀÌ µÇ¾ú´Ù. ÀÌÁ¦ºÎÅÍ ½ÇÁ¦·Î 3D°´Ã¼°¡ ¾î¶»°Ô ±×·ÁÁö´ÂÁö »ìÆìº¸ÀÚ([¸®½ºÆ® 1-3]).
| [¸®½ºÆ® 1-3] 3D ÇǶó¹Ìµå ±×¸®±â ¼Ò½º - PART III | | | |
int DrawGLScene(GLvoid)
// Here's Where We Do All The Drawing
{
/* Vertices */
static const GLfloat cubeVertices[] =
{
0.0f, 1.0f, 0.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
0.0f, 1.0f, 0.0f,
1.0f,-1.0f, 1.0f,
1.0f,-1.0f, -1.0f,
0.0f, 1.0f, 0.0f,
1.0f,-1.0f, -1.0f,
-1.0f,-1.0f, -1.0f,
0.0f, 1.0f, 0.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f
};
/* Vertex Color */
static const GLfloat cubeColors[] =
{
1.0f,0.0f,0.0f, 1.0f,
0.0f,1.0f,0.0f, 1.0f,
0.0f,0.0f,1.0f, 1.0f,
1.0f,0.0f,0.0f, 1.0f,
0.0f,0.0f,1.0f, 1.0f,
0.0f,1.0f,0.0f, 1.0f,
1.0f,0.0f,0.0f, 1.0f,
0.0f,1.0f,0.0f, 1.0f,
0.0f,0.0f,1.0f, 1.0f,
1.0f,0.0f,0.0f, 1.0f,
0.0f,0.0f,1.0f, 1.0f,
0.0f,1.0f,0.0f, 1.0f
};
/* Vertex indices */
static const GLbyte cubeIndices[] =
{
0, 1, 2, 3, 4, 5, /* front */
6, 7, 8, 9, 10, 11, /* back */
};
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glTranslatef(0.0f,0.0f, depth); // Move Left 1.5 Units And Into The Screen 6.0
glRotatef(rtri,0.0f,1.0f,0.0f); // Rotate The Triangle On The Y axis ( NEW )
glRotatef(xrot,0.1f,0.0f,0.0f); // Rotate The Triangle On The Z axis ( NEW )
glVertexPointer (3, GL_FLOAT, 0, cubeVertices);
glColorPointer (4, GL_FLOAT, 0, cubeColors);
glDrawElements (GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, cubeIndices);
trans_color = *(unsigned short*)glGetDisplayBuffer(); //bufferÀÇ Ã¹ ¹øÂ° °ªÀÌ Åõ¸í»öÀÌ´Ù.
G3_3DTransBlt(NULL, &g3Draw[nflip], 0, 0, G3wWidth, G3wHeight, (unsigned char*)glGetDisplayBuffer(), 0, 0, G3wWidth, G3wHeight, trans_color);
rtri+=0.2f; // Increase The Rotation Variable For The Triangle ( NEW )
return 1;
} | |
 |
¸ÕÀú glMatrixMode() ÇÔ¼ö¸¦ ÅëÇØ¼ ¸ðµ¨ºä Çà·ÄÀ» ¼±ÅÃÇÑ µÚ glLoadIdentity ÇÔ¼ö·Î ¸ÅÆ®¸¯½º¸¦ ÃʱâȽÃŲ´Ù. glClear() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ Ä÷¯ ¹öÆÛ(GL_COLOR_BUFFER_BIT)¿Í ±íÀÌ ¹öÆÛ(GL_DEPTH_BUFFER_BIT)¸¦ ºñ¿î ´ÙÀ½ glTranslatef() ÇÔ¼ö·Î ¹°Ã¼¸¦ ±×¸± À§Ä¡·Î À̵¿Çϸç, glRotatef() ÇÔ¼ö¸¦ ÅëÇØ 3D °´Ã¼°¡ YÃà°ú XÃàÀ» ±âÁØÀ¸·Î ȸÀüÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù.
º» ¿¹Á¦¿¡¼ ±×·ÁÁö´Â 3D °´Ã¼´Â 3Â÷¿ø ÇǶó¹ÌµåÀÇ ÇüŸ¦ °¡Áö´Âµ¥, »ï°¢ÇüÀ» ÀÌ¿ëÇØ¼ ÇǶó¹ÌµåÀÇ ¸éÀ» ¼³Á¤ÇÏ°í »ï°¢ÇüÀÇ ²ÀÁöÁ¡¸¶´Ù Á¤Á¡ÀÌ °¡Áö´Â »öÀ» ¼³Á¤Çß´Ù. ±×¸®°í Á¤Á¡µéÀ» ±â¼úÇÏ´Â ¹æ¹ýÀº 3Â÷¿ø µ¥Ä«¸£Æ® ÁÂÇ¥°è¸¦ »ç¿ëÇØ¼ Ç¥ÇöÇß´Ù. OpenGL ES¿¡¼ »ç¿ëµÇ´Â 3Â÷¿ø µ¥Ä«¸£Æ® ÁÂÇ¥°è´Â zÃàÀÇ ¹æÇâÀÌ ¹Ý´ë°¡ µÇ´Â °ÍÀ» °í·ÁÇÏ¸é º° ¹«¸® ¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
»ï°¢ÇüÀ» ±×¸®´Â ºÎºÐÀÌ ¸ðµÎ 4°³·Î µÇ¾î Àִµ¥ ÀÏ´Ü Á¾À̸¦ ÁغñÇØ¼ °¢ Á¤Á¡À» Á¾ÀÌ¿¡ ¼ø¼´ë·Î Âï¾îº¸°í ±× Á¤Á¡À» ¹Ý½Ã°è ¹æÇâÀ¸·Î ¼ø¼´ë·Î À̾ÀÚ. »ï°¢ÇüÀÌ ±×·ÁÁú °ÍÀÌ´Ù. ÀÌ·± ½ÄÀ¸·Î 4°³ÀÇ »ï°¢ÇüÀÌ ¸ð¿© [±×¸² 7]¿¡¼ º¸´Â ¹Ù¿Í °°Àº °´Ã¼°¡ »ý¼ºµÈ´Ù. 3D °ø°£¿¡ °´Ã¼¿¡ ´ëÇÑ ±â¼úÀÌ ³¡³ª¸é G3_3DTransBlt() ÇÔ¼ö¸¦ »ç¿ëÇØ ¹öÆÛ¿¡ ±×¸° °´Ã¼¸¦ LCD¿¡ »Ñ·ÁÁÖ¸é LCD ȸ鿡 3D °´Ã¼°¡ Ç¥ÇöµÈ´Ù. ¿¹Á¦¸¦ ½ÇÇàÇÑ È¸éÀº [±×¸² 7]°ú °°´Ù.
 |
| [±×¸² 7] 3D ÇǶó¹Ìµå ±×¸®±â ½ÇÇà ȸé |
º» ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦
[±×¸² 8]´Â ÀÌ¹Ì ¸¸µé¾îÁø 3D ¸ðµ¨°ú 3D ¾Ö´Ï¸ÞÀÌ¼Ç Á¤º¸¸¦ ÀÐ¾î¼ G3 API ÇÔ¼ö¸¦ »ç¿ëÇØ µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. 3D ¸ðµ¨ÀÇ »ý¼º°ú 3D ¾Ö´Ï¸ÞÀ̼ÇÀ» »ý¼ºÇÏ´Â °ÍÀº G3 SDKÀÇ ¡®G3 Character Design Guide¡¯ ¹®¼¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. G3 SDK¿¡¼´Â Skinned Bone AnimationÀ» Áö¿øÇÑ´Ù(Skinned Bone AnimationÀº °è»êÀÌ ¿ëÀÌÇÑ »À´ëÀÇ ¿òÁ÷ÀÓÀ» ±âÁØÀ¸·Î »ó´ëÀûÀÎ °ªÀ¸·Î ½ºÅ² ¸Þ½Ã¸¦ º¯Çü½ÃŰ´Â ¾Ö´Ï¸ÞÀÌ¼Ç ¹æ¹ýÀ» ¸»ÇÑ´Ù).
 |
| [±×¸² 8] ¾Æ¹ÙŸ ¾Ö´Ï¸ÞÀÌ¼Ç ½ÇÇà ȸé |
¸ÕÀú 3D ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ·Á¸é gl.h Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµå½ÃÄÑ¾ß ÇÑ´Ù. ´ÙÀ½À¸·Î G3_LcdSurfaceGet() ÇÔ¼öÀÇ È£ÃâÀ» ÅëÇØ¼ LCD ȸé°ú ´ëÀÀµÇ´Â °¡»ó ÇÁ·¹ÀÓ ¹öÆÛ¸¦ ¾ò°Ô µÇ¸ç, ±× ÈÄ »ý¼ºµÈ Ç¥¸é ¹öÆÛ¸¦ G3_SurfaceSet() ÇÔ¼ö¸¦ ÀÌ¿ëÇØ LCD ȸ鿡 ¼³Á¤ÇÑ´Ù.
LCD È¸é »ç¿ë¿¡ ´ëÇÑ ÃʱâȰ¡ ³¡³ª¸é InitGame() ÇÔ¼ö¸¦ ÅëÇØ¼ ÇÊ¿äÇÑ Á¤º¸¸¦ ÃʱâÈÇÑ´Ù. InitGame()Àº glCreate() ÇÔ¼ö¸¦ ÅëÇØ »ç¿ëµÇ´Â GL À©µµ¿ì¸¦ »ý¼ºÇϰí, G3_3DgCreate() ÇÔ¼ö¸¦ ÅëÇØ »ç¿ëÇÒ ¾Æ¹ÙŸ¸¦ »ý¼ºÇϰí, gAddObjectMeshFromeFile() ÇÔ¼ö¸¦ ÅëÇØ ¾Æ¹ÙŸ¸¦ ·ÎµùÇϰí, gAddObjectAnimFromFile() ÇÔ¼ö¸¦ ÅëÇØ ¾Æ¹ÙŸ ¾Ö´Ï¸ÞÀ̼ÇÀ» ·ÎµùÇϰí, G3_3DgSetAvatarPosition() ÇÔ¼ö¸¦ ÅëÇØ ¾Æ¹ÙŸÀÇ À§Ä¡¸¦ ¼³Á¤Çϰí, G3_3DgGetSkinnedMeshBBox() ÇÔ¼ö¸¦ »ç¿ëÇØ ÁöÁ¤µÈ ¾Æ¹ÙŸ °´Ã¼ÀÇ ¹Ù¿îµù Á¤º¸¸¦ ¼³Á¤ÇÏ´Â µî ¾Æ¹ÙŸ ¾Ö´Ï¸ÞÀ̼ǿ¡ ´ëÇÑ ¸ðµâÀÇ Ãʱâȸ¦ ¼öÇàÇÑ´Ù. ±× ³»¿ëÀ» º¸¸é [¸®½ºÆ® 2-2]¿Í °°´Ù
| [¸®½ºÆ® 2-1] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦ - PART I | | | |
#include "g3def.h"
#include "g3stdlib.h"
#include "g3graphic.h"
#include "g3res.h"
#include "G3_3Dg.h"
#include "gl.h"
unsigned char g_bReady = FALSE;
G3DRAWSURFACE g3Draw[2]; // LCD framebuffer
int nAvatarNum = 0;
GLvoid ReSizeGLScene(GLsizei width, GLsizei height);
int InitGame();
void KeyProcess();
void UpdateGame();
unsigned char gAddObjectMeshFromFile(unsigned char nObjID, char* pNGOName);
unsigned char gAddObjectAnimFromFile(unsigned char nObjID, char* pNBAName);
int SynchFrame ( void );
int InitGL(GLvoid);
static unsigned short G3wWidth, G3wHeight;
int nflip;
unsigned short trans_color; //tmp trans_color
void G3_Main(void *arg)
{
int k;
G3wWidth = 240;
G3wHeight = 176;
for (k = 0 ; k < 2 ; k++)
{
G3_LcdSurfaceGet(&g3Draw[k], k);
}
G3_SurfaceSet(&g3Draw[0]);
nflip = 1;
InitGame();
ReSizeGLScene(G3wWidth, G3wHeight); // Set Up Our Perspective GL Screen
InitGL(); // Initialize Our Newly Created GL Window
while(1)
{
if( SynchFrame () )
{
KeyProcess();
// Normal Blit
G3_BitBlt(NULL, &g3Draw[nflip],
0, 0, shop_s.iWidth, shop_s.iHeight,
(unsigned char*)&shop_s,
0, 0, shop_s.iWidth,shop_s.iHeight);
UpdateGame(); | |
 |
| [¸®½ºÆ® 2-2] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦ - PART II | | | |
int InitGame(void)
{
long BBoxMin[3], BBoxMax[3];
glCreate(0, 0, G3wWidth, G3wHeight);
nAvatarNum = 16;
G3_3DgCreate(nAvatarNum);
// Add Object & Set Position..
gAddObjectMeshFromFile(0, "catgirl.NGO");
G3_3DgSetAvatarPosition(0, 800, -350, -4096);
gAddObjectAnimFromFile(0, "dance.NBA");
g_bReady = TRUE;
G3_3DgGetSkinnedMeshBBox(0, "tegingov5.NGO", BBoxMin, BBoxMax);
return 0;
} | |
 |
gAddObjectMeshFromFile() ÇÔ¼ö´Â G3 SDK°¡ Á¦°øÇÏ´Â ÆÄÀÏ ÀÔÃâ·ÂÀ» ÅëÇØ ¸ðµ¨ µ¥ÀÌÅ͸¦ Àоî¿Â ÈÄ Àоî¿Â µ¥ÀÌÅ͸¦ G3_3DgAddSkinnedMeshToAvatar() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ¾Æ¹ÙŸ¿¡ ¼³Á¤ÇÏ´Â ºÎºÐÀÌ´Ù.
gAddObjectAnimFromFile() ÇÔ¼ö´Â G3 SDK°¡ Á¦°øÇÏ´Â ÆÄÀÏ ÀÔÃâ·ÂÀ» ÅëÇØ ¸ðµ¨ÀÇ ¾Ö´Ï¸ÞÀÌ¼Ç µ¥ÀÌÅ͸¦ Àоî¿Â ÈÄ G3_3DgAddBoneAnimToAvatar() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ÁöÁ¤µÈ ID¿¡ ÇØ´çÇÏ´Â ¾Æ¹ÙŸ¿¡ ¾Ö´Ï¸ÞÀ̼ÇÀ» Ãß°¡Çϰí ÁöÁ¤ÇÑ´Ù. G3_3DgPalyAvatarAnim() ÇÔ¼ö¸¦ ÅëÇØ¼ ¾Ö´Ï¸ÞÀ̼ÇÀ» ½ÇÇàÇϸç, G3_3DgRepeatAvatarAnim() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ÁöÁ¤µÈ ¾Ö´Ï¸ÞÀ̼ÇÀÇ ¹Ýº¹ Ƚ¼ö¸¦ ÁöÁ¤ÇÑ´Ù.
µ¥ÀÌÅÍ¿¡ ´ëÇÑ ÀÛ¾÷ÀÌ ³¡³ª¸é 3D ±×·¡ÇȽº »ç¿ëÀ» À§ÇØ ResizeGLScene() ÇÔ¼ö¿Í InitGL() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ 3D ±×·¡ÇȽº °ü·Ã ÃʱâÈ ÀÛ¾÷À» ÇÑ´Ù([¸®½ºÆ® 2-4]).
ResizeGLScene() ÇÔ¼ö¿¡¼´Â 3D ÀÛ¾÷À» À§ÇÑ ¿µ¿ªÀÇ »ý¼º, ºäÆ÷Æ® ¼³Á¤, ÇÁ·ÎÁ§¼Ç °ü·Ã ¼³Á¤ µîÀ» ÇÏ°Ô µÈ´Ù. glCreate() ÇÔ¼ö¸¦ »ç¿ëÇØ 3D ÀÛ¾÷ ¿µ¿ªÀ» »ý¼ºÇϰí, glViewport() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ½ÇÁ¦ LCD¿Í »ç»óµÇ´Â ºäÆ÷Æ®¸¦ ¼³Á¤ÇÑ´Ù. glPerspective() ÇÔ¼ö¸¦ ÅëÇØ ÇÁ·ÎÁ§¼Ç ¸ÅÆ®¸¯½º¿¡ ´ëÇÑ ¼³Á¤À» ÇÑ´Ù. [¸®½ºÆ® 2-4]¿¡¼ ÀÛ¾÷µÈ ³»¿ëÀ» »ìÆìº¸¸é ³Êºñ¸¦ width·Î, ³ôÀ̸¦ height·Î ÇÏ´Â ±×¸®±â ¿µ¿ªÀÌ »ý¼ºµÇ¸ç, ºäÆ÷Æ®ÀÇ Å©±â´Â ±×¸®±â ¿µ¿ªÀÇ Å©±â¿Í µ¿ÀÏÇϰí, Ç¥ÇöµÉ 3D ¿ÀºêÁ§Æ®µéÀº ¿ø±Ù¹ý¿¡ ±Ù°£Çؼ ±×·ÁÁö´Â ¼³Á¤À» ÇÑ °ÍÀÌ µÈ´Ù.
| [¸®½ºÆ® 2-3] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦ - PART III | | | |
unsigned char gAddObjectMeshFromFile(unsigned char nObjID, char* pNGOName)
{
unsigned char* ngobuffer;
DWORD dwFileSize;
FILE* hfile;
hfile = G3_fopen(pNGOName, "r");
G3_fseek (hfile , 0 , SEEK_END);
dwFileSize = G3_ftell (hfile);
G3_rewind (hfile);
ngobuffer = (unsigned char*)malloc(dwFileSize);
G3_fread(ngobuffer, dwFileSize, 1, hfile);
G3_fclose(hfile);
G3_3DgAddSkinnedMeshToAvatar(0, pNGOName, ngobuffer, dwFileSize);
free(ngobuffer);
return TRUE;
}
unsigned char gAddObjectAnimFromFile(unsigned char nObjID, char* pNBAName)
{
unsigned char* nbabuffer;
DWORD dwFileSize;
FILE* hfile;
hfile = G3_fopen(pNBAName, "r");
G3_fseek (hfile , 0 , SEEK_END);
dwFileSize = G3_ftell (hfile);
G3_rewind (hfile);
nbabuffer = (unsigned char*)malloc(dwFileSize);
G3_fread(nbabuffer, dwFileSize, 1, hfile);
G3_fclose(hfile);
G3_3DgAddBoneAnimToAvatar(nObjID, pNBAName, nbabuffer, dwFileSize);
G3_3DgPlayAvatarAnim(nObjID);
G3_3DgRepeatAvatarAnim(nObjID, 0);
free(nbabuffer);
return TRUE;
} | |
 |
InitGL() ÇÔ¼ö¿¡¼´Â GLÀ» ÅëÇØ¼ ±×¸®°íÀÚ ÇÏ´Â Á» ´õ ¼¼¹ÐÇÑ ¼³Á¤À» ÇÏ°Ô µÇ´Âµ¥, ±× ³»¿ëÀ» »ìÆìº¸ÀÚ. glShadeModel() ÇÔ¼ö¸¦ ÅëÇØ ¼ÎÀ̵ùÀ» ¾î¶»°Ô ÇÒ °ÍÀÎÁö ¼³Á¤ÇÑ´Ù. G3 SDK¿¡¼´Â ÆòÆòÇÑ ¼ÎÀ̵ù(GL_FLAT)°ú ºÎµå·¯¿î ¼ÎÀ̵ù(GL_SMOOTH)ÀÌ Á¦°øµÈ´Ù. ´ÙÀ½À¸·Î glClearColor() ÇÔ¼ö¸¦ ÅëÇØ¼ »ý¼ºµÈ ȸéÀÇ ÃÊ±â ¹è°æ»öÀ» ¼³Á¤ÇÑ´Ù. glClearColor()ÀÇ Ã¹ ¹øÂ° ÀÎÀÚ´Â R°ª, µÎ ¹øÂ° ÀÎÀÚ´Â G°ª, ¼¼ ¹øÂ° ÀÎÀÚ´Â B°ªÀ» ³ªÅ¸³»¸ç ¸¶Áö¸· ÀÎÀÚ´Â ¾ËÆÄ °ªÀÌ´Ù. ±× ´ÙÀ½ ¼¼ ¶óÀÎÀº ±íÀÌ ¹öÆÛ¿Í °ü·ÃµÈ °ÍÀÌ´Ù.
| [¸®½ºÆ® 2-4] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦ - PART IV | | | |
// Resize And Initialize The GL Window
GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}
glCreate(0, 0, width, height);
glViewport(0,0,width,height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
glPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}
// All Setup For OpenGL Goes Here
int InitGL(GLvoid)
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading | |
 |
SyncFrame()Àº 3D ±×·¡ÇȽº°¡ ±×·ÁÁö´Â ÃÑ ÇÁ·¹ÀÓ °»½Å ºñÀ²À» Á¦¾îÇÏ´Â ÇÔ¼ö·Î, 100ms¸¶´Ù Çѹø¾¿ ±×¸®µµ·Ï ¼³Á¤µÇ¾î ÀÖ´Ù. ÇÁ·¹ÀÓ °»½Å ºñÀ²À» ¹Ù²Ù±â À§Çؼ´Â <¸®½ºÆ® 2-5>ÀÇ ?¿¡ ¼³Á¤µÈ °ª 100À» º¯°æÇØÁÖ¸é µÈ´Ù. °á±¹ º» ¿¹Á¦¿¡¼´Â 100À¸·Î ¼³Á¤µÇ¾î Àֱ⠶§¹®¿¡ 10fps·Î ÇÁ·¹ÀÓÀÌ Á¦¾îµÇ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
| [¸®½ºÆ® 2-5] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦-PART V | | | |
int SynchFrame ( void ) // frame synch
{
static DWORD dwStartTime = 0;
static DWORD dwEndTime = 0;
dwEndTime = G3_TickCountGet();
if ( 100 > ( dwEndTime - dwStartTime ) ) // 100ms -----> ?
return 0;
dwStartTime = dwEndTime; | |
 |
ÀÌ»óÀ¸·Î ¾Æ¹ÙŸ ¾Ö´Ï¸ÞÀ̼ǿ¡ À§ÇÑ ÃʱâÈ ´Ü°è°¡ ³¡³µ´Ù. ÀÌÁ¦ ½ÇÁ¦ ¸Å ÇÁ·¹ÀÓ¸¶´Ù ¾Æ¹ÙŸ¸¦ ¾î¶»°Ô ¿òÁ÷À̴°¡¿¡ ´ëÇØ¼ UpdateGame() ÇÔ¼ö¸¦ ÅëÇØ¼ ¾Ë¾Æ º¼ °ÍÀÌ´Ù.
UpdateGame() ÇÔ¼ö´Â G3_3DgUpdateAvatar() ÇÔ¼ö¸¦ ÅëÇØ °ÔÀÓ ³»ºÎ Á¤º¸¸¦ ¾Æ¹ÙŸ ´ÜÀ§·Î °»½ÅÇÑ´Ù. ¾Ö´Ï¸ÞÀ̼ÇÀÌ ±¸µ¿µÉ ¶§¿¡´Â Á¤Á¡ ´ÜÀ§ÀÇ º¯Çü(deformation)À» ¼öÇàÇØ ±×·ÁÁú Á¤Á¡ Á¤º¸ÀÇ ¿øÇüÀ» ±¸¼ºÇÑ´Ù. ÀÌ·¸°Ô ÇÑ µÚ G3_3DgTransformAvatar() ÇÔ¼ö¸¦ ÅëÇØ ÁöÁ¤µÈ ¾Æ¹ÙŸ¸¦ ¿ÜºÎ º¯È¯ Á¤º¸¿¡ ÀÇÇØ Á¤ÇØÁø À§Ä¡·Î º¯È¯½ÃŲ´Ù. º¯È¯Àº ȸÀü°ú À̵¿À» Æ÷ÇÔÇÑ´Ù. »õ·Î¿î À§Ä¡·Î º¯È¯µÈ ¾Æ¹ÙŸ´Â G3_3DgDrawAvatar() ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ±×·ÁÁö°Ô µÈ´Ù.
| [¸®½ºÆ® 2-6] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦-PART VI | | | |
void UpdateGame()
{
int i;
if(g_bReady)
{
// Color Buffer/ Depth Buffer Clear
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for(i = 0; i < nAvatarNum; i++)
{
G3_3DgUpdateAvatar(i); // Update deformed Skinned Mesh.
glPushMatrix();
glLoadIdentity();
G3_3DgTransformAvatar(i); // Transform Avatar Position Rotation
G3_3DgDrawAvatar(i); // Rendering Animed Mesh in Avatar.
glPopMatrix();
}
glFlush();
// BitBlyte G3D Scene...
trans_color = *(unsigned short*)glGetDisplayBuffer();
G3_3DTransBlt(NULL, &g3Draw[nflip], 0, 0, G3wWidth, G3wHeight, | |
 |
G3 SDK »ç¿ëÀÚ´Â OpenGL ES ±â¹ÝÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í SDK¿¡¼ Á¦°øµÈ API¸¸À» °®°í ¸ðµ¨À» Ç÷¹ÀÌ, Á¤Áö, ȸÀüÇÒ ¼ö ÀÖ´Ù. <¸®½ºÆ® 2-7>ÀÇ ³»¿ëÀº ÀÌ·¯ÇÑ ZOOM IN/OUT, ROTATE, PLAY ANIMATION, STOP ANIMATION¿¡ °üÇÑ °ÍÀÌ´Ù. ¿Ï¼ºµÈ ¿¹Á¦¸¦ ½ÇÇà½ÃÄÑ º¸¸é <±×¸² 8>¿Í °°ÀÌ 3D ¸ðµ¨ÀÌ ÃãÀ» Ãß´Â ¸ð½ÀÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
| [¸®½ºÆ® 2-7] 3D ¾Ö´Ï¸ÞÀÌ¼Ç ¿¹Á¦ - PART VII | | | |
void KeyProcess()
{
int ExKey;
G3_KeyGetEx(&ExKey);
if (ExKey & G3C_VK_UP) G3_3DgAvatarZoom(0, 200);
if (ExKey & G3C_VK_DOWN) G3_3DgAvatarZoom(0, -200);
if (ExKey & G3C_VK_LEFT) G3_3DgAvatarRotateY(0, 10);
if (ExKey & G3C_VK_8) G3_3DgAvatarRotateX(0, 10);
if (ExKey & G3C_VK_4) G3_3DgAvatarRotateZ(0, -10);
if (ExKey & G3C_VK_6) G3_3DgAvatarRotateZ(0, 10);
if (ExKey & G3C_VK_2) G3_3DgAvatarRotateX(0, -10);
if(ExKey & G3C_VK_STAR)
{
G3_3DgStopAvatarAnim(0);
G3_3DgClearAvatar(0);
}
if(ExKey & G3C_VK_A1) G3_3DgPlayAvatarAnim(0);
if(ExKey & G3C_VK_A2) G3_3DgStopAvatarAnim(0);
}
} | |
 |
´ÙÀ½ È£ºÎÅÍ ½ÇÁ¦ °ÔÀÓ °³¹ß °úÁ¤À»!
Áö±Ý±îÁö ¸ð¹ÙÀÏ 3D¿Í °ü·ÃµÈ ½ÃÀå »óȲ°ú ±â¼ú µ¿ÇâÀ» Á¡°ËÇÏ°í °£´ÜÇÑ ¸ð¹ÙÀÏ 3D ÇÁ·Î±×·¡¹Ö ¿¹Á¦¸¦ »ìÆìº¸¾Ò´Ù. ´Ù¸¥ ºÐ¾ß¿Í ¸¶Âù°¡Áö·Î ¸ð¹ÙÀÏ ±â¼úµµ ºü¸£°Ô ¹ßÀüÇÏ´Â µ¥´Ù ¾÷üµéÀÇ Áß¿äÇÑ »ç¾÷°ú °ü·ÃµÇ´Ùº¸´Ï ¸¹Àº ³»¿ëÀ» ´Ù·çÁö ¸øÇÑ Á¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ Áö¸é °ü°è»ó ¿¹Á¦¸¦ ÃæºÐÈ÷ Á¦°øÇÏÁö ¸øÇߴµ¥, Á» ´õ ¸¹Àº ³»¿ëÀ» ½ÀµæÇÏ°í ½ÍÀº µ¶ÀÚµéÀº SDK ³»ºÎ »ùÇ÷ΠȮÀÎÇØº¸±â ¹Ù¶õ´Ù.
´ÙÀ½ È£ºÎÅÍ´Â ½ÇÁ¦ °ÔÀÓÀÇ °³¹ß °úÁ¤À» ÅëÇØ ´õ¿í ±¸Ã¼ÀûÀÎ ÇÁ·Î±×·¡¹Ö °úÁ¤À» »ìÆìº¸±â·Î ÇϰڴÙ. ³¡À¸·Î G3 SDK´Â G3D À¥»çÀÌÆ®(
www.g3d.co.kr)¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖÀ¸¸ç, ¹æ¹®ÇÏ´Â °³¹ßÀڵ鰣 ¼·Î ÀÇ°ß ±³È¯µµ °¡´ÉÇÏ´Ù. @
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.