DirectX Graphics ÇÁ·Î±×·¡¹Ö °¡ÀÌµå °íµµÀÇ ÁÖÁ¦ ÇÁ·¹ÀÓ ¹öÆÛ Æ÷±×(¾È°³:fog)ÀÇ Á¾·ù Çȼ¿ Æ÷±×(¾È°³:fog) [¸ñÂ÷¿¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
|
| Microsoft DirectX 9.0 |
Çȼ¿ Æ÷±×(¾È°³:fog)¶ó´Â À̸§Àº, ÀåÄ¡ µå¶óÀ̹ö°¡ Çȼ¿ ´ÜÀ§·Î °è»êÇÏ´Â °Í¿¡ À¯·¡ÇÑ´Ù. À̰ÍÀº Á¤Á¡ Æ÷±×(¾È°³:fog)¿Í´Â ´Ù¸£´Ù. Á¤Á¡ Æ÷±×(¾È°³:fog)´Â, º¯È¯ ¹× Á¶¸íÀÇ °è»ê½Ã¿¡ ÆÄÀÌÇÁ¶óÀÎÀÌ °è»êÇÑ´Ù. Çȼ¿ Æ÷±×(¾È°³:fog)´Â, µå¶óÀ̹ö¿¡ µû¶ó¼´Â, È¥ÇÕ °è»ê¿¡ Àû¿ëÇÏ´Â Æ÷±×(¾È°³:fog) °è¼ö ( °¢ Çȼ¿ÀÇ ±íÀ̸¦ »ç¿ë)¸¦ °áÁ¤Çϱâ À§Çؼ(¶§¹®¿¡) »çÀü¿¡ °è»êµÈ ÂüÁ¶ Å×À̺íÀ» »ç¿ëÇϱâ (À§ÇØ)¶§¹®¿¡, Å×ÀÌºí Æ÷±×(¾È°³:fog)¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. Çȼ¿ Æ÷±×(¾È°³:fog)´Â,D3DFOGMODE ¿°ÅÇüÀÇ ¸â¹ö°¡ °¡¸®Å°´Â Æ÷±×(¾È°³:fog) °ø½ÄÀÇ ¾î´ÀÂÊÀ̵çÀ» »ç¿ëÇØ Àû¿ëÇÑ´Ù. ÀÌ·¯ÇÑ °ø½ÄÀÇ Ã³¸®Àº µå¶óÀ̹ö °íÀ¯ÇÏ´Ù. µå¶óÀ̹ö°¡ º¹ÀâÇÑ Æ÷±×(¾È°³:fog) °ø½ÄÀ» Áö¿ø Çϰí ÀÖÁö ¾Ê´Â °æ¿ì´Â, º¸´Ù ´Ü¼øÇÑ °ø½ÄÀ» »ç¿ëÇÏ´Â °Í.
±íÀÌ ¹öÆÛ³»¿¡¼ÀÇ z °ªÀÇ ºÒ±ÕµîÀÎ °ÝÂ÷¿¡ ÀÇÇØ »ý±â´Â, Æ÷±×(¾È°³:fog)ÀÇ ºÎÀÚ¿¬½º·¯¿î ±×·¡ÇȽº È¿°ú¸¦ ¾ïÁ¦Çϱâ À§Çؼ(¶§¹®¿¡), ´ëºÎºÐÀÇ Çϵå¿þ¾î ÀåÄ¡¿¡¼´Â, Çȼ¿ Æ÷±×(¾È°³:fog)¿¡ z º£À̽º ±íÀ̰ªÀº ¾Æ´Ï°í ½ÃÁ¡À¸·ÎºÎÅÍÀÇ »ó´ë ±íÀ̸¦ »ç¿ëÇÑ´Ù. ½ÃÁ¡À¸·ÎºÎÅÍÀÇ »ó´ë ±íÀ̶õ, º»ÁúÀûÀ¸·Î´Â µ¿Â÷ ÁÂÇ¥ ¼¼Æ®·ÎºÎÅÍÀÇ w ¿ä¼ÒÀÌ´Ù. Microsoft® Direct3D® ´Â, ÀåÄ¡ °ø°£ ÁÂÇ¥·ÎºÎÅÍ RHW ¿ä¼ÒÀÇ ¿ª¼ö¸¦ ÃëµæÇØ ÁøÁ¤ÇÑ w ¸¦ Àç»ý¼ºÇÑ´Ù. ÀåÄ¡°¡ ½ÃÁ¡À¸·ÎºÎÅÍÀÇ »ó´ë Æ÷±×(¾È°³:fog)¸¦ Áö¿ø Çϰí ÀÖ´Â °æ¿ì,IDirect3DDevice9::GetDeviceCaps ¸Þ¼µå¸¦ È£ÃâÇϸé, ±× ÀåÄ¡´Â D3DCAPS9 ±¸Á¶Ã¼ÀÇ RasterCaps ¸â¹ö¿¡ D3DPRASTERCAPS_WFOG Ç÷¡±×¸¦ ¼³Á¤ÇÑ´Ù. ·¹ÆÛ·±½º ·¡½ºÅͶóÀÌÀú¸¦ Á¦¿ÜÇØ, ¼ÒÇÁÆ®¿þ¾î ÀåÄ¡´Â Ç×»ó z ¸¦ »ç¿ëÇØ Çȼ¿ Æ÷±×(¾È°³:fog) ÀÌÆåÆ®¸¦ °è»êÇÑ´Ù.
½ÃÁ¡°úÀÇ »ó´ë Æ÷±×(¾È°³:fog)°¡ Áö¿ø µÇ°í ÀÖÀ» ¶§, ¼³Á¤µÈ Åõ¿µ Çà·Ä·Î ÀåÄ¡ °ø°£ÀÇ w °ª¿¡ ´ëÀÀÇÏ´Â, ¿ùµå °ø°£ÀÇ z °ªÀ» »ý¼ºÇÏ´Â °æ¿ì, ½Ã½ºÅÛÀº z º£À̽º ±íÀ̺¸´Ù ½ÃÁ¡À¸·ÎºÎÅÍÀÇ »ó´ë ±íÀ̸¦ ¿ì¼±ÇØ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÑ´Ù. Åõ¿µ Çà·ÄÀ» ¼³Á¤ÇÏ·Á¸é ,IDirect3DDevice9::SetTransform ¸Þ¼µå¸¦ È£ÃâÇØ,D3DTS_PROJECTION °ªÀ» »ç¿ëÇØ, ¸ñÀûÀÇ Çà·ÄÀ» ³ªÅ¸³»´Â D3DMATRIX ±¸Á¶Ã¼¸¦ °Ç³×ÁØ´Ù. Åõ¿µ Çà·ÄÀÌ ÀÌ ¿ä°Ç¿¡ ´ëÀÀÇϰí ÀÖÁö ¾Ê´Â °æ¿ì, Æ÷±×(¾È°³:fog) ÀÌÆåÆ®´Â ¿Ã¹Ù¸£°Ô Àû¿ëµÇÁö ¾Ê´Â´Ù. ´ëÀÀÇϰí ÀÖ´Â Çà·ÄÀÇ »ý¼ºÀÇ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â, ¡¸W ¹öÆÛ¿¡ À¯È¿ÇÑ Åõ¿µ Çà·Ä¡¹À» ÂüÁ¶ÇÒ°Í. ¡¸Åõ¿µ º¯È¯À̶õ¡¹À¸·Î ¼³¸íÇÏ´Â ÆÛ½ºÆåƼºê Åõ¿µ Çà·ÄÀº, ÀûÀýÇÑ Åõ¿µ Çà·ÄÀ» »ý¼ºÇÑ´Ù.
Direct3D ¿¡¼´Â, ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â Åõ¿µ Çà·ÄÀ» »ç¿ëÇØ w º£À̽º ±íÀÌÀÇ °è»êÀ» ½ÇÇàÇÑ´Ù. µû¶ó¼, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Direct3D º¯È¯ ÆÄÀÌÇÁ¶óÀÎÀ» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì¿©µµ, ¸ñÀûÀÇ w º£À̽º ±â´ÉÀ» ¾ò¾î¿À±â À§ÇØ ÀûÀýÇÑ Åõ¿µ Çà·ÄÀ» ¼³Á¤ÇØ µÑ Çʿ䰡 ÀÖ´Ù.
Direct3D ´Â Åõ¿µ Çà·ÄÀÇ Á¦ 4 ¿À» Á¶»çÇÑ´Ù. °è¼ö°¡ [0,0,0,1] (¾ÆÇÉ Åõ¿µ)ÀÇ °æ¿ì¿¡´Â, ½Ã½ºÅÛÀº z º£À̽ºÀÇ ±íÀ̰ªÀ» Æ÷±×(¾È°³:fog)¿¡ »ç¿ëÇÑ´Ù. ÀÌ °æ¿ì, ÀåÄ¡ °ø°£ÀÇ ¼±Çü Æ÷±×(¾È°³:fog) ÀÌÆåÆ®ÀÇ ½ÃÀÛ °Å¸® ¹× Á¾·á °Å¸®¸¦ ÁöÁ¤ÇÒ Çʿ䵵 ÀÖ´Ù. ÀÌ ¹üÀ§´Â, »ç¿ëÀÚ¿¡ °¡Àå °¡±î¿î Æ÷ÀÎÆ®¸¦ 0.0 À¸·Î ÇØ, °¡Àå ¸Õ Æ÷ÀÎÆ®¸¦ 1.0 À¸·Î ÇÑ ¹üÀ§ÀÌ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Çȼ¿ Æ÷±×(¾È°³:fog)¸¦ À¯È¿ÇÏ°Ô ÇÏ·Á¸é , ´ÙÀ½ÀÇ ¼ø¼¸¦ ½ÇÇàÇÑ´Ù.
´ÙÀ½ »ùÇà ÄÚµå´Â, ÀÌ·¯ÇÑ ¼ø¼¸¦ ³ªÅ¸³»°í ÀÖ´Ù.
// 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 SetupPixelFog(DWORD Color, DWORD Mode)
{
float Start = 0.5f; // For linear mode
float End = 0.8f;
float Density = 0.66f; // For exponential modes
// Enable fog blending.
g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE);
// Set the fog color.
g_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color);
// Set fog parameters.
if( Mode == D3DFOG_LINEAR )
{
g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
g_pDevice->SetRenderState(D3DRS_FOGSTART, *(DWORD *)(&Start));
g_pDevice->SetRenderState(D3DRS_FOGEND, *(DWORD *)(&End));
}
else
{
g_pDevice->SetRenderState(D3DRS_FOGTABLEMODE, Mode);
g_pDevice->SetRenderState(D3DRS_FOGDENSITY, *(DWORD *)(&Density));
}
IDirect3DDevice9::SetRenderState ¸Þ¼µå´Â, Á¦ 2 ÆÄ¶ó¹ÌÅÍ¿¡ DWORD °ª¸¸À» ¹ÞÁö¸¸, ºÎµ¿ ¼Ò¼öÁ¡ÀÇ Æ÷±×(¾È°³:fog) ÆÄ¶ó¹ÌÅͰ¡ ¿ä±¸µÇ´Â Àϵµ ÀÖ´Ù. À§¿¡ÀÇ¿¹¿¡¼´Â ºÎµ¿ ¼Ò¼öÁ¡ÀÇ °ªÀ» IDirect3DDevice9::SetRenderState ¿¡ °Ç³×ÁÖ±â À§Çؼ(¶§¹®¿¡), µ¥ÀÌÅ͸¦ ÆòÇàÀ̵¿ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ºÎµ¿ ¼Ò¼öÁ¡ º¯¼öÀÇ ÁÖ¼Ò¸¦ DWORD Æ÷ÀÎÅÍ¿¡ ij½ºÆ® ÇØ, ´ÙÀ½¿¡ ±×°ÍÀ» ÂüÁ¶Çϰí ÀÖ´Ù.