XNA for C#
DirectX 9 for C#
DirectX 9 for C++
DirectX 9 for VB
Forum
   September 24: 2D-19: Particle engine
My Book: Out Now!
      
       Go to section on this site

Additional info


Latest Forum posts

 Next Chapter
  Posted by: jasonbarry
  When: 15/10/2008 at 15:55:47

 HLSL: compilation fails
  Posted by: aguacate
  When: 15/10/2008 at 12:03:19

 my collision sucks!
  Posted by: orgad
  When: 15/10/2008 at 11:25:49

 HLSL: compilation fails
  Posted by: aguacate
  When: 15/10/2008 at 11:16:55

 Flickering/glitches
  Posted by: Danzence
  When: 15/10/2008 at 09:53:00

 Next Chapter
  Posted by: samer
  When: 15/10/2008 at 06:40:32

 Flickering/glitches
  Posted by: samer
  When: 15/10/2008 at 06:39:17

 Texture terrian c++
  Posted by: ruudriem
  When: 15/10/2008 at 05:55:16

 1.7 and 2.8 problem.
  Posted by: riemer
  When: 15/10/2008 at 03:36:34

 Next Chapter
  Posted by: riemer
  When: 15/10/2008 at 03:34:29


Ads



ÆÄÀÏÀ» »ç¿ëÇÑ ÁöÇü »ý¼º

À̹ø tutorial¿¡¼­´Â ³ÐÀº ÁöÇü(landscape)À» ±×·Áº¸°Ú½À´Ï´Ù. Áö±Ý±îÁö´Â »ï°¢ÇüµéÀÇ ÁÂÇ¥°ªÀ» ÀÏÀÏÈ÷ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇØ ¿Ô½À´Ï´Ù¸¸, ³ÐÀº ÁöÇüÀº ¼ö¹é, ȤÀº ¼öõ °³ÀÇ vertexµéÀ» ´Ù·ç¾î¾ß ÇϹǷΠ±×·± ¼öµ¿ÀûÀÎ ¹æ¹ýÀ¸·Î Ç¥ÇöÇϱâ´Â ¹«¸®°¡ ÀÖ½À´Ï´Ù. ÀÌÁ¦ºÎÅÍ´Â ÆÄÀÏÀÇ ³»¿ëÀ» Àоî¿À´Â ¹æ¹ýÀ¸·Î vertexµéÀÇ ÁÂÇ¥°ªÀ» ´Ù·çµµ·Ï ÇսôÙ.

À̹ø tutorial¿¡¼­ ±×¸± ÁöÇüÀº 64*64ÀÇ ÁöÇüÀÔ´Ï´Ù. 4096°³ÀÇ vertex°¡ ÇÊ¿äÇÏ´Ï ²Ï ³ÐÀº ÁöÇüÀÌ µÇ°Ú³×¿ä. ÀÌÀü tutorialÀ» Âü°íÇØº¸¸é ÁöÇüÀ» ±×¸®´Âµ¥ À־ xÃà, yÃà ÁÂÇ¥°ªÀº Ç×»ó ÀÏÁ¤ÇÑ °ªÀ» À¯ÁöÇÏ°Ô µÇ°í, »ç½Ç»ó ÁöÇüÀ» Ç¥ÇöÇϴµ¥ Àǹ̸¦ °¡Áö´Â °ªÀº zÃà ÁÂÇ¥°ªÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. 64*64 ÁöÇüÀÇ zÃà ÁÂÇ¥°ªÀ» Ç¥ÇöÇϱâ À§ÇØ ¿ì¸®´Â 64*64Å©±âÀÇ grayscale À̹ÌÁö ÆÄÀÏÀ» »ç¿ëÇÒ °ÍÀÔ´Ï´Ù. ÀÌ·± Á¾·ùÀÇ À̹ÌÁö¸¦ ÀϹÝÀûÀ¸·Î height mapÀ̶ó°í ºÎ¸£¸ç °¢ pixelÀÇ ¡®white value¡¯°¡ ¹Ù·Î zÃà ÁÂÇ¥°ªÀ» ÀǹÌÇÕ´Ï´Ù. ¡®white value¡¯´Â °ËÀº»ö(=0=00)°ú Èò»ö(=255=ff)»çÀÌÀÇ °ªÀÔ´Ï´Ù. ¿¹¸¦ µé¾î [5,5] pixelÀÌ °ËÀº»öÀ̶ó¸é »ö»ó°ªÀÌ 00À̹ǷΠ[x=5,y=5] À§Ä¡ÀÇ vertexÀÇ zÃà ÁÂÇ¥°ªÀº 0À̵˴ϴÙ. [10, 10] pixelÀÌ Èò»öÀ̶ó¸é »ö»ó°ªÀÌ 255À̹ǷΠ[x=10,y=10] À§Ä¡ÀÇ vertexÀÇ zÃà ÁÂÇ¥°ªÀº 255°¡ µË´Ï´Ù. ÀÌ·¸°Ô grayscale·Î zÃà ÁÂÇ¥°ª(³ôÀ̰ª)À» ³ªÅ¸³»´Â À̹ÌÁö°¡ °¡Àå ±âº»ÀûÀÎ height mapÀÌ¸ç ½ÇÁ¦·Î´Â grayscale À̹ÌÁö ¿Ü¿¡µµ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î height mapÀ» Ç¥ÇöÇϰí ÀÖ½À´Ï´Ù.

