XNA for C#
DirectX 9 for C#
DirectX 9 for C++
DirectX 9 for VB
Forum
   August 27: 2D-7: Writing text
My Book: Out Now!
      
       Go to section on this site

Additional info


Latest Forum posts

 DX vs XNA vs OGL
  Posted by: Rich_Zap
  When: 28/08/2008 at 10:54:39

 understanding of SetUpIndices
  Posted by: YoYoFreakCJ
  When: 28/08/2008 at 05:51:04

 billboard does not rotate after scaling
  Posted by: kigunda
  When: 28/08/2008 at 04:55:29

 exception error
  Posted by: Rich_Zap
  When: 28/08/2008 at 03:34:29

 exception error
  Posted by: besi
  When: 28/08/2008 at 00:14:11

 Having trouble with effect file
  Posted by: Anonymous
  When: 27/08/2008 at 22:15:15

 Polygon Clipping for Octree
  Posted by: lbmurali
  When: 27/08/2008 at 18:13:55

 understanding of SetUpIndices
  Posted by: vToMy
  When: 27/08/2008 at 18:05:45

 A Typo with loading the Font
  Posted by: riemer
  When: 27/08/2008 at 15:26:43

 mistake found
  Posted by: riemer
  When: 27/08/2008 at 15:22:31


Ads

ȸÀü°ú À§Ä¡ º¯°æ

À̹ø tutorial¿¡¼­´Â ¿ì¸®ÀÇ »ï°¢ÇüÀ» ȸÀü½ÃÄÑ º¸°Ú½À´Ï´Ù.

Ä«¸Þ¶óÀÇ ¿òÁ÷ÀÓ°ú °°ÀÌ °´Ã¼¸¦ ȸÀüÇÏ´Â °Íµµ ¿ùµå ÁÂÇ¥°è¿Í ¿¬°üµÇ¾î ÀÖ½À´Ï´Ù.

ÄÚµå·Î µé¾î°¡±â À§ÇØ, »õ Windows Game ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇսôÙ. ÀÌÀü±îÁöÀÇ tutorial°ú ¸¶Âù°¡Áö·Î ¸¶Áö¸· tutorial¿¡¼­ À̾îÁö¹Ç·Î tutorial04¿¡¼­ ÇÊ¿äÇÑ ÆÄÀÏÀ» º¹»çÇØ ¿Àµµ·Ï ÇսôÙ.

ȸÀüÀ̶õ ´Ù½Ã ¸»ÇØ ±â¿ïÀÓÀÇ ¿¬¼ÓÀÔ´Ï´Ù. ±×¸®°í ¿ì¸®´Â ÈçÈ÷ ¸î µµ(angle)·Î ±â¿ï¾îÁ³´Ù ¶ó°í ¸»Çϰï ÇÕ´Ï´Ù. Áï, ¿ì¸®ÀÇ »ï°¢ÇüÀÌ È¸ÀüÇϱâ À§Çؼ­´Â »ï°¢ÇüÀÇ ±â¿ïÀÓÀ» Ç¥ÇöÇØ ÁÙ °¢µµ(angle)ÀÌ ÇÊ¿äÇÕ´Ï´Ù.

±â¿ïÀÓÀ» Ç¥ÇöÇØ ÁÙ Àü¿ª º¯¼ö¸¦ ¼±¾ðÇսôÙ.

 float angle = 0.0f; // Àü¿ª º¯¼ö Á¤ÀÇ

¾Õ¼­ ȸÀüÀ̶õ ±â¿ïÀÓÀÇ ¿¬¼ÓÀ̶ó°í ¼³¸íÇß½À´Ï´Ù. °¢µµ(angle)°¡ ½Ã°£ÀÌ È帧¿¡ µû¶ó Áõ°¡Çϰųª ȤÀº °¨¼ÒÇÑ´Ù¸é À̰ÍÀ» ¿¬¼ÓÇÑ´Ù ¶ó°í ¸»ÇÒ ¼ö ÀÖ°ÚÁÒ. µû¶ó¼­ ¿ì¸®ÀÇ »ï°¢ÇüÀ» ȸÀü½Ã۱â À§ÇØ ÀÏÁ¤ÇÑ ½Ã°£ÀÇ È帧¿¡ µû¶ó °¢µµ¸¦ ÀÏÁ¤ÇÏ°Ô Áõ°¡½ÃÄÑ ÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù.

