µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎ
µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀº ÅØ½ºÃ³ ¸Ê°ú À¯»çÇÏÁö¸¸ Á¤Á¡ ¿£ÁøÀÌ Ã³¸®ÇÑ´Ù.
ºí·°µµ
Á¤Á¡ ÆÄÀÌÇÁ¶óÀÎÀÇ Ã³À½¿¡ Ãß°¡ÀÇ »ùÇ÷¯ ½ºÅ×ÀÌÁö°¡ ÀÖ¾î, ¿©±â¼, µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ» »ùÇøµ ÇØ Á¤Á¡ µð½ºÇ÷¹À̽º¸ÕÆ® µ¥ÀÌŸ¸¦ Á¦°øÇÑ´Ù.

µð½ºÇ÷¹À̽º¸ÕÆ® ¸Ê»ùÇ÷¯½ºÅ×ÀÌÆ®´Â,IDirect3DDevice9::SetSamplerState ·Î ½ºÅ×ÀÌÁö ¹øÈ£ 256 À» »ç¿ëÇØ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº »õ·Î¿î ½ºÅ×ÀÌÁö ¹øÈ£ÀÌ´Ù. µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÅØ½ºÃ³´Â,IDirect3DDevice9::SetTexture ·Î ¼³Á¤ÇÑ´Ù.
ÀÌ ¸ÊÀº ÇÁ¸®»ùÇøµ ÇØµµ ÇÏÁö ¾Ê¾Æµµ µÇ´Ù. Áï, µð½ºÇ÷¹À̽º¸ÕÆ®°ªÀ» ÇÊÅ͸µ ÇÏÁö ¾Ê°í ÂüÁ¶ÇÏ´Â °æ¿ì¿Í °°Àº ¹æ¹ýÀ¸·Î ¿ä±¸ÇÒ ¼ö ÀÖ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀº ÅØ½ºÃ³ ¸Ê°ú À¯»çÇÏÁö¸¸ Á¤Á¡ ¿£ÁøÀ¸·Î ¾×¼¼½º ÇÑ´Ù.
- Á¤Á¡ ÆÄÀÌÇÁ¶óÀÎÀÇ Ã³À½¿¡´Â, µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ» »ùÇøµ ÇÏ´Â Ãß°¡ÀÇ »ùÇ÷¯ ½ºÅ×ÀÌÁö°¡ ÀÖ´Ù. ÀÌ ½ºÅ×ÀÌÁö¿¡´Â º¸ÅëÀÇ SetSamplerState ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º (API)¸¦ »ç¿ëÇØ ¾×¼¼½º ÇÏÁö¸¸, ½ºÅ×ÀÌÁö ¹øÈ£´Â D3DDMAPSAMPLER = 256 ÀÌ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸Ê»ùÇ÷¯½ºÅ×ÀÌÆ®¸¦ ¼³Á¤ÇÏ·Á¸é , SetSamplerState(D3DDMAPSAMPLER, ...) API ¸¦ »ç¿ëÇÑ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÅØ½ºÃ³´Â, SetTexture(D3DDMAPSAMPLER, texture) API ·Î ¼³Á¤ÇÑ´Ù.
- ÀÌ ¸ÊÀº ÇÁ¸®»ùÇøµ ÇØµµ ÇÏÁö ¾Ê¾Æµµ µÇ´Ù. Áï, µð½ºÇ÷¹À̽º¸ÕÆ®°ªÀ» ÇÊÅ͸µ ÇÏÁö ¾Ê°í ÂüÁ¶ÇÏ´Â °æ¿ì¿Í °°Àº ¹æ¹ýÀ¸·Î ¿ä±¸ÇÒ ¼ö ÀÖ´Ù.
- ¼±¾ð ±¸Á¶ÀÇ º¯°æ¿¡ ÀÇÇØ, ÅØ½ºÃ³ ¸ÊÀÇ ÂüÁ¶¿¡ ÅØ½ºÃ³ ÁÂÇ¥ÀÇ »ç¾çÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ¿¹¸¦ µé¾î, Stream0, Offset, FLOAT2, LOOKUP, Displacement_value ·Î ÇÑ´Ù. À̰ÍÀº, ƯÁ¤ÀÇ ¿ÀÇÁ¼Â(offset)·Î Stream0 ÀÇ 2D ºÎµ¿ º¤Å͸¦ ÅØ½ºÃ³ ÁÂÇ¥·Î¼ »ç¿ëÇØ µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ» ÂüÁ¶ÇØ, Displacement_value ÀÇ »ç¿ë¹ýÀÇ Àǹ̵éÀ» À̰Ϳ¡ °ü·ÃÁþµµ·Ï, Å×¼³·¹ÀÌÅÍ¿¡ Áö½ÃÇÑ´Ù. Á¤Á¡ ¼ÎÀÌ´õÀÇ ¼±¾ð¿¡´Â {dcl_texture0, v0} ¿¡ À¯»çÇÑ ÇàÀÌ ÀÖ¾î, texture0 Àǹ̵éÀ» v0 ÀÔ·Â ·¹Áö½ºÅÍ¿Í °ü·ÃÁþ´Â °ÍÀ» ³ªÅ¸³»°í ÀÖ´Ù. ÂüÁ¶µÇ°í ÀÖ´Â µð½ºÇ÷¹À̽º¸ÕÆ®°ªÀ» ÀÔ·Â ·¹Áö½ºÅÍ v0 ¿¡ º¹»ç ÇÑ´Ù.
- ÅØ½ºÃ³ ¸ÊÀ» ÇÁ¸®»ùÇøµ ÇÏ´Â °æ¿ì´Â, Àü¿ëÀÇ µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ý¼ºµÈ Á¤Á¡ÀÇ ½ÃÄö¼È À妽º¸¦ ÅØ½ºÃ³ ¸ÊÀÇ ÅØ½ºÃ³ ÁÂÇ¥·Î¼ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, 0,0, (D3DDECLTYPE) 0, D3DDECLMETHOD_LOOKUPPRESAMPLED, Usage, UsageIndex ·Î ÇÑ´Ù.
- ÂüÁ¶ÀÇ Ãâ·ÂÀº 4 °³ÀÇ ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÀÌ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎÀÌ Áö¿ø µÇ´Â °ÍÀº N ÆÐÄ¡ÀÇ °æ¿ì »ÓÀÌ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎÀ» ó¸®ÇÒ ¼ö ¾ø´Â µå¶óÀ̹ö´Â, SetTextureStageState ÀÇ D3DDMAPSAMPLER ¸¦ ¹«½ÃÇÒ Çʿ䰡 ÀÖ´Ù.
- D3DTEXF_ANISOTROPIC ÇÊÅÍ ¸ðµå´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸Ê»ùÇ÷¯ÀÇ D3DSAMP_MIPFILTER °¡ D3DTEXF_NONE °¡ ¾Æ´Ñ °æ¿ì´Â, »ó¼¼ ·¹º§ (LOD)À» ´ÙÀ½°ú °°ÀÌ °è»êÇÑ´Ù. D3DRS_ENABLEADAPTIVETESSELLATION °¡ FALSE ¿©µµ ÀûÀÀÇü Å×¼³·¹ÀÌ¼Ç ½ºÅ×ÀÌÆ®°¡ »ç¿ëµÇ¹Ç·Î ÁÖÀÇ ÇØ¾ß ÇÑ´Ù.
Tmax = ·»´õ¸µ ½ºÅ×ÀÌÆ® D3DRS_MAXTESSELLATIONLEVEL - ¡¸ÀûÀÀÇü Å×¼³·¹À̼ǡ¹À¸·Î ¼³¸íÇÑ ¹æ¹ý°ú °°Àº ¹æ¹ýÀ¸·Î, ÁÂÇ¥ (Xi, Yi, Zi)ÀÇ Á¤Á¡ ViÀÇ Å×¼³·¹ÀÌ¼Ç ·¹º§À» °è»êÇÑ´Ù. °è»ê½ÄÀº, LOD L = log2(Tmax) - log2 (Te).
- ÅØ½ºÃ³ ÇÊÅ͸µ ¹× »ùÇøµ 󸮴Â, Çȼ¿ ÆÄÀÌÇÁ¶óÀΰú °°Àº ±ÔÄ¢ (»ó¼¼ ·¹º§ (LOD) ¹ÙÀ̾ÀÇ Àû¿ë µî)¿¡ µû¸¥´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ¸·Î¼ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº, D3DUSAGE_DMAP ¸¦ Áö¿ø Çϰí ÀÖ´Â Æ÷¸Ë »ÓÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀº,IDirect3D9::CheckDeviceFormat ¸¦ »ç¿ëÇØ À̰ÍÀ» ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.
- ÀÌ ÅØ½ºÃ³¸¦ µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ¸·Î¼ »ç¿ëÇÏ´Â °ÍÀ» µå¶óÀ̹ö¿¡ ÅëÁöÇϱâ À§Çؼ,IDirect3DDevice9::CreateTexture ¿¡ D3DUSAGE_DMAP ¸¦ ¼³Á¤ÇÒ Çʿ䰡 ÀÖ´Ù.
- D3DUSAGE_DMAP ´Â, ÅØ½ºÃ³¿Í µ¿½Ã¿¡ »ç¿ëÇÑ´Ù. Å¥ºê ¸ÊÀ̳ª º¼·ý°ú µ¿½Ã¿¡´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
- D3DUSAGE_DMAP ·Î »ý¼º ÇÑ ÅØ½ºÃ³¿Í ·»´õ¸µ Ÿ°ÙÀº, Ç¥ÁØÀÇ »ùÇ÷¯ ½ºÅ×ÀÌÁö¿¡ ·»´õ¸µ Ÿ°ÙÀ¸·Î¼ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇο¡¼´Â, ÅØ½ºÃ³ ÁÂÇ¥ÀÇ ·¦ ¸ðµå¸¦ ¼³Á¤ÇÏ´Â ·»´õ¸µ ½ºÅ×ÀÌÆ®¸¦ ¹«½ÃÇÑ´Ù. º¸Åë, Å×¼³·¹ÀÌÅÍ ¿£Áø¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ·¦ ¸ðµå´Â ¾ø´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸Ê»ùÇ÷¯ÀÇ µ¿ÀÛÀº, Çȼ¿ ÅØ½ºÃ³ »ùÇ÷¯ÀÇ µ¿ÀÛ°ú °°´Ù. 4 ä³Î ¹Ì¸¸ÀÇ ÅØ½ºÃ³ (R32f µî)°¡ ÂüÁ¶µÇ°í ÀÖ´Â °æ¿ì, ÂüÁ¶µÇ°í ÀÖ´Â °ªÀº Ãâ·Â ·¹Áö½ºÅÍ (_sample Àǹ̵éÀ» »ç¿ëÇØ ÅÂ±× ºÙÀ̰í ÇÑ Á¤Á¡ ¼ÎÀÌ´õ ÀÔ·Â ·¹Áö½ºÅÍ)ÀÇ ÀûÀýÇÑ Ã¤³Î¿¡ º¸³»Áø´Ù. ±× ¿ÜÀÇ Ã¤³ÎÀº, µðÆúÆ®·Î (1, 1, 1)°¡ µÈ´Ù. ÂüÁ¶µÇ¸é D3DFMT_L8 ´Â R, G, B ä³Î¿¡ ºê·Îµåij½ºÆ® µÇ¾î A ´Â µðÆúÆ®·Î 1 ÀÌ µÈ´Ù. ¿ÏÀüÇÑ Ã³¸®ÀÇ ÀÚ¼¼ÇÑ °ÍÀº ·¹ÆÛ·±½º ·¡½ºÅͶóÀÌÀú¿¡ ÀÇÇØ Á¤ÇØÁø´Ù.
ÇÁ¸®»ùÇøµ ÇÏ´Â µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎ
- »õ·Î¿î »ùÇøµ ½ºÅ×ÀÌÆ® D3DSAMP_DMAPOFFSET (DWORD)°¡ µµÀԵǾú´Ù. ÀÌ ½ºÅ×ÀÌÆ®´Â, ÇÁ¸®»ùÇøµ ÇÑ µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÀ» ¿ÀÇÁ¼Â(offset) (Á¤Á¡ ´ÜÀ§·Î) ÇÑ´Ù.
- »õ·Î¿î ¼±¾ð ¸Þ¼µå D3DDECLMETHOD_LOOKUPPRESAMPLED °¡ µµÀԵǾú´Ù.
- ÀûÀÀÇü Å×¼³·¹À̼ÇÀº ¹«È¿·Î ÇÏ´Â °Í.
- ÅØ½ºÃ³ ÇÊÅÍ ¼³Á¤Àº ¹«½ÃµÈ´Ù. Æ÷ÀÎÆ® »ùÇøµÀ» ÇÑ´Ù. ¹ÓÅØ½ºÃ³ ÇÊÅÍ´Â D3DTEXF_NONE À̶ó°í °¡Á¤µÈ´Ù. ±× ¿ÜÀÇ ÅØ½ºÃ³ ÇÊÅÍ ¸ðµå´Â ¸ðµÎ D3DTEXF_POINT À̶ó°í °¡Á¤µÈ´Ù.
- ÅØ½ºÃ³ ÁÂÇ¥´Â, U = (Index % TextureWidthInPixeles) / (float)(TextureWidthInPixeles) V = (Index / TextureWidthInPixeles) / (float)(TextureHeightInPixeles)¿Í °°ÀÌ °è»êµÈ´Ù. ¿©±â¼, Index ´Â, »ý¼ºµÇ´Â Á¤Á¡ÀÇ ½ÃÄö¼È À妽º¿Í TSS[D3DSAMP_DMAPOFFSET] ÀÇ ÈÀÌ´Ù. ½ÃÄö¼È À妽º´Â, °¢ ±âº»µµÇüÀÇ Ã³À½¿¡ Á¦·Î·Î ¼³Á¤µÇ¾î Á¤Á¡ÀÌ »ý¼ºµÉ ¶§¸¶´Ù Ä¿Áø´Ù.
µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÇÎÀ» Áö¿øÇϱâ À§ÇÑ API ÀÇ º¯°æ »çÇ×À» ´ÙÀ½¿¡ ³ªÅ¸³½´Ù.
- ´ÜÀÏ Ã¤³Î Æ÷¸Ë D3DFMT_L16 °¡ Ãß°¡µÇ¾ú´Ù.
- »õ·Î¿î ÀÌ¿ë¹ýÇ÷¡±× D3DUSAGE_DMAP °¡ Ãß°¡µÇ¾ú´Ù.
- µð½ºÇ÷¹À̽º¸ÕÆ® ¸ÊÅØ½ºÃ³¸¦ ¼³Á¤Çϱâ À§ÇÑ Àü¿ëÀÇ ÅØ½ºÃ³ ½ºÅ×ÀÌÁö D3DDMAPSAMPLER °¡ Ãß°¡µÇ¾ú´Ù.
- »õ·Î¿î Çϵå¿þ¾î ´É·Â D3DDEVCAPS2_DMAPNPATCH ¹× D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH °¡ Ãß°¡µÇ¾ú´Ù. ¡¸D3DDEVCAPS2 ¡¹¸¦ ÂüÁ¶ÇÒ°Í.