¿ì¸®°¡ grayscale À̹ÌÁö¸¦ Á÷Á¢ ¸¸µå´Â ´ë½Å¿¡ ¿©±â¼­´Â Reimer¾¾°¡ ¸¸µé¾îµÐ example À̹ÌÁö¸¦ »ç¿ëÇϵµ·Ï ÇսôÙ. ¹°·Ð Reimer¾¾ÀÇ example À̹ÌÁö ´ë½Å¿¡ ÀÚ½ÅÀÌ Á÷Á¢ 64*64 Å©±âÀÇ À̹ÌÁö¸¦ ¸¸µé¾î ½áµµ ÁÁ½À´Ï´Ù.



ÀÌÁ¦ »õ·Î¿î Windows Game ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇϰí ÇÊ¿äÇÑ ÆÄÀϵéÀ» ÀÌÀüÀÇ tutorial¿¡¼­ º¹»çÇØ ¿É½Ã´Ù.

À̹ÌÁö ÆÄÀÏÀ» Àбâ À§ÇØ °¡Àå ¸ÕÀú ÇÒ ÀÏÀº namespace Ãß°¡ ÀÔ´Ï´Ù. ¿ì¸® ¸ðµÎ C#À» ÀÌ¹Ì ¾Ë°í ÀÖÀ¸´Ï ´ç¿¬ÇÏ°Ô ´À²¸Áú °Í ÀÔ´Ï´Ù.

 using System.IO;

±×¸®°í ¿ì¸®´Â 64*64ÀÇ ÁöÇüÀ» Ç¥ÇöÇÒ °ÍÀ̹ǷΠ±âÁ¸ÀÇ µÎ Àü¿ª º¯¼ö, WIDTH¿Í HEIGHTÀÇ °ªÀ» º¯°æÇØ ÁݽôÙ.

 int WIDTH = 64;

ÀÌÁ¦ ÆÄÀÏÀ» Àбâ À§ÇØ ±âÁ¸ÀÇ LoadHeightDataÇÔ¼öÀÇ ³»¿ëÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇսôÙ.

 private void LoadHeightData()
 {
     heightdata = new int[WIDTH, HEIGHT];
 
     FileStream fs = new FileStream("../../../XNA.raw", FileMode.Open, FileAccess.Read);
     BinaryReader br = new BinaryReader(fs);
 
     for (int y = 0; y < HEIGHT; y++)
     {
         for (int x = 0; x < WIDTH; x++)
         {
             int height = (int)(br.ReadByte() / 50);
             heightdata[x, HEIGHT - 1 - y] = height;
         }
     }
 
     br.Close();
 }

