|
|
|
|
|
|
Additional info
|
|
|
|
|
Latest Forum posts
|
|
|
|
|
Ads
|
|
|
|
|
|
|
|
|
|
|
|
»öÀ» ÀÔÈ÷±â ±×¸®°í Z-buffer |
À̹ø tutorial¿¡¼´Â wireframeÀ¸·Î ±¸¼ºµÈ ÁöÇü¿¡ »öÀ» ÀÔÇôº¸°Ú½À´Ï´Ù. ±×¸®°í Á» ´õ º¸±â ÁÁ°Ô ÀÔÈ÷±â À§ÇØ ½ÇÁ¦ ÀÚ¿¬ÀÇ »ö°ú ºñ½ÁÇÏ°Ô »öÀ» ±¸¼ºÇغ¸°Ú½À´Ï´Ù. ½ÇÁ¦ ÁöÇüÀÇ ¿¹¸¦ º¸¸é, ¾Æ¸¶µµ ¾Æ·¡·Î Ç« ÆÄÀÎ Áö´ë´Â ÆÄ¶õ»ö È£¼ö°¡ ÀÖ°í Áö»ó À§ ³·Àº Áö´ë¿¡´Â Ǫ¸¥»ö Ç®°ú ³ª¹«µéÀÌ Á¸ÀçÇÏ¸ç »ê ÁßÅÎÀº °¥»ö ÈëÀ¸·Î, °¡Àå ³ôÀº »ê ²À´ë±â¿¡´Â ÇϾá»ö ´«ÀÌ Á¸ÀçÇÒ °Í ÀÔ´Ï´Ù. ¿ì¸®ÀÇ ÁöÇü¿¡µµ ÀÌ·¯ÇÑ »öÀ» ÀÔÈ÷±â À§ÇØ ³ôÀ̸¦ ±× °ª¿¡ µû¶ó 4´Ü°è·Î ³ª´©¾î ¾Æ·¡ºÎÅÍ ÆÄ¶õ»ö, ³ì»ö, °¥»ö, ÇϾá»öÀ» Â÷·Ê·Î ÇØ´ç ¿µ¿ªÀÇ vertex¿¡ Àû¿ëÇϰڽÀ´Ï´Ù.
»õ Windows Game ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇϰí ÇÊ¿äÇÑ ÆÄÀÏÀ» ÁغñÇսôÙ.
°¡Àå ¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ÃÖ´ë ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀ̸¦ Á¤ÀÇÇÏ´Â °Í ÀÔ´Ï´Ù. ¾óÇÍ »ý°¢Çϱ⿡ heightmapÀÇ ÃÖ´ë°ªÀÌ 255À̰í ÃÖ¼Ò°ªÀÌ 0À̱⠶§¹®¿¡ À̰ÍÀ» ±×´ë·Î ÃÖ´ë ³ôÀÌ, ÃÖ¼Ò ³ôÀ̶ó°í »ý°¢Çϱ⿡ ½¬¿îµ¥ »ç½Ç Ç×»ó ±×·± °ÍÀº ¾Æ´Õ´Ï´Ù. ¿ì¸®ÀÇ ÁöÇüÀÇ °æ¿ì ÃÖ´ë ³ôÀ̸¦ 255, ÃÖ¼Ò ³ôÀ̸¦ 0À¸·Î °¡Á¤Çϰí 4´Ü°è·Î ³ª´©¸é ÆÄ¶õ»ö ºÎºÐ°ú ÇϾá»ö ºÎºÐÀÇ ¿µ¿ªÀÌ ÁöÇü¿¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ¿ì¸®°¡ ¿øÇÏ´Â °á°ú°¡ ¾Æ´ÏÁö¿ä. µû¶ó¼ ÇöÀç ±×·ÁÁö´Â ÁöÇüÀÇ ÃÖ´ë ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀ̸¦ °¡Á®¿Í¼ ±× »çÀ̸¦ 4´Ü°è·Î ³ª´©¾î ÁÖ¾î¾ß ÇÕ´Ï´Ù.
ÃÖ´ë ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀ̸¦ ÀúÀåÇÒ Àü¿ª º¯¼ö¸¦ ¼±¾ðÇÕ´Ï´Ù. ÀÏ´Ü ÃʱⰪÀº ÃÖ´ë ³ôÀÌ´Â 255, ÃÖ¼Ò ³ôÀÌ´Â 0À» ÁÖ°Ú½À´Ï´Ù.
int minimumheight = 255; int maximumheight = 0;
LoadHeightDataÇÔ¼öÀÇ ³ôÀ̰ªÀ» ÀúÀåÇÏ´Â ºÎºÐ¿¡ ´ÙÀ½°ú °°ÀÌ ÃÖ´ë ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀ̸¦ ±¸ÇÏ´Â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
heightdata[WIDTH - 1 - x, HEIGHT - 1 - y] = height; if (height < minimumheight) minimumheight = height; if (height > maximumheight) maximumheight = height;
ÀÌÁ¦ ÃÖ´ë ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀÌ »çÀÌÀÇ ¿µ¿ªÀ» 4µîºÐÇØ¾ß ÇÕ´Ï´Ù.
±âÁ¸ÀÇ ÇϾá»öÀ¸·Î vertexÀÇ »ö»ó°ªÀ» ÁöÁ¤ÇÏ´Â Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇսôÙ.
vertices[x + y * WIDTH].Position = new Vector3(x, y, heightdata[x,y]); if (heightdata[x, y] < minimumheight + (maximumheight - minimumheight) * 1 / 4) vertices[x + y * WIDTH].Color = Color.Blue; else if (heightdata[x, y] < minimumheight + (maximumheight - minimumheight) * 2 / 4) vertices[x + y * WIDTH].Color = Color.Green; else if (heightdata[x, y] < minimumheight + (maximumheight - minimumheight) * 3 / 4) vertices[x + y * WIDTH].Color = Color.Brown; else vertices[x + y * WIDTH].Color = Color.White;
ÇØ´ç ÄÚµå´Â ÃÖ¼Ò ³ôÀ̰ª°ú ÃÖ´ë ³ôÀ̰ª »çÀ̸¦ 4µîºÐÇÏ¿© °¢ ¿µ¿ªÀÇ vertexÀÇ »ö»ó°ªÀ» Blue, Green, Brown, White·Î ÁöÁ¤ÇÕ´Ï´Ù.
ÇöÀç´Â lineÀ¸·Î ÁöÇüÀÌ Ç¥ÇöµÇ¾î Àֱ⠶§¹®¿¡(wireframe), »öÀÌ ÀÔÇôÁø ÁöÇüÀ» Ç¥ÇöÇϱâ À§ÇØ ´ÙÀ½ÀÇ Äڵ带 »èÁ¦ÇϰڽÀ´Ï´Ù.
device.RenderState.FillMode = FillMode.WireFrame;
À§ÀÇ Äڵ带 »èÁ¦Çϸé FillMode´Â ÀÚµ¿À¸·Î ±âº»°ªÀÎ Solid·Î ¼³Á¤µË´Ï´Ù. ȤÀº FillMode.Solid¿Í °°ÀÌ Á÷Á¢ ¼³Á¤ÇØÁ־ »ó°ü¾ø½À´Ï´Ù.
F5(µð¹ö±×)۸¦ ´·¯ ½ÇÇà ½ÃŲ ÈÄ ÁöÇüÀ» ¸î ¹ø ȸÀü½ÃÄÑ º¾½Ã´Ù. PCÀÇ ±×·¡ÇÈ Ä«µå¿¡ µû¶ó °á°ú°¡ ´Ù¸£°Ô ³ªÅ¸³¯ ¼ö ÀÖÁö¸¸ ¾Æ¸¶µµ ÁöÇüÀÌ Á¦´ë·Î ³ªÅ¸³ªÁö ¾Ê°Å³ª ÁöÇü»ó ºÀ¿ì¸®¿¡ ÇØ´çÇÏ´Â ¿µ¿ªÀÌ °¡·ÁÁ® º¸ÀÌÁö ¾Ê¾Æ¾ß Çϴ ȣ¼ö µîÀÇ ¿µ¿ª µÚ¿¡ °ãÃÄ ±×·ÁÁ® ¸Å¿ì ÀÌ»óÇÏ°Ô º¸ÀÏ °Í ÀÔ´Ï´Ù. ÀÌ´Â ¾ÆÁ÷ Z-buffer°¡ ¼³Á¤µÇÁö ¾Ê¾Ò±â ¶§¹®ÀÔ´Ï´Ù. Z-buffer´Â ´Ü¼øÇÏ°Ô ¿©·¯ºÐÀÇ ±×·¡ÇÈ Ä«µå°¡ ¾î´À vertexµé¸¦ ¾î´À vertexµé À§¿¡ ±×·Á¾ß ÇÏ´ÂÁö ¼ø¼¸¦ ÀúÀåÇϰí ÀÖ´Â ±íÀÌÀÇ ÁÂÇ¥°ª ¹è¿ÀÏ »ÓÀÔ´Ï´Ù. ¿¹¸¦ µé¾î Áö±Ý ¿ì¸®ÀÇ ÁöÇüÀ» ±×·¡ÇÈ Ä«µå°¡ ±×¸± ¶§ ¿ì¸®´Â °£´ÜÈ÷ ¿ì¸®ÀÇ ½Ã¼±(Ä«¸Þ¶ó)À» ±âÁØÀ¸·Î ¾Õ¿¡ ÀÖ´Â »ï°¢Çü(ºÀ¿ì¸® ¿µ¿ª)ÀÌ µÚ¿¡ ÀÖ´Â »ï°¢Çü(È£¼ö ¿µ¿ª)À» °¡¸®°í ÀÖÀ½À» ÆÇ´ÜÇÒ ¼ö ÀÖÁö¸¸, ±×·¡ÇÈ Ä«µå´Â ±×·¸Áö ¸øÇÕ´Ï´Ù. ±×·¡ÇÈ Ä«µåÀÇ ÀÔÀå¿¡¼´Â Z-buffer°¡ ¾ø´Ù¸é µÎ »ï°¢ÇüÀÇ ¿ì¼± ¼øÀ§¸¦ ÆÇ´ÜÇÏÁö ¸øÇÏ°í µ¿½Ã¿¡ °°Àº À§Ä¡¿¡ µÎ »ï°¢ÇüÀ» °ãÃÄ ±×¸®°Ô µÇ¹Ç·Î °á°úÀûÀ¸·Î Áö±Ý°ú °°ÀÌ ¸Å¿ì ÀÌ»óÇÑ È¸éÀÌ Ãâ·ÂµË´Ï´Ù.
ÇÏÁö¸¸ ´ÙÇàÈ÷µµ ¿ì¸®ÀÇ ÁöÇü¿¡ Z-buffer¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. ±×Àú DrawÇÔ¼öÀÇ device.Clear ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¿© Z-buffer¸¦ ¼³Á¤ÇØ Áֱ⸸ ÇÏ¸é µË´Ï´Ù. ³ª¸ÓÁö ÀÏÀº ¸ðµÎ ¿©·¯ºÐÀÇ ±×·¡ÇÈ Ä«µåÀÇ ¸òÀÌÁö¿ä.
device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.Black, 1.0f, 0);
ÀÌÁ¦ F5(µð¹ö±×)۸¦ ´·¯º¾½Ã´Ù.
- Website design & XNA + DirectX code : Riemer Grootjans - ©2003 - 2011 Riemer Grootjans
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007 - 2011 MVP Award DirectX - XNA
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Support this site -- any amount is welcome !
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|