XNA´Â UpdateÇÔ¼ö¸¦ ÅëÇØ ÀÌ·¯ÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. UpdateÇÔ¼ö´Â °¢ frame¸¶´Ù È£ÃâµÇ´Â ÇÔ¼öÀ̰í, ÀϹÝÀûÀ¸·Î frameÀº 1ÃÊ¿¡ 60¹ø ¹Ýº¹µË´Ï´Ù. ÀϹÝÀûÀ¸·Î ¾î¶² °ÔÀÓÀº 60 frameÀ̴٠ȤÀº 30 frameÀÌ´Ù ¶ó°í ¸»ÇÒ¶§ ¾ð±ÞµÇ´Â °ÍÀÌ ¹Ù·Î frameÀÔ´Ï´Ù.

UpdateÇÔ¼ö¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 Ãß°¡ ÇսôÙ.

 protected override void Update(GameTime gameTime)
 {
     // Allows the game to exit
     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
         this.Exit();
 
     // TODO: Add your update logic here
 
     angle += 0.05f;
 
     base.Update(gameTime);
 }

ÀÌÁ¦ ȸÀü¿¡ ¹Ý¿µÇÒ °¢µµ°ªÀÎ angleÀº °¢ frame¸¶´Ù 0.05f¾¿ Áõ°¡ÇÏ°Ô µÇ¾ú½À´Ï´Ù. ´õÇØÁÖ´Â °ªÀÌ Ä¿Áö¸é °¢ frame¸¶´Ù Áõ°¡°ªÀÌ Ä¿Áö´Ï ºü¸£°Ô ȸÀüÇϰí ÀÛ¾ÆÁö¸é ´À¸®°Ô ȸÀüÇϰڳ׿ä. À½¼ö·Î ÇØÁØ´Ù¸é ¹Ý´ë ¹æÇâÀ¸·Î ȸÀüÇϰÚÁÒ. tutorialÀÌ ³¡³ª°í °ªÀ» ¿©·¯°¡Áö·Î º¯°æÇؼ­ ±× °á°ú¸¦ È®ÀÎÇØ º¾½Ã´Ù.

ÀÌÁ¦ ÀÌ °¢µµ°ªÀ» ¿ùµå ÁÂÇ¥°è¿¡ ¹Ý¿µÇսôÙ. ´ÙÇàÈ÷µµ DirectX¿Í °°ÀÌ matrixÀÇ ¿¬»êÀº XNA¶ÇÇÑ ¸ðµÎ Á¦°øÇÕ´Ï´Ù.

DrawÇÔ¼öÀÇ effect.Begin() ¶óÀÎ À§¿¡ ´ÙÀ½°ú °°Àº Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

 Matrix worldMatrix = Matrix.CreateRotationY(angle);
 effect.Parameters["xWorld"].SetValue(worldMatrix);

ù¹øÂ° ¶óÀÎÀº YÃàÀ» Áß½ÉÀ¸·Î ȸÀüÇÏ´Â ¿ùµå ÁÂÇ¥°è¸¦ »ý¼ºÇÕ´Ï´Ù. ¹°·Ð ȸÀüÇÏ´Â °¢µµ°ªÀº ¹Ì¸® ½ÇÁ¤ÇصРangleº¯¼ö¸¦ »ç¿ëÇϸç, angleº¯¼ö´Â ¼³Á¤ÇÑ ¹Ù¿Í °°ÀÌ frame´ç 0.05f¾¿ Áõ°¡ÇÕ´Ï´Ù. ÃÊ´ç 60 frameÀÌ Áö³ª°¡´Ï 1Ãʰ¡ Áö³ª¸é ¿ì¸®ÀÇ »ï°¢ÇüÀº 3f¸¸Å­ ȸÀüÇØ Àְڳ׿ä.
µÎ¹øÂ° ¶óÀÎÀº ÀÌ·¸°Ô »ý¼ºµÈ ¿ùµå ÁÂÇ¥°è¸¦ effect¿¡ Àû¿ë½ÃŰ´Â ÄÚµåÀÔ´Ï´Ù.