Äڵ忡¼­ º¸¿©Áö´Â °Í°ú °°ÀÌ À̹ÌÁö ÆÄÀÏÀ» Àд ÄÚµå´Â C#ÀÇ ±×°Í°ú ÀüÇô ´Ù¸¥°ÍÀÌ ¾ø½À´Ï´Ù. µÎ ¹øÂ° ¶óÀκÎÅÍ raw À̹ÌÁö ÆÄÀÏÀ» ÀнÀ´Ï´Ù. À̹ÌÁö ÆÄÀÏÀÇ format¿¡´Â ¿©·¯ °¡Áö°¡ ÀÖ½À´Ï´Ù¸¸ ±»ÀÌ raw À̹ÌÁö¸¦ »ç¿ëÇÑ ÀÌÀ¯´Â raw formatÀº header°¡ Á¸Àç ÇÏÁö ¾Ê°í ¼ø¼öÇÏ°Ô data·Î¸¸ ±¸¼ºµÇ¾î À־ ÆÄÀÏ ÀбⰡ ¸Å¿ì °£ÆíÇϱ⠶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î jpeg À̹ÌÁö´Â ¼Õ½ÇÇü ¾ÐÃà À̹ÌÁö À̹ǷΠµðÄÚµùÀÌ ÇÊ¿äÇϸç pixelÀÇ »ö»ó°ªµµ µðÄÚµù ÇÒ ¶§¸¶´Ù ¾à°£¾¿ ¿ÀÂ÷°¡ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î height map Ç¥Çö¿¡ Àß ¾²ÀÌÁö ¾Ê´Â À̹ÌÁö format ÀÔ´Ï´Ù. ´Ù¸¸ raw À̹ÌÁöÀÇ °æ¿ì ÁöÇüÀÇ Å©±â¿¡ ºñ·ÊÇØ¼­ ÆÄÀÏÀÇ Å©±âµµ Áõ°¡ÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù. ´Ù½Ã ÄÚµå·Î µ¹¾Æ¿Í¼­, 4¹øÂ° ¶óÀÎÀº raw À̹ÌÁö¸¦ byteÇü½ÄÀ¸·Î Àбâ À§ÇÑ binary reader¸¦ »ý¼ºÇÏ´Â ÄÚµåÀÔ´Ï´Ù. ±×¸®°í ÃÑ 64*64¹ø, 4096¹ø data(=byte)¸¦ Àоî¿Í¼­ ¹è¿­ÀÇ ÇØ´ç À§Ä¡¿¡ °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù. À̶§ Àоî¿Â byte¸¦ 50À¸·Î ³ª´©¾î ÁÖ´Â ÀÌÀ¯´Â ÇöÀç raw À̹ÌÁö data¸¦ ±×´ë·Î »ç¿ëÇÏ°Ô µÇ¸é ÃÖ´ë°ª°ú ÃÖ¼Ò°ª »çÀÌÀÇ Â÷ÀÌ ³Ê¹« Å©±â ¶§¹®ÀÔ´Ï´Ù. ÃÖ¼Ò°ªÀº 0À̰í ÃÖ´ë°ªÀº 255Àε¥ ÀÌ data¸¦ ±×´ë·Î zÃà ÁÂÇ¥°ªÀ¸·Î »ç¿ëÇÑ´Ù¸é ¹Ì°ü»ó º¸±â ¾È ÁÁ°ÚÁö¿ä. °Ô´Ù°¡ ÀÌ·¸°Ô ³Ê¹« ±Þ°ÝÇÑ °æ»ç¸¦ °¡Á®¼­¾ß ÁöÇüÀ̶ó°í ºÎ¸£±âµµ Èûµé °Í ÀÔ´Ï´Ù. 50À¸·Î ³ª´©¾îÁÖ¸é zÃà ÁÂÇ¥°ªÀº ÃÖ¼Ò 0ºÎÅÍ ÃÖ´ë 5±îÁöÀÇ °ªÀ» °¡Áö¹Ç·Î ²Ï º¸±â ÁÁÀº ÁöÇüÀÌ ³ª¿Ã °Í °°½À´Ï´Ù.
´ÙÀ½À¸·Î À¯ÀÇÇØ¾ß ÇÒ Á¡Àº ¹è¿­¿¡ data¸¦ ä¿ì´Â ¼ø¼­ÀÔ´Ï´Ù. raw À̹ÌÁöÀÇ data´Â µÚÁýÇô¼­(inversely) ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î ¹è¿­¿¡ data¸¦ ÀúÀåÇÒ ¶§´Â ÆÄÀÏÀº À§¿¡¼­ ¾Æ·¡·Î(top¡æbottom)À¸·Î Àо ¹è¿­ÀÇ ¾Æ·¡ºÎÅÍ À§·Î(bottom¡ætop)À¸·Î ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. (heightdata[x, HEIGHT - 1 - y])

ÀÌÁ¦ ÁöÇüÀ» ±×¸± Áغñ´Â ¸ðµÎ ³¡³­ ¼ÀÀÌÁö¸¸ ÀÌ´ë·Î ½ÇÇàÇϸé ÁöÇüÀÇ À§Ä¡¿Í Ä«¸Þ¶óÀÇ À§Ä¡ ¶§¹®¿¡ Àüü ÁöÇüÀÌ º¸ÀÌÁö ¾Ê½À´Ï´Ù. ¸ÕÀú, ÁöÇüÀÇ À§Ä¡¸¦ Á¤Áß¾ÓÀ¸·Î ¿Å°Üº¸°Ú½À´Ï´Ù. ÁöÇüÀÇ Á¤Áß¾ÓÀÌ ÁÂÇ¥°èÀÇ ¿øÁ¡(0.0f, 0.0f, 0.0f)ÀÌ µÇµµ·Ï º¯È¯µÈ ¿ùµå ÁÂÇ¥°è¸¦ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù. DrawÇÔ¼öÀÇ ¿ùµå ÁÂÇ¥°è »ý¼º Äڵ带 ´ÙÀ½°ú °°ÀÌ º¯ÇüÇսôÙ.

 Matrix worldMatrix = Matrix.CreateTranslation(-HEIGHT / 2, -WIDTH / 2, 0);

