DirectX Graphics ÇÁ·Î±×·¡¹Ö °¡ÀÌµå °íµµÀÇ ÁÖÁ¦ ÇÁ·¹ÀÓ ¹öÆÛ Æ÷±×(¾È°³:fog)ÀÇ Á¾·ù Á¤Á¡ Æ÷±×(¾È°³:fog)   [¸ñÂ÷¿­¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
Á¤Á¡ Æ÷±×(¾È°³:fog)
 
Microsoft DirectX 9.0

Á¤Á¡ Æ÷±×(¾È°³:fog)


½Ã½ºÅÛÀº Á¤Á¡ Æ÷±×(¾È°³:fog)¸¦ ½ÇÇà ÇÒ ¶§ ´Ù°¢ÇüÀÇ °¢ Á¤Á¡¿¡ Æ÷±×(¾È°³:fog) °è»êÀ» Àû¿ëÇØ, ´ÙÀ½¿¡, rasterize¶§, ´Ù°¢ÇüÀÇ ¸é¿¡ °á°ú¸¦ º¸°£ ÇÑ´Ù. Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ ÀÌÆåÆ®´Â, Microsoft® Direct3D® ÀÇ Á¶¸í & º¯È¯ ¿£Áø¿¡ ÀÇÇØ °è»êµÈ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â, ¡¸Æ÷±×(¾È°³:fog) ÆÄ¶ó¹ÌÅÍ¡¹¸¦ ÂüÁ¶ÇÒ°Í.

¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Direct3D ¸¦ »ç¿ëÇÏÁö ¾Ê°í º¯È¯ & Á¶¸íÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Æ÷±×(¾È°³:fog) °è»êÀ» ½Ç½ÃÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ °æ¿ì, °è»êµÈ Æ÷±×(¾È°³:fog) °è¼ö¸¦, °¢ Á¤Á¡ÀÇ ½ºÆåÅ¥·¯»öÀÇ ¾ËÆÄ ¼ººÐ¿¡ µÐ´Ù. °ø½ÄÀ¸·Î´Â, ¹üÀ§ º£À̽ºÀÇ °ø½Ä, üÀûÀ» ÀÌ¿ëÇÏ´Â °ø½ÄÀûÀÎ , ¾î¶°ÇÑ °Í¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Direct3D ´Â ÁÖ¾îÁø Æ÷±×(¾È°³:fog) °è¼ö¸¦ »ç¿ëÇØ, °¢ ´Ù°¢ÇüÀÇ ¸éÀ» º¸°£ ÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î µ¶ÀÚÀûÀÎ º¯È¯ & Á¶¸íÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, µ¶ÀÚÀûÀÎ Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ °è»êÀ» ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Ù. µû¶ó¼­, ±×·¯ÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â, ¡¸Æ÷±×(¾È°³:fog) È¥ÇÕ¡¹ ¹× ¡¸Æ÷±×(¾È°³:fog)»ö¡¹À¸·Î ¼³¸íÇϵµ·Ï(µíÀÌ), Æ÷±×(¾È°³:fog) È¥ÇÕÀ» À¯È¿ÇÏ°Ô ÇØ, °ü·ÃÇÏ´Â ·»´õ¸µ ½ºÅ×ÀÌÆ®¿¡ ÀÇÇØ Æ÷±×(¾È°³:fog)»öÀ» ¼³Á¤ÇÏ´Â °Í¸¸À¸·Î ÁÁ´Ù.

ÁÖ  Á¤Á¡ ¼ÎÀÌ´õ¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â, Á¤Á¡ Æ÷±×(¾È°³:fog)¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ´Ù. ±× ¶§¹®¿¡(À§ÇØ)´Â, Á¤Á¡ ¼ÎÀÌ´õ¸¦ »ç¿ëÇØ, Á¤Á¡¸¶´Ù Æ÷±×(¾È°³:fog) °­µµ¸¦ oFog ·¹Áö½ºÅÍ¿¡ ±âÀÔÇÑ´Ù. Çȼ¿ ¼ÎÀÌ´õÀÇ Ã³¸®°¡ ¿Ï·áÇÑ ÈÄ, oFog µ¥ÀÌÅ͸¦ »ç¿ëÇØ Æ÷±×(¾È°³:fog)»ö¿¡ ÀÇÇÑ ¼±Çü º¸°£À» ÇÑ´Ù. ÀÌ °­µµ´Â Çȼ¿ ¼ÎÀÌ´õ¿¡¼­´Â ÀÌ¿ëÇÒ ¼ö ¾ø´Ù.

¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)

