DirectX Graphics ÇÁ·Î±×·¡¹Ö °¡ÀÌµå °íµµÀÇ ÁÖÁ¦ Á¤Á¡ ÆÄÀÌÇÁ¶óÀΠƼ¼¿·¹ÀÌ¼Ç   [¸ñÂ÷¿­¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
Å×¼³·¹À̼Ç
 
Microsoft DirectX 9.0

Å×¼³·¹À̼Ç(tessellation)


Å×¼³·¹ÀÌ¼Ç À¯´ÏÆ®

Å×¼³·¹ÀÌ¼Ç À¯´ÏÆ®°¡ °­È­µÇ¾ú´Ù. ´ÙÀ½ ÀÏÀÌ »ý±â°Ô µÇ¾ú´Ù.

Microsoft® DirectX® 8. x ·Î ORDER ·Î ºÒ¸®°í ÀÖ´ø °ÍÀº, ½ÇÁ¦´Â Â÷¼ö¿´´Ù. DirectX 9.0 ¿¡¼­´Â,D3DDEGREETYPE ¸¦ »ç¿ëÇØ Â÷¼ö¸¦ ÁöÁ¤ÇÑ´Ù.

 // This used to be D3DORDERTYPE and D3DORDER* 
 typedef enum _D3DDEGREETYPE 
 { 
 D3DDEGREE_LINEAR = 1, 
 D3DDEGREE_QUADRATIC = 2, 
 D3DDEGREE_CUBIC = 3, 
 D3DDEGREE_QUINTIC = 5, 
 D3DDEGREE_FORCE_DWORD = 0x7fffffff, 
 } D3DDEGREETYPE; 

Â÷¼öÀÇ ÇüÅÂÀÇ º¯°æÀº, ´Ù¸¥ 2 °³ÀÇ ±¸Á¶Ã¼¿¡ ¿µÇâÀ» ÁÖ¾ú´Ù.

typedef struct _D3DRECTPATCH_INFO 
 { 
 UINT StartVertexOffsetWidth; 
 UINT StartVertexOffsetHeight; 
 UINT Width; 
 UINT Height; 
 UINT Stride; 
 D3DBASISTYPE Basis; 
 D3DDEGREETYPE Degree; 
 } D3DRECTPATCH_INFO; 
 typedef struct _D3DTRIPATCH_INFO 
 { 
 UINT StartVertexOffset; 
 UINT NumVertices; 
 D3DBASISTYPE Basis; 
 D3DDEGREETYPE Degree; 
 } D3DTRIPATCH_INFO; 

µå¶óÀ̹ö¿¡¼­´Â, »õ·Î¿î Çì´õ¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ ÇßÀ» ¶§¿¡ ÀÌ º¯°æÀÌ ¿øÀÎÀ¸·Î ¹ß»ýÇÏ´Â compile error¸¦ ¼öÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù. ±â´ÉÀ» º¯°æÇÒ ÇÊ¿ä´Â ¾ø´Ù.

ÀûÀÀÇü Å×¼³·¹À̼Ç

ÀûÀÀÇü Å×¼³·¹À̼ÇÀº, N ÆÐÄ¡, Á÷»ç°¢Çü ÆÐÄ¡, »ï°¢Çü ÆÐÄ¡µîÀÇ °íÂ÷¿ø ¿ø½ÃÀûÀ¸·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù. D3DRS_ENABLEADAPTIVETESSELLATION ¸¦ »ç¿ëÇØ ÀÌ ±â´ÉÀ» À¯È¿ÇÏ°Ô Çϸé, ½ÃÁ¡ °ø°£³»ÀÇ Á¦¾î Á¤Á¡ÀÇ ±íÀÌÀÇ °ª¿¡ ±Ù°ÅÇØ, ÆÐÄ¡°¡ ÀûÀÀÀûÀ¸·Î Å×¼³·¹ÀÌ¼Ç µÈ´Ù.

Á¦¾î Á¤Á¡ (Vi)ÀÇ Z ÁÂÇ¥ (Zi)´Â, 4 °³ÀÇ º¤ÅÍÀÇ ³»ÀûÀ» °è»êÇÏ´Â °Í¿¡ ÀÇÇØ ½ÃÁ¡ °ø°£ (Zieye)¿¡ º¯È¯ µÈ´Ù. ÀÌ Á¦¾î Á¤Á¡ÀÇ Z ÁÂÇ¥¸¦ ±íÀÌÀÇ °ªÀ¸·Î »ç¿ëÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀº, 4 °³ÀÇ ·»´õ¸µ ½ºÅ×ÀÌÆ® (D3DRS_ADAPTIVETESS_X, D3DRS_ADAPTIVETESS_Y, D3DRS_ADAPTIVETESS_Z, D3DRS_ADAPTIVETESS_W)¸¦ »ç¿ëÇØ 4D º¤ÅÍ (Mdm)¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ 4D º¤ÅÍ¿¡´Â, ¿¬°áµÈ ¿ùµå Çà·Ä ¹× ºä Çà·ÄÀÇ Á¦ 3 ¿­µîÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ º¤Å͸¦ »ç¿ëÇØ Zieye ¿¡ ½ºÄÉÀÏÀ» Àû¿ëÇÒ ¼öµµ ÀÖ´Ù.

Zieye ·ÎºÎÅÍ Å×¼³·¹ÀÌ¼Ç ·¹º§ Ti ¸¦ °è»êÇÏ´Â ÇÔ¼ö´Â (MaxTessellationLevel / Zieye)À̶ó°í °¡Á¤ÇÑ´Ù. À̰ÍÀº, ½ÃÁ¡ °ø°£ÀÇ Z = 1 ¿¡¼­´Â MaxTessellationLevel ¿Í Å×¼³·¹ÀÌ¼Ç ·¹º§ÀÌ µ¿ÀÏÇÑ ÀÏÀ» ÀǹÌÇÑ´Ù. N ÆÐÄ¡ÀÇ °æ¿ì, MaxTessellationLevel ´Â,IDirect3DDevice9::SetNPatchMode ¿¡ ÀÇÇØ ¼³Á¤µÈ °ª¿¡ µ¿ÀÏÇÏ´Ù. RT ÆÐÄ¡ÀÇ °æ¿ì´Â, pNumSegs ¿¡ µ¿ÀÏÇÏ´Ù. ÀÌ Å×¼³·¹ÀÌ¼Ç ·¹º§Àº, ÃÖ´ë ¹× ÃÖ¼ÒÀÇ Å×¼³·¹ÀÌ¼Ç ·¹º§À» Á¤ÀÇÇÏ´Â D3DRS_MINTESSELLATIONLEVEL ¹× D3DRS_MAXTESSELLATIONLEVEL ¿¡ ÀÇÇØ Á¤ÀÇµÈ °ª¿¡ Ŭ·¥ÇÁ µÈ´Ù. ÆÐÄ¡ÀÇ ¿§Áö¿¡ µû¸¥ °¢ Á¤Á¡ÀÇ Ti ÀÇ Æò±ÕÀÌ ±× ¿§ÁöÀÇ Å×¼³·¹ÀÌ¼Ç ·¹º§ÀÌ µÈ´Ù. Á÷»ç°¢Çü ÆÐÄ¡, »ï°¢Çü ÆÐÄ¡, ¹× N ÆÐÄ¡ÀÇ Ti ¸¦ °è»êÇÏ´Â ¾Ë°í¸®ÁòÀº, Å×¼³·¹ÀÌ¼Ç ·¹º§ÀÇ °è»ê¿¡ »ç¿ëÇÏ´Â Á¦¾î Á¤Á¡ÀÌ ´Ù¸£´Ù.

B ½ºÇöóÀÎ ±âº» ŸÀÔÀÇ Á÷»ç°¢Çü ÆÐÄ¡ÀÇ °æ¿ì´Â, °¡Àå ¿ÜÃøÀÇ 4 °³ÀÇ Á¦¾î Á¤Á¡À» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, D3DORDER_CUBIC ¿À´õŸÀÓÀÇ °æ¿ì, pNumSegs[0] ¿¡´Â Á¤Á¡ (1,1) ¹× (1, width-2)À» »ç¿ëÇØ, pNumSegs[1] ¿¡´Â Á¤Á¡ (1, width-2) ¹× (height-2, height-2)À» »ç¿ëÇÑ´Ù. ¶Ç, pNumSegs[2] ¿¡´Â Á¤Á¡ (height-2, width-2) ¹× (1, width-2)À» »ç¿ëÇØ, pNumSegs[3] ¿¡´Â Á¤Á¡ (2,1) ¹× (1,1)À» »ç¿ëÇÑ´Ù.

»ï°¢Çü ÆÐÄ¡ÀÇ °æ¿ì´Â, ¸ðÅüÀÌÀÇ ÆÐÄ¡ Á¤Á¡À» »ç¿ëÇÑ´Ù. D3DORDER_CUBIC ¿À´õŸÀÓÀÇ °æ¿ì, pNumSegs[0] ¿¡´Â Á¤Á¡ (0) ¹× (9)À» »ç¿ëÇØ, pNumSegs[1] ¿¡´Â Á¤Á¡ (9) ¹× (6)À» »ç¿ëÇØ, pNumSegs[3] ¿¡´Â Á¤Á¡ (6) ¹× (0)À» »ç¿ëÇÑ´Ù.

N ÆÐÄ¡ÀÇ °æ¿ì´Â »ï°¢Çü Á¤Á¡À» »ç¿ëÇÑ´Ù.

º£Áö¾î(Bezier) ±âº» ŸÀÔÀÇ Á÷»ç°¢Çü ÆÐÄ¡ ¹× »ï°¢Çü ÆÐÄ¡ÀÇ °æ¿ì´Â, ¸ðÅüÀÌÀÇ Á¦¾î Á¤Á¡À» »ç¿ëÇÑ´Ù.

Á¤Á¡¸¶´Ù Å×¼³·¹ÀÌ¼Ç ·¹ÀÌÆ® Á¦¾î. ¾ÖÇø®ÄÉÀ̼ÇÀº, Çʿ信 µû¶ó¼­, Á¤Á¡ ¸¶´Ù ´ÜÀÏÀÇ Á¤ÀÇ ºÎµ¿ ¼Ò¼öÁ¡°ªÀ» Á¦°øÇØ, Å×¼³·¹ÀÌ¼Ç ·¹ÀÌÆ®ÀÇ Á¦¾î¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ÁöÁ¤¿¡´Â D3DDECLUSAGE_TESSFACTOR ¸¦ »ç¿ëÇÑ´Ù. ´Ù¸¸, »ç¿ë¹ýÀÇ À妽º´Â 0, ÀԷ ŸÀÔÀº D3DDECLTYPE_FLOAT1 °¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. ÀÌ °ªÀÌ Á¤Á¡¸¶´Ù Å×¼³·¹ÀÌ¼Ç ·¹º§¿¡ Àû»êµÈ´Ù.

»ê¼ú °è»ê

¿§Áö e ÀÇ Å×¼³·¹ÀÌ¼Ç ·¹º§ (Te)Àº 2 °³ÀÇ Á¦¾î Á¤Á¡ (Ve1 ¹× Ve2)¿¡ ÀÇÇØ ³ªÅ¸³»Á® ±× °è»êÀº ´ÙÀ½°ú °°ÀÌ ÇàÇØÁø´Ù.

Vertex Vi: (Xi, Yi, Zi, TFactori (optional)).  
Ze1eye = Ve1 .  Mdm 
Ze2eye = Ve2 .  Mdm 
Te1 = MaxTessellationLevel * TFactore1 / Ze1eye 
Te2 = MaxTessellationLevel * TFactore2 / Ze2eye 
Te = ( Te1 + Te2 ) / 2; 
if Te > D3DRS_MAXTESSELLATIONLEVEL || Te < 0, then Te = D3DRS_MAXTESSELLATIONLEVEL 
if Te < D3DRS_MINTESSELLATIONLEVEL, then Te = D3DRS_MINTESSELLATIONLEVEL 

D3DRS_ENABLEADAPTIVETESSELLATION °¡ TRUE ¶§, »ï°¢Çü ±âº»µµÇü (»ï°¢Çü ¸®½ºÆ®, ÆÒ, ½ºÆ®¶óÀÌÇÁ)´Â N ÆÐÄ¡·Î¼­ µå·ÎÀ×(Drawing) µÈ´Ù. IDirect3DDevice9::SetNPatchMode ¿¡ ÀÇÇØ 1.0 º¸´Ù ÀÛÀº °ªÀ¸·Î ¼³Á¤µÇ¾î ÀÖ´Ù.

API ÀÇ º¯°æ

»õ·Î¿î ·»´õ¸µ ½ºÅ×ÀÌÆ®:

 D3DRS_ENABLEADAPTIVETESSELLATION // BOOL
 D3DRS_MAXTESSELLATIONLEVEL       // Float
 D3DRS_MINTESSELLATIONLEVEL       // Float
 D3DRS_ADAPTIVETESS_X             // Float
 D3DRS_ADAPTIVETESS_Y             // Float
 D3DRS_ADAPTIVETESS_Z             // Float 
 D3DRS_ADAPTIVETESS_W             // Float 
 
 // D3DRS_MINTESSELLATIONLEVEL and D3DRS_MAXTESSELLATIONLEVEL 
 // cannot be less than 1 

ÀÌ·¯ÇÑ µðÆúÆ®°ª:

D3DRS_MAXTESSELLATIONLEVEL = 1.0f 
D3DRS_MINTESSELLATIONLEVEL = 1.0f 
D3DRS_ADAPTIVETESS_X = 0.0f 
D3DRS_ADAPTIVETESS_Y = 0.0f 
D3DRS_ADAPTIVETESS_Z = 1.0f 
D3DRS_ADAPTIVETESS_W = 0.0f 
D3DRS_ENABLEADAPTIVETESSELLATION = FALSE 

»õ·Î¿î Çϵå¿þ¾î ´É·Â:

D3DDEVCAPS2_ADAPTIVETESSRTPATCH // Can adaptively tessellate RT-patches 
D3DDEVCAPS2_ADAPTIVETESSNPATCH  // Can adaptively tessellate N-patches 


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