|
|
|
|
|
|
Additional info
|
|
|
|
|
Latest Forum posts
|
|
|
|
|
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)۸¦ ´·¯ ½ÇÇàÇØº¸¸é ¿ì¸®ÀÇ »ï°¢ÇüÀÌ È¸éÀÇ Áß¾Ó¿¡¼ ½Ã°£ÀÇ È帧¿¡ µû¶ó º¯Çϴ ȸÀüÃàÀ» ±âÁØÀ¸·Î ÀÏÁ¤ÇÑ ¼Óµµ·Î ȸÀüÇϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
- Website design & XNA + DirectX code : Riemer Grootjans - ©2003 - 2008 Riemer Grootjans
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007 - 2008 MVP Award DirectX - XNA
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Support this site -- any amount is welcome !
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|