ÁÖ  Direct3D ¿¡¼­´Â, Direct3D ÀÇ º¯È¯ & Á¶¸í ¿£ÁøÀ¸·Î Á¤Á¡ Æ÷±×(¾È°³:fog)¸¦ »ç¿ëÇÒ ¶§¿¡¸¸, ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)ÀÇ °è»êÀ» ½ÇÇàÇÑ´Ù. À̰ÍÀº, Çȼ¿ Æ÷±×(¾È°³:fog)´Â ÀåÄ¡ µå¶óÀ̹ö¿¡ ó¸® µÇ¾î ÇöÀç·Î¼­´Â, Çȼ¿ ´ÜÀ§ÀÇ ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)¸¦ Áö¿ø ÇÏ´Â Çϵå¿þ¾î´Â Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î µ¶ÀÚÀûÀÎ º¯È¯ & Á¶¸íÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, ¹üÀ§ º£À̽ºÀÇ °è»êÀ̳ª ±× ¿ÜÀÇ °è»ê¿¡ ÀÇÇÑ µ¶ÀÚÀûÀÎ Æ÷±×(¾È°³:fog) °è»êÀ» ½Ç½ÃÇÒ Çʿ䰡 ÀÖ´Ù.

Æ÷±×(¾È°³:fog)¸¦ »ç¿ëÇÏ¸é °³Ã¼°¡ Æ÷±×(¾È°³:fog)»ö°ú Á÷°¨ÀûÀÌ ¾Æ´Ñ ¹æ¹ýÀ¸·Î ºí·»µå µÇ´Â ºÎÀÚ¿¬½º·¯¿î ±×·¡ÇȽº È¿°ú°¡ »ý±â´Â ÀÏÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î, 2 °³ÀÇ °³Ã¼°¡ º¸À̰í ÀÖ¾î, ÇÑÆíÀº Æ÷±×(¾È°³:fog)ÀÇ ¿µÇâÀ» ¹ÞÀ» Á¤µµ·Î¿¡ ¸Ö¸® ÀÖ¾î, ÇÑÆíÀº ¿µÇâÀ» ¹ÞÁö ¾ÊÀ» Á¤µµ ¿¡ ±Ùó¿¡ ÀÖ´Ù°í ÇÏ´Â Àå¸é(scene)¸¦ »óÁ¤ÇÑ´Ù. Ç¥½Ã ¿µ¿ªÀÌ °°Àº Àå¼Ò¿¡¼­ ȸÀüÇßÀ» °æ¿ì, °³Ã¼°¡ Á¤ÁöÇϰí ÀÖ¾ú´Ù°í ÇØµµ, ³ªÅ¸³ª´Â Æ÷±×(¾È°³:fog) ÀÌÆåÆ®´Â º¯È­ÇÏ´Â ÀÏÀÌ ÀÖ´Ù. ´ÙÀ½ ±×¸²Àº ÀÌ·¯ÇÑ »óȲÀ» À§·ÎºÎÅÍ º¸¾Ò´õ´Ï ÀÖ´Ù.

½ÃÁ¡ÀÇ º¯°æ¿¡ ÀÇÇÑ Æ÷±×(¾È°³:fog)¿¡ÀÇ ¿µÇâ

¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)´Â, Æ÷±×(¾È°³:fog) ÀÌÆåÆ®¸¦ º¸´Ù Á¤È®ÇÏ°Ô °áÁ¤ÇÏ´Â ¹æ¹ýÀÌ´Ù. ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)¿¡¼­´Â, Direct3D ´Â ½ÃÁ¡À¸·ÎºÎÅÍ Á¤Á¡±îÁöÀÇ ½ÇÁ¦ÀÇ °Å¸®¸¦ Æ÷±×(¾È°³:fog)ÀÇ °è»ê¿¡ »ç¿ëÇÑ´Ù. Àå¸é(scene)ÀÇ ¹üÀ§³»¿¡¼­ÀÇ Á¤Á¡ÀÇ ±íÀÌ´Â ¾Æ´Ï°í 2 Á¡°£ÀÇ °Å¸®ÀÇ Áõ°¡¿¡ µû¶ó Æ÷±×(¾È°³:fog)ÀÇ ÀÌÆåÆ®°¡ Áõ°¡µÇ±â (À§ÇØ)¶§¹®¿¡, ºÎÀÚ¿¬½º·¯¿î ȸÀü È¿°ú°¡ ȸÇǵȴÙ.

ÇöÀçÀÇ ÀåÄ¡°¡ ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)¸¦ Áö¿ø Çϰí ÀÖ´Â °æ¿ì,IDirect3DDevice9::GetDeviceCaps ¸Þ¼­µå¸¦ È£ÃâÇßÀ» ¶§¿¡, ÀåÄ¡´Â D3DCAPS9 ÀÇ RasterCaps ¸â¹ö¿¡ D3DPRASTERCAPS_FOGRANGE °ªÀ» ¼³Á¤ÇÑ´Ù. ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)¸¦ À¯È¿ÇÏ°Ô ÇÏ·Á¸é ,D3DRS_RANGEFOGENABLE ·»´õ¸µ ½ºÅ×ÀÌÆ®¸¦ TRUE ·Î ¼³Á¤ÇÑ´Ù.

¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog)´Â, Direct3D ¿¡ ÀÇÇØ, º¯È¯ & Á¶¸íÀÇ »çÀÌ¿¡ °è»êµÈ´Ù. Direct3D º¯È¯ & Á¶¸í ¿£ÁøÀ» »ç¿ëÇÏÁö ¾Ê´Â ¾ÖÇø®ÄÉÀ̼ÇÀº, µ¶ÀÚÀûÀ¸·Î Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ °è»êµµ ½Ç½ÃÇØ¾ß ÇÑ´Ù. ÀÌ °æ¿ì, ¹üÀ§ º£À̽ºÀÇ Æ÷±×(¾È°³:fog) °è¼ö¸¦, °¢ Á¤Á¡ÀÇ ½ºÆåÅ¥·¯ ¼ººÐÀÇ ¾ËÆÄ ¼ººÐÀ¸·Î ¼³Á¤ÇÑ´Ù.

Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ »ç¿ë¹ý

¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Á¤Á¡ Æ÷±×(¾È°³:fog)¸¦ À¯È¿ÇÏ°Ô ÇÏ·Á¸é , ´ÙÀ½ÀÇ ¼ø¼­¸¦ ½ÇÇàÇÑ´Ù.

  1. D3DRS_FOGENABLE ¸¦ TRUE ·Î ¼³Á¤ÇØ, Æ÷±×(¾È°³:fog) È¥ÇÕÀ» À¯È¿ÇÏ°Ô ÇÑ´Ù.
  2. D3DRS_FOGCOLOR ·»´õ¸µ ½ºÅ×ÀÌÆ®·Î, ÇÊ¿äÇÑ Æ÷±×(¾È°³:fog)»öÀ» ¼³Á¤ÇÑ´Ù.
  3. D3DRS_FOGVERTEXMODE ·»´õ¸µ ½ºÅ×ÀÌÆ®¸¦ D3DFOGMODE ¿­°ÅÇüÀÇ ¸â¹ö·Î ¼³Á¤ÇØ, ¸ñÀûÀÇ Æ÷±×(¾È°³:fog) °ø½ÄÀ» ¼±ÅÃÇÑ´Ù.
  4. ¼±ÅÃÇÑ Æ÷±×(¾È°³:fog) °ø½Ä¿¡¼­ ÇÊ¿äÇÑ Æ÷±×(¾È°³:fog) ÆÄ¶ó¹ÌÅ͸¦ ·»´õ¸µ ½ºÅ×ÀÌÆ®·Î ¼³Á¤ÇÑ´Ù.

´ÙÀ½ÀÇ C++ »ùÇà ÄÚµå´Â, ÀÌ·¯ÇÑ ¼ø¼­¸¦ ³ªÅ¸³»°í ÀÖ´Ù.

// For brevity, error values in this example are not checked 
//   after each call.  A real-world application should check 
//   these values appropriately.
//
// For the purposes of this example, g_pDevice is a valid
//   pointer to an IDirect3DDevice9 interface.
void SetupVertexFog(DWORD Color, DWORD Mode, BOOL UseRange, FLOAT Density)
{
    float Start = 0.5f,    // Linear fog distances
          End   = 0.8f;
 
    // Enable fog blending.
    g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
 
    // Set the fog color.
    g_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color);
    
    // Set fog parameters.
    if(D3DFOG_LINEAR == Mode)
    {
        g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, Mode);
        g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start));
        g_pDevice->SetRenderState(D3DRS_FOGEND,   *(DWORD *)(&End));
    }
    else
    {
        g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, Mode);
        g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
    }

    // Enable range-based fog if desired (only supported for
    //   vertex fog).  For this example, it is assumed that UseRange
    //   is set to a nonzero value only if the driver exposes the 
    //   D3DPRASTERCAPS_FOGRANGE capability.
    // Note: This is slightly more performance intensive
    //   than non-range-based fog.
    if(UseRange)
        g_pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, TRUE);
}

IDirect3DDevice9::SetRenderState ¸Þ¼­µå´Â, Á¦ 2 Àμö¿¡ DWORD °ª¸¸À» ¹ÞÁö¸¸, ºÎµ¿ ¼Ò¼öÁ¡ÀÇ Æ÷±×(¾È°³:fog) ÆÄ¶ó¹ÌÅͰ¡ ¿ä±¸µÇ´Â Àϵµ ÀÖ´Ù. ÀÌ ¿¹¿¡¼­´Â, ºÎµ¿ ¼Ò¼öÁ¡ÀÇ °ªÀ» µ¥ÀÌÅÍÀÇ ÆòÇàÀ̵¿¾øÀÌ ¸Þ¼­µå¿¡ °Ç³×ÁÖ±â À§Çؼ­(¶§¹®¿¡), ºÎµ¿ ¼Ò¼öÁ¡ º¯¼öÀÇ ÁÖ¼Ò¸¦ DWORD Æ÷ÀÎÅͷμ­ ij½ºÆ® ÇØ, ´ÙÀ½¿¡ ±×°ÍÀ» ÂüÁ¶·ÎºÎÅÍ ÇØÁ¦Çϰí ÀÖ´Ù.



© 2002 Microsoft Corporation. All rights reserved.
¡èTOP