DirectX Graphics ÇÁ·Î±×·¡¹Ö °¡ÀÌµå °íµµÀÇ ÁÖÁ¦ ÇÁ·¹ÀÓ ¹öÆÛ Æ÷±×(¾È°³:fog)ÀÇ Á¾·ù Á¤Á¡ Æ÷±×(¾È°³:fog) [¸ñÂ÷¿¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
|
| Microsoft DirectX 9.0 |
½Ã½ºÅÛÀº Á¤Á¡ Æ÷±×(¾È°³:fog)¸¦ ½ÇÇà ÇÒ ¶§ ´Ù°¢ÇüÀÇ °¢ Á¤Á¡¿¡ Æ÷±×(¾È°³:fog) °è»êÀ» Àû¿ëÇØ, ´ÙÀ½¿¡, rasterize¶§, ´Ù°¢ÇüÀÇ ¸é¿¡ °á°ú¸¦ º¸°£ ÇÑ´Ù. Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ ÀÌÆåÆ®´Â, Microsoft® Direct3D® ÀÇ Á¶¸í & º¯È¯ ¿£Áø¿¡ ÀÇÇØ °è»êµÈ´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â, ¡¸Æ÷±×(¾È°³:fog) ÆÄ¶ó¹ÌÅÍ¡¹¸¦ ÂüÁ¶ÇÒ°Í.
¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Direct3D ¸¦ »ç¿ëÇÏÁö ¾Ê°í º¯È¯ & Á¶¸íÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Æ÷±×(¾È°³:fog) °è»êÀ» ½Ç½ÃÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ °æ¿ì, °è»êµÈ Æ÷±×(¾È°³:fog) °è¼ö¸¦, °¢ Á¤Á¡ÀÇ ½ºÆåÅ¥·¯»öÀÇ ¾ËÆÄ ¼ººÐ¿¡ µÐ´Ù. °ø½ÄÀ¸·Î´Â, ¹üÀ§ º£À̽ºÀÇ °ø½Ä, üÀûÀ» ÀÌ¿ëÇÏ´Â °ø½ÄÀûÀÎ , ¾î¶°ÇÑ °Í¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Direct3D ´Â ÁÖ¾îÁø Æ÷±×(¾È°³:fog) °è¼ö¸¦ »ç¿ëÇØ, °¢ ´Ù°¢ÇüÀÇ ¸éÀ» º¸°£ ÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î µ¶ÀÚÀûÀÎ º¯È¯ & Á¶¸íÀ» ½ÇÇàÇÏ´Â °æ¿ì´Â, µ¶ÀÚÀûÀÎ Á¤Á¡ Æ÷±×(¾È°³:fog)ÀÇ °è»êÀ» ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Ù. µû¶ó¼, ±×·¯ÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â, ¡¸Æ÷±×(¾È°³:fog) È¥ÇÕ¡¹ ¹× ¡¸Æ÷±×(¾È°³:fog)»ö¡¹À¸·Î ¼³¸íÇϵµ·Ï(µíÀÌ), Æ÷±×(¾È°³:fog) È¥ÇÕÀ» À¯È¿ÇÏ°Ô ÇØ, °ü·ÃÇÏ´Â ·»´õ¸µ ½ºÅ×ÀÌÆ®¿¡ ÀÇÇØ Æ÷±×(¾È°³:fog)»öÀ» ¼³Á¤ÇÏ´Â °Í¸¸À¸·Î ÁÁ´Ù.
Æ÷±×(¾È°³:fog)¸¦ »ç¿ëÇÏ¸é °³Ã¼°¡ Æ÷±×(¾È°³:fog)»ö°ú Á÷°¨ÀûÀÌ ¾Æ´Ñ ¹æ¹ýÀ¸·Î ºí·»µå µÇ´Â ºÎÀÚ¿¬½º·¯¿î ±×·¡ÇȽº È¿°ú°¡ »ý±â´Â ÀÏÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î, 2 °³ÀÇ °³Ã¼°¡ º¸À̰í ÀÖ¾î, ÇÑÆíÀº Æ÷±×(¾È°³:fog)ÀÇ ¿µÇâÀ» ¹ÞÀ» Á¤µµ·Î¿¡ ¸Ö¸® ÀÖ¾î, ÇÑÆíÀº ¿µÇâÀ» ¹ÞÁö ¾ÊÀ» Á¤µµ ¿¡ ±Ùó¿¡ ÀÖ´Ù°í ÇÏ´Â Àå¸é(scene)¸¦ »óÁ¤ÇÑ´Ù. Ç¥½Ã ¿µ¿ªÀÌ °°Àº Àå¼Ò¿¡¼ ȸÀüÇßÀ» °æ¿ì, °³Ã¼°¡ Á¤ÁöÇϰí ÀÖ¾ú´Ù°í ÇØµµ, ³ªÅ¸³ª´Â Æ÷±×(¾È°³: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)¸¦ À¯È¿ÇÏ°Ô ÇÏ·Á¸é , ´ÙÀ½ÀÇ ¼ø¼¸¦ ½ÇÇàÇÑ´Ù.
´ÙÀ½ÀÇ 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½ºÆ® ÇØ, ´ÙÀ½¿¡ ±×°ÍÀ» ÂüÁ¶·ÎºÎÅÍ ÇØÁ¦Çϰí ÀÖ´Ù.