µð¹ö±×(F5)۸¦ ´­·¯ ½ÇÇà½ÃÄÑ º¾½Ã´Ù. ¿ì¸®ÀÇ »ï°¢ÇüÀÌ YÃàÀ» Áß½ÉÀ¸·Î ÀÏÁ¤ÇÑ ¼Óµµ·Î ȸÀüÇÔÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ȸÀü ¼Óµµ¸¦ º¯°æ ÇÏ°í ½Í´Ù¸é angle°ªÀ» Á¶ÀýÇÏ¸é µË´Ï´Ù.



Áö±Ý ¿ì¸®ÀÇ »ï°¢ÇüÀº ¿øÁ¡ (0.0f, 0.0f, 0.0f)¸¦ Áß½ÉÀ¸·Î ȸÀüÇϰí ÀÖ½À´Ï´Ù. Á» ´õ º¸±â ÁÁ°Ô ¿ì¸®ÀÇ »ï°¢ÇüÀ» Áß¾Ó¿¡ À§Ä¡½ÃŰ°í »ï°¢Çü ±× ÀÚü°¡ ZÃàÀ¸·Îµµ ȸÀüÇϵµ·Ï ¼öÁ¤Çغ¾½Ã´Ù.

ÀÌ Àü±îÁö´Â ¿ì¸®ÀÇ »ï°¢ÇüÀÇ À§Ä¡¸¦ º¯È¯Çϱâ À§Çؼ­´Â vertexµéÀ» ¼öÁ¤ÇØ¾ß ÇßÁö¸¸, ÀÌÁ¦ ±×¸± ÇÊ¿ä´Â ¾ø½À´Ï´Ù. vertex´Â ±×´ë·Î µÎ°í ÁÂÇ¥°è¸¦ À̵¿½ÃŰ¸é °£´ÜÇÏ°Ô À§Ä¡°¡ º¯È¯µË´Ï´Ù.

»ç½Ç ÀÌÂë¿¡¼­ ´«Ä¡¸¦ æ ºÐµµ ÀÖ°ÚÁö¸¸, ¾Õ¼­ ¿ì¸®ÀÇ »ï°¢ÇüÀ» ȸÀü½ÃŲ °Í ¶ÇÇÑ »ï°¢ÇüÀÌ È¸ÀüÇߴٱ⠺¸´Ù´Â »ï°¢ÇüÀÇ ÁÂÇ¥°è°¡ ȸÀüÇß´Ù°í º¸´Â ÆíÀÌ ¿Ç½À´Ï´Ù. ¸¶Âù°¡Áö·Î À§Ä¡¸¦ º¯È¯ÇÒ¶§µµ ÁÂÇ¥°è¸¦ À̵¿½ÃŰ¸é ¿ì¸®´«¿¡´Â ¸¶Ä¡ »ï°¢ÇüÀÇ À§Ä¡°¡ º¯È¯µÈ °Í°ú °°ÀÌ º¸ÀÌ°Ô µË´Ï´Ù.

¾Õ¼­ DrawÇÔ¼ö¿¡ Ãß°¡ÇÑ ¿ùµå ÁÂÇ¥°è¸¦ »ý¼ºÇÏ´Â ¶óÀÎÀ» ´ÙÀ½°ú °°ÀÌ ¹Ù²ã º¾½Ã´Ù.

 Matrix worldMatrix = Matrix.CreateTranslation(-5, -10 * 1 / 3, 0) * Matrix.CreateRotationZ(angle);

ÀÌ ÄÚµå´Â »ï°¢ÇüÀÌ ÁÂÇ¥°èÀÇ ¿øÁ¡ (0.0f, 0.0f, 0.0f)¿¡ À§Ä¡Çϵµ·Ï ÁÂÇ¥°è¸¦ À̵¿Çϰí ZÃàÀ» ±âÁØÀ¸·Î ȸÀüÇÏ´Â ¿ùµå ÁÂÇ¥°è¸¦ »ý¼ºÇÕ´Ï´Ù. ¼±Çü ´ë¼öÇÐÀÇ ±âÃʸ¦ ¾Æ´Â ºÐÀ̶ó¸é ±Ý¹æ ¾Æ½Ã°ÚÁö¸¸, µÎ ÁÂÇ¥°è¸¦ µ¿½Ã¿¡ Àû¿ëÇϱâ À§Çؼ­´Â °¢°¢ÀÇ ÁÂÇ¥°è Áï Çà·Ä(matrix)¸¦ °öÇÏ´Â ¿¬»êÀÌ ÇÊ¿äÇÕ´Ï´Ù.

µð¹ö±×(F5)۸¦ ´­·¯ ½ÇÇàÇÏ¿© ¿ì¸®ÀÇ »ï°¢ÇüÀÌ ÁÂÇ¥°èÀÇ ¿øÁ¡À» Áß½ÉÀ¸·Î Çϰí ZÃàÀ» ±âÁØÀ¸·Î ȸÀüÇϰí ÀÖ´ÂÁö È®ÀÎÇØº¾½Ã´Ù.



¿©±â¼­ ÇѰ¡Áö ´õ ¤°í ³Ñ¾î°¡¾ß ÇÒ ºÎºÐÀº ÁÂÇ¥°è°¡ °öÇØÁö´Â ¼ø¼­ ÀÔ´Ï´Ù. ¿©±â¼­´Â ¿ùµå ÁÂÇ¥°è = À§Ä¡ º¯°æ ÁÂÇ¥°è * ZÃà ±âÁØ È¸Àü ÁÂÇ¥°è¸¦ »ç¿ëÇßÁö¸¸, °öÇØÁö´Â ¼ø¼­°¡ Ʋ·ÁÁö¸é ÀǵµÇß´ø °Í°ú ÀüÇô ´Ù¸¥ °á°ú°¡ ³ª¿Ã ¼ö ÀÖ½À´Ï´Ù. Áï, M1 * M2ÀÇ °á°ú´Â M2 * M1ÀÇ °á°ú¿Í ´Ù¸¨´Ï´Ù. Áß¿äÇÑ ³»¿ëÀÌ´Ï ²À ±â¾ïÇØ µÎ±æ ¹Ù¶ø´Ï´Ù.

¹æ±Ý Ãß°¡ÇÑ ÄÚµåÀÇ ÁÂÇ¥°èµéÀÌ °öÇØÁö´Â ¼ø¼­¸¦ ¹Ù²ã º¸¸é ±× Â÷À̸¦ ¸íÈ®È÷ ¾Ë ¼ö Àְڳ׿ä. À§ÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ º¯°æÇØ º¾½Ã´Ù.

 Matrix worldMatrix = Matrix.CreateRotationZ(angle) * Matrix.CreateTranslation(-5, -10 * 1 / 3, 0);

ÀÌÀüÀÇ Äڵ尡 ¿ì¸®ÀÇ »ï°¢ÇüÀÇ Áß½ÉÀÌ ¿øÁ¡À¸·Î À̵¿Çϵµ·Ï ÁÂÇ¥°èÀÇ À§Ä¡¸¦ º¯°æÇÑ ÈÄ, ZÃàÀ» ±âÁØÀ¸·Î ȸÀü½ÃŰ´Â ¿¬»êÀ» ÇÑ ¹Ý¸é¿¡, Áö±ÝÀÇ ÄÚµå´Â ¸ÕÀú ¿ì¸®ÀÇ »ï°¢ÇüÀ» ZÃàÀ» ±âÁØÀ¸·Î ȸÀü½ÃŲÈÄ ÁÂÇ¥°èÀÇ À§Ä¡¸¦ º¯°æÇÏ¿´½À´Ï´Ù.

¾óÇÍ º¸±â¿¡´Â º° Â÷À̰¡ ¾ø¾î º¸ÀÌÁö¸¸, ½ÇÇàµÇ¾úÀ»¶§ÀÇ °á°ú´Â È®¿¬È÷ ´Ù¸¨´Ï´Ù. ¹Ýµå½Ã À§ÀÇ Äڵ带 ½ÇÇàÇØº¸°í ±× °á°ú¸¦ Á÷Á¢ È®ÀÎÇØ º¸±æ ¹Ù¶ø´Ï´Ù.

ÀÌÁ¦ ¿ì¸®°¡ 3D¸¦ ´Ù·ç°í ÀÖ´Ù´Â »ç½ÇÀ» Á» ´õ ¸öÀ¸·Î ´À²¸º¸±â À§ÇØ ¿ì¸®ÀÇ »ï°¢ÇüÀ» ZÃà »Ó¸¸ÀÌ ¾Æ´Ï¶ó, XÃàÀº ¹°·Ð YÃàÀ» ±âÁØÀ¸·Îµµ ȸÀü½ÃÄÑ º¸µµ·Ï ÇսôÙ.

ÁÂÇ¥°èÀÇ °öÀ» °³³äÀûÀ¸·Î Ç¥ÇöÇØº¸¸é '¿ùµå ÁÂÇ¥°è = ÁÂÇ¥°è À§Ä¡ º¯È¯ * XÃà ±âÁØ È¸Àü º¯È¯ ÀÚÇ¥°è * YÃà ±âÁØ È¸Àü º¯È¯ ÁÂÇ¥°è * ZÃà ±âÁØ È¸Àü ÁÂÇ¥°è' ·Î Ç¥ÇöÇÒ ¼ö ÀÖ°ÚÁö¸¸, XNA¿¡¼­´Â ±»È÷ °¢ ÁÂÇ¥Ãà ±âÁØ È¸Àü º¯È¯ ÁÂÇ¥°è¸¦ ÀÏÀÏÈ÷ °öÇÒ ÇÊ¿ä ¾øÀÌ Çѹø¿¡ X, Y, ZÃà ±âÁØ È¸Àü º¯È¯ ÁÂÇ¥°è¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Â ÇÔ¼ö¸¦ Á¦°øÇÕ´Ï´Ù.

À§ÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

 Vector3 rotAxis = new Vector3(3 * angle, 1 * angle, 2 * angle);
 rotAxis.Normalize();
 Matrix worldMatrix = Matrix.CreateTranslation(-5, -10 * 1 / 3, 0) * Matrix.CreateFromAxisAngle(rotAxis, angle);

ù¹øÂ° ¶óÀÎÀº X, Y, ZÃà¿¡ ´ëÇØ ¿ì¸®ÀÇ »ï°¢ÇüÀÇ È¸ÀüÃà vectorÀ» ¸¸µì´Ï´Ù. µÎ¹øÂ° ¶óÀÎÀº ÀÌ vector¸¦ normalizeÇÏ´Â ÄÚµåÀÔ´Ï´Ù. normalize¶õ vector¿Í ÁÂÇ¥°è ¿øÁ¡(0.0f, 0.0f, 0.0f)ÀÇ °Å¸®°¡ 1ÀÌ µÇµµ·Ï, Áï vectorÀÇ Å©±â°¡ 1ÀÌ µÇµµ·Ï vector¸¦ Á¤±ÔÈ­ ÇÏ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÀÌ·¸°Ô normalizeµÈ vector¸¦ ´ÜÀ§ º¤ÅÍ(unit vector)¶ó°í ºÎ¸¨´Ï´Ù. ¼¼¹øÂ° ¶óÀÎÀº ÁÂÇ¥°è À§Ä¡ º¯È¯ ÈÄ, ȸÀüÃà vector¸¦ ±âÁØÀ¸·Î °¢µµ°ª ¸¸Å­ ȸÀüÇÏ´Â ¿ùµå ÁÂÇ¥°è¸¦ »ý¼ºÇÕ´Ï´Ù. Matrix.CreateFromAxisAngle ÇÔ¼ö°¡ ȸÀüÃà ±âÁØ È¸Àü ÁÂÇ¥°è¸¦ »ý¼ºÇØ ÁÝ´Ï´Ù. parameter·Î ȸÀüÀÇ ±âÁØÀÌ µÉ ȸÀüÃà(axis) vector¿Í ¾ó¸¶ ¸¸Å­ ȸÀüÇÒÁö °áÁ¤ÇÏ´Â °¢µµ°ª(angle)À» ¹Þ¾ÆµéÀÔ´Ï´Ù.

µð¹ö±×(F5)۸¦ ´­·¯ ½ÇÇàÇØº¸¸é ¿ì¸®ÀÇ »ï°¢ÇüÀÌ È­¸éÀÇ Áß¾Ó¿¡¼­ ½Ã°£ÀÇ È帧¿¡ µû¶ó º¯Çϴ ȸÀüÃàÀ» ±âÁØÀ¸·Î ÀÏÁ¤ÇÑ ¼Óµµ·Î ȸÀüÇϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.






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!