ÁöÇüÀÌ ÀÌÁ¦ È­¸é Áß¾Ó¿¡ À§Ä¡ÇÏ°Ô µÇ¾úÀ¸´Ï Ä«¸Þ¶óÀÇ À§Ä¡¸¦ ¿Å°Ü º¾½Ã´Ù. SetupCameraÇÔ¼öÀÇ view matrix¿Í projection matrix »ý¼º ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇսôÙ.

 Matrix viewMatrix = Matrix.CreateLookAt(new Vector3(0.0f, -40.0f, 60.0f), new Vector3(0.0f, -5.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f));
 Matrix projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, Window.ClientBounds.Width / Window.ClientBounds.Height, 1.0f, 150.0f);

Ä«¸Þ¶óÀÇ À§Ä¡¸¦ µÚ·Î ¿Å°Ü¼­ ´õ ³ÏÀº °ø°£À» ¹Ù¶óº¼ ¼ö ÀÖ°Ô Çß½À´Ï´Ù. ¿©±â¼­ ÇѰ¡Áö À¯ÀÇÇÒ Á¡Àº ½Ã¾ß°¢ÀÌ ³Ð¾îÁø ¸¸Å­ projection matrixÀÇ ½Ã¾ß °Å¸® ¶ÇÇÑ Áõ°¡½ÃÄѼ­ ´õ ¸Ö¸®±îÁö º¼ ¼ö ÀÖ°Ô ÇØÁÖ¾î¾ß ÇÑ´Ù´Â Á¡ ÀÔ´Ï´Ù. ±âÁ¸ÀÇ ½Ã¾ß °Å¸®´Â 50.0f ¿´´Âµ¥, Áö±ÝÀº Ä«¸Þ¶ó¿Í ÁÂÇ¥°è ¿øÁ¡°úÀÇ °Å¸®°¡ 40.0f À̹ǷΠ±×´ë·Î µÎ¸é Ä«¸Þ¶ó¿Í 50.0f ÀÌ»óÀÇ °Å¸®¸¦ °¡Áö´Â °¡ÀåÀÚ¸® ºÎºÐÀº È­¸é¿¡ º¸ÀÌÁö ¾Ê°Ô µË´Ï´Ù. ½Ã¾ß °Å¸®¸¦ 150.0f Á¤µµ·Î ÃæºÐÈ÷ ´Ã·ÁÁݽôÙ. Matrix.CreatePerspectiveFieldOfViewÇÔ¼öÀÇ ¸¶Áö¸· parameter°¡ ½Ã¾ß °Å¸® ÀÔ´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº MSDNÀ» ÂüÁ¶ÇÏ±æ ¹Ù¶ø´Ï´Ù.

ÀÌÁ¦ µð¹ö±×(F5)۸¦ ´­·¯ ½ÇÇà½ÃŰ¸é ¿ì¸®°¡ ¸¸µç 64*64ÀÇ ÁöÇüÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. Example·Î Á¦°øµÈ XNA.raw À̹ÌÁö¿Í ¿ì¸®°¡ ¸¸µç ÁöÇüÀÇ ¸ð½ÀÀ» ºñ±³Çغ¸°í, ±× ¿Ü¿¡µµ ´Ù¸¥ grayscale À̹ÌÁö¸¦ Àû¿ëÇÏ¿© ±× °á°ú¸¦ Á÷Á¢ È®ÀÎÇØ º¸±æ ¹Ù¶ø´Ï´Ù.






Google
 
Webwww.riemers.net


If you appreciate the amount of time I spend creating and updating
these pages, feel free to donate -- any amount is welcome !



- Website design & XNA + DirectX code : Riemer Grootjans -
©2003 - 2008 Riemer Grootjans
Translations

This site in English
This site in Korean
This site in Czech

Microsoft MVP Award



2007 - 2008 MVP Award
DirectX - XNA

Contents

[Tutorials]
[XNA in C#]
Series 1: ÁöÇü
XNAÀÇ ½ÃÀÛ
ÀÌÆåÆ® ÆÄÀÏ
ù ¹øÂ° »ï°¢Çü
¿ùµå ÁÂÇ¥°è
ȸÀü, À§Ä¡ º¯È¯
À妽º
ÁöÇü »ý¼ºÀÇ ±âº»
ÆÄÀϷκÎÅÍ ÁöÇü »ý¼º
Űº¸µå ÀÔ·Â
[tut10]
[tut11]
[tut12]
[tut13]
-- Expand all --


Thank you!

Support this site --
any amount is welcome !

Stay up-to-date

I don't have the time to keep a News section, so stay informed about the updates by clicking on this RSS file!