DirectX Graphics ·¹ÆÛ·±½º ¼ÎÀÌ´õ ·¹ÆÛ·±½º »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î [¸ñÂ÷¿¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
|
| Microsoft DirectX 9.0 |
¼ÎÀÌ´õ¸¦ ¾î¼Àºí¸® ¾ð¾î·Î ±â¼úÇÏ´Â °ÍÀÌ Å« ÀÏÀÎ ¶§´Â, »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î (HLSL: High Level Shader Language)¸¦ »ç¿ëÇØ º¸¸é ÁÁ´Ù. Microsoft® DirectX® 9.0 ¿¡´Â »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾îÀÇ ÃÖÃÊÀÇ ¸±¸®½º°¡ Æ÷ÇԵǾî ÀÖ¾î C ¸¦ ´àÀº °í±Þ¾ð¾î·Î ¼ÎÀÌ´õ¸¦ °³¹ß ¹× µð¹ö±× ÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº, DirectX 8.0 À¸·ÎºÎÅÍ Àåºñ µÈ Á¤Á¡ ¼ÎÀÌ´õ, Çȼ¿ ¼ÎÀÌ´õ, ÀÌÆåÆ®ÀÇ »ý¼º¿¡ »ç¿ëÇÏ´Â ¼ÎÀÌ´õÀÇ ¾î¼Àºí¸® ¾ð¾îÀÇ ¼ÎÀÌ´õ ±â´É°ú´Â ´Ù¸¥ Ãß°¡ ±â´ÉÀÌ´Ù.
»óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î¿¡¼´Â, C ¸¦ ´àÀº ÇÔ¼ö·ÎºÎÅÍÀÇ ¼ÎÀÌ´õ °³¹ßÀ» Áö¿ø Çϰí ÀÖ´Ù. ÀÌ ¾ð¾î´Â, ÇÔ¼ö, ½Ä, ¹®Àå, Ç¥ÁØ µ¥ÀÌÅÍÇü, »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍÇü, ÇÁ¸®ÇÁ·Î¼¼¼ Áö½Ã¹® µî, ¸¹Àº Ç¥ÁØÀûÀÎ ¾ð¾î ±â´ÉÀ» ÇâÈÄ Áö¿ø ÇÑ´Ù.
| bool | TRUE ¶Ç´Â FALSE |
| int | 32 ºñÆ® ºÎÈ£ ÷ºÎ Á¤¼ö |
| half | 16 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª |
| float | 32 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª |
| double | 64 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª |
¸ðµç Ÿ°Ù Ç÷§ÆûÀÌ Á¤¼ö°ªÀ» ³×ÀÌÆ¼ºê·Î Áö¿ø Çϰí ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Á¤¼ö°ªÀº, ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)¿ë Çϵå¿þ¾î¸¦ »ç¿ëÇØ ¿¡¹Ä·¹ÀÌÆ® ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ´Ù. ÀÌ·¯ÇÑ Ç÷§Æû»ó¿¡¼, Á¤¼öÀÇ ¹üÀ§¸¦ ³Ñ¾î ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)·Î¼ ³ªÅ¸³»Áú °¡´É¼ºÀÌ ÀÖ´Â Á¤¼ö ¿¬»êÀº, ¿¹Ãø´ë·Î µ¿ÀÛ ÇÏ¸é ¸»ÇÏ´Â º¸ÁõÀº ¾ø´Ù.
¸ðµç Ÿ°Ù Ç÷§ÆûÀÌ half °ª ¶Ç´Â double °ªÀ» ³×ÀÌÆ¼ºê·Î Áö¿ø Çϰí ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Ÿ°Ù Ç÷§ÆûÀÌ Áö¿ø Çϰí ÀÖÁö ¾Ê´Â °æ¿ì, ÀÌ·¯ÇÑ °ªÀº ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö) (float)¸¦ »ç¿ëÇØ ¿¡¹Ä·¹ÀÌÆ® µÈ´Ù. ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)½ÄÀÇ Áß°£ °á°ú´Â, ¿ÀÆÛ·£µå³ª °á°úº¸´Ù °íÁ¤¹Ðµµ·Î Æò°¡µÈ´Ù.
| vector | 4D ÀÇ º¤ÅÍ. °¢ ¼ººÐÀº, float Çü. |
| vector < type, size > | ³ÐÀ̰¡ size ÀÇ º¤ÅÍ. °¢ ¼ººÐÀÇ type ´Â ½ºÄ®¶ó-ÇüÅÂ. |
º¤ÅÍÀÇ °¢ ¼ººÐ¿¡´Â, ¹è¿ ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, À妽º¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½¿¡ ¿¹¸¦ ³ªÅ¸³½´Ù.
vec[0] (vec.x ¿Í °°´Ù) vec[3] (vec.w ¿Í °°´Ù)
º¤ÅÍÀÇ °¢ ¼ººÐ¿¡´Â, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, À̸§¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. º¤ÅÍ¿¡ ´ëÇØ¼ ´ÙÀ½ÀÇ ¼ººÐ¸í¼¼Æ®°¡ Á¤Àǵǰí ÀÖ´Ù.
Default set x y z w
Color set r g b a
º¤ÅÍÀÇ ±³Ã¼ ¼ººÐÀ» Æ÷ÇÔÇÑ º¤ÅÍ´Â, º¹¼öÀÇ ¼ººÐ¸íÀ» ¿¬°áÇÏ´Â °ÍÀ¸·Î Çü¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, yyzw ³ª bgr µîÀÌ´Ù. ¿¬°áÇÏ´Â À̸§Àº ¸ðµÎ, °°Àº À̸§ ¼¼Æ®ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â °Í. °°Àº ¼ººÐÀº ¿©·¯ Â÷·Ê ¹Ýº¹ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ±× °æ¿ì, ±³Ã¼´Â ÇÒ´çÀÇ Å¸°ÙÀ¸·Î¼´Â ¹«È¿ÀÌ´Ù.
| matrix | 4 Çà 4 ¿ÀÇ Çà·Ä. °¢ ¼ººÐÀº float Çü. |
| matrix < type, rows, columns > | rows Çà columns ¿ÀÇ Çà·Ä. °¢ ¼ººÐÀÇ type ´Â ½ºÄ®¶ó-ÇüÅÂ. |
Çà·ÄÀÇ °¢ ¿¿¡´Â, ¹è¿ ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, À妽º¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½¿¡ ¿¹¸¦ ³ªÅ¸³½´Ù.
mat[2] (mat.m20m21m22m23 ¿Í °°´Ù) mat[2]. w (as mat.m23 ¿Í °°´Ù) mat[2][3] (as mat.m23 ¿Í °°´Ù)
Çà·ÄÀÇ °¢°¢ÀÇ ¼ººÐ¿¡´Â, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, À̸§¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù. Çà·Ä¿¡ ´ëÇØ¼ ´ÙÀ½ÀÇ ¼ººÐ¸í¼¼Æ®°¡ Á¤Àǵǰí ÀÖ´Ù.
1 À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ¼¼Æ®
_11 _12 _13 _14 _21 _22 _23 _24 _31 _32 _33 _34 _41 _42 _43 _44
0 À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ¼¼Æ®
_m00 _m01 _m02 _m03 _m10 _m11 _m12 _m13 _m20 _m21 _m22 _m23 _m30 _m31 _m32 _m33
Çà·ÄÀÇ °¢ ¼ººÐÀ» °¡Áö´Â º¤ÅÍ´Â, º¹¼öÀÇ ¼ººÐ¸íÀ» ¿¬°áÇÏ¸é »ý¼º ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î,_41_42_43 ³ª _m01_m02_m03_m04 ÀÌ´Ù. ¿¬°áÇÏ´Â À̸§Àº ¸ðµÎ, °°Àº À̸§ ¼¼Æ®ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â °Í. °°Àº ¼ººÐÀº ¿©·¯ Â÷·Ê ¹Ýº¹ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ±× °æ¿ì, ±³Ã¼´Â ÇÒ´çÀÇ Å¸°ÙÀ¸·Î¼´Â ¹«È¿ÀÌ´Ù.
ASCII ij¸¯ÅÍ ¶óÀÎÇü. ij¸¯ÅÍ ¶óÀÎÀ» ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀ̳ª ½ºÅ×ÀÌÆ®´Â ¾ø´Ù. ´Ù¸¸, ij¸¯ÅÍ ¶óÀÎ Àμö¿Í ÄÚ¸àÆ®´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍ ID3DXEffect ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.
Çȼ¿ ¼ÎÀÌ´õ (pixelshader) °³Ã¼´Â, Microsoft Direct3D® Çȼ¿ ¼ÎÀÌ´õ °³Ã¼¸¦ ³ªÅ¸³½´Ù. ¼ÎÀÌ´õ ÇÔ¼ö³»ÀÇ ¿¬»êÀ¸·Î, Çȼ¿ ¼ÎÀÌ´õ¸¦ Á÷Á¢ ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀº ¾øÁö¸¸, Å×Å©´Ð³»·ÎºÎÅÍ Çȼ¿ ¼ÎÀÌ´õ¿¡ ÀåÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¼Ó¼ºÀº, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, Çȼ¿ ¼ÎÀÌ´õ °³Ã¼·ÎºÎÅÍ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.
const string version;
¸®ÅÍ·² Çȼ¿ ¼ÎÀÌ´õ°ªÀº, ¾î¼Àºí¸® ºí·ÏÀ¸·Î¼ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
pixelshader ps = asm { ps. 2.0 mov oC0, c0 }; ¶Ç´Â, ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ È£Ãâ·Î¼ÀÇ Ç¥Çöµµ °¡´ÉÇÏ´Ù.
pixelshader ps = compile ps_2_0 psmain();
»ùÇ÷¯ (sampler) °³Ã¼´Â, Direct3D »ùÇ÷¯ ½ºÅ×ÀÌÁö¸¦ ³ªÅ¸³½´Ù. »ùÇ÷¯ ½ºÅ×ÀÌÁö¸¦ »ç¿ëÇØ, ÅØ½ºÃ³¸¦ »ùÇøµ ÇÑ´Ù. »ùÇ÷¯¿¡´Â, ÅØ½ºÃ³ ŸÀÔ ¹× ÇÊÅ͸µ ŸÀÔÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù.
sampler s = sampler_state { texture = NULL; mipfilter = LINEAR; };
ÅØ½ºÃ³ (texture) °³Ã¼´Â, Direct3D ÅØ½ºÃ³ °³Ã¼¸¦ ³ªÅ¸³½´Ù. ¼ÎÀÌ´õ ÇÔ¼ö³»ÀÇ ¿¬»êÀ¸·Î, ÅØ½ºÃ³¸¦ Á÷Á¢ ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀº ¾øÁö¸¸, Å×Å©´Ð³»·ÎºÎÅÍ ÅØ½ºÃ³¿¡ ÀåÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¼Ó¼ºÀº, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, ÅØ½ºÃ³ °³Ã¼·ÎºÎÅÍ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.
const string type; const string format; const int width; const int height; const int depth;
Á¤Á¡ ¼ÎÀÌ´õ (vertexshader) °³Ã¼´Â, Direct3D Á¤Á¡ ¼ÎÀÌ´õ °³Ã¼¸¦ ³ªÅ¸³½´Ù. ¼ÎÀÌ´õ ÇÔ¼ö³»ÀÇ ¿¬»êÀ¸·Î, Á¤Á¡ ¼ÎÀÌ´õ¸¦ Á÷Á¢ ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀº ¾øÁö¸¸, Å×Å©´Ð³»·ÎºÎÅÍ Á¤Á¡ ¼ÎÀÌ´õ¿¡ ÀåÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¼Ó¼ºÀº, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, Á¤Á¡ ¼ÎÀÌ´õ °³Ã¼·ÎºÎÅÍ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.
const string version;
¸®ÅÍ·² Á¤Á¡ ¼ÎÀÌ´õ°ªÀº, ¾î¼Àºí¸® ºí·ÏÀ¸·Î¼ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.
vertexshader vs = asm { vs. 2.0 mov oPos, c0 }; ¶Ç´Â, ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ È£Ãâ·Î¼ÀÇ Ç¥Çöµµ °¡´ÉÇÏ´Ù.
vertexshader vs = compile vs_2_0 psmain();
°³Ã¼ÀÇ ¼Ó¼ºÀÇ ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º´Â ¾ÆÁ÷ 󸮵ÇÁö ¾Ê´Ù.
±¸Á¶ üÇüÀ» Á¤ÀÇÇÏ·Á¸é , Ű¿öµå struct ¸¦ »ç¿ëÇÑ´Ù. Á¤ÀÇÇÑ ±¸Á¶Ã¼´Â, ±× ½Äº°ÀÚ (ID)¸¦ »ç¿ëÇØ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
struct [id] { member_list }
member_list ´Â 1 °³ ÀÌ»óÀÇ ¸â¹ö ¼±¾ðÀ¸·ÎºÎÅÍ ¿Ï¼ºµÈ´Ù. ¸â¹ö ¼±¾ðÀº, º¯¼ö ¼±¾ð (¾Æ·¡¿Í °°ÀÌ)°ú À¯»çÇÏ´Ù. ´Ù¸¸, Ãʱ⼳Á¤ÀÚ¸¦ ÁöÁ¤ÇÏÁö ¸øÇϰí, static, extern, volatile, const ¸¦ °³º°ÀûÀ¸·Î ¼±¾ðÇÒ ¼ö ¾ø´Ù.
ÇüÀÇ À̸§À» ¼±¾ðÇÏ·Á¸é , Ű¿öµå typedef ¸¦ »ç¿ëÇÑ´Ù. ÇüŰ¡ Á¤¼öÀÎ °ÍÀ» ¸í½ÃÇÏ·Á¸é , Ű¿öµå const ¸¦ »ç¿ëÇÑ´Ù. °¢ ID (¶Ç´Â "id")ÀÇ µÚ¿¡ ¹è¿ÀÇ Á¢¹Ì¾î¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¼±¾ðÇÑ ÇüÅ´Â, ±× ID ¸¦ »ç¿ëÇØ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
typedef [const] type id [array_suffix] [, id ...] ;
array_suffix ´Â ³ÐÀ̸¦ ³ªÅ¸³»´Â 1 °³ ÀÌ»óÀÇ [ literal_integer_expression ] ·ÎºÎÅÍ ¿Ï¼ºµÈ´Ù.
Direct3D extension (D3DX) 8.0 ÀÌÆåÆ®¿ÍÀÇ È£È¯¼ºÀ» À¯ÁöÇϱâ À§Çؼ(¶§¹®¿¡), ´ÙÀ½ÀÇ ÇüÅ´ ÀÚµ¿ÀûÀ¸·Î, ½´ÆÛ ±Û·Î¹ú ½ºÄÚÇÁ·Î ´ë¹®ÀÚ ¼Ò¹®ÀÚ°¡ ±¸º°µÇÁö ¾Ê´Â ÇüÅ·ΠÁ¤ÀǵȴÙ.
typedef int DWORD; typedef float FLOAT; typedef vectorVECTOR; typedef matrix MATRIX; typedef string STRING; typedef texture TEXTURE; typedef pixelshader PIXELSHADER; typedef vertexshader VERTEXSHADER;
ÆíÀÇ»ó, ´ÙÀ½ÀÇ ÇüÅ´ ÀÚµ¿ÀûÀ¸·Î ½´ÆÛ ±Û·Î¹ú ½ºÄÚÇÁ·Î Á¤ÀǵȴÙ(ÀÌ·¯ÇÑ Á¤ÀÇ¿¡¼´Â, »þÇÁ ±âÈ£´Â 1 ~ 4 ÀÇ ¼ýÀÚ¸¦ ³ªÅ¸³½´Ù).
typedef vectorbool#; typedef vector int#; typedef vector half#; typedef vector float#; typedef vector double#; typedef matrix bool#x#; typedef matrix int#x#; typedef matrix half#x#; typedef matrix float#x#; typedef matrix double#x#;
| ½ºÄ®¶ó-·ÎºÎÅÍ ½ºÄ®¶ó- | Ç×»ó À¯È¿. ºÒÇüÀ¸·ÎºÎÅÍ Á¤¼öÇü ¶Ç´Â ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)Çü¿¡ ij½ºÆ® ÇÏ´Â °æ¿ì, FALSE ´Â 0 À¸·Î º¸¿©Á® TRUE ´Â 1 À¸·Î º¸¿©Áø´Ù. Á¤¼öÇü ¶Ç´Â ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÇüÀ¸·ÎºÎÅÍ ºÒÇü¿¡ ij½ºÆ® ÇÏ´Â °æ¿ì, °ª 0 Àº FALSE ¶ó°í º¸¿©Á® 0 ÀÌ¿ÜÀÇ °ªÀº TRUE ¶ó°í º¸¿©Áø´Ù. ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÇüÀ¸·ÎºÎÅÍ Á¤¼öÇü¿¡ ij½ºÆ® ÇÏ´Â °æ¿ì, °ªÀº 0 À» ÇâÇØ ¸» ¼ö ÀÖ´Ù. |
| ½ºÄ®¶ó-·ÎºÎÅÍ º¤ÅÍ | Ç×»ó À¯È¿. ÀÌ Ä³½ºÆ®´Â, ½ºÄ®¶ó-¸¦ º¹Á¦ÇØ º¤ÅÍ·Î ¼³Á¤ ÇÏ¸é ¸»ÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù. |
| ½ºÄ®¶ó-·ÎºÎÅÍ Çà·Ä | Ç×»ó À¯È¿. ÀÌ Ä³½ºÆ®´Â, ½ºÄ®¶ó-¸¦ º¹Á¦ÇØ Çà·Ä·Î ¼³Á¤ ÇÏ¸é ¸»ÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù. |
| ½ºÄ®¶ó-·ÎºÎÅÍ °³Ã¼ | Ç×»ó ¹«È¿. |
| ½ºÄ®¶ó-·ÎºÎÅÍ ±¸Á¶Ã¼ | ±¸Á¶Ã¼ÀÇ ¸ðµç ¿ä¼Ò°¡ ¼öÄ¡ÀÇ °æ¿ì¿¡ ÇÑÁ¤ÇØ, À¯È¿. ÀÌ Ä³½ºÆ®´Â, ½ºÄ®¶ó-¸¦ º¹Á¦ÇØ ±¸Á¶Ã¼·Î ¼³Á¤ ÇÏ¸é ¸»ÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù. |
| º¤ÅͷκÎÅÍ ½ºÄ®¶ó- | Ç×»ó À¯È¿. ÀÌ Ä³½ºÆ®´Â, º¤ÅÍÀÇ ÃÖÃÊÀÇ ¼ººÐÀ» ¼±ÅÃÇÑ´Ù. |
| º¤ÅͷκÎÅÍ º¤ÅÍ | Ãâ·Â º¤ÅÍ´Â, ÀÔ·Â º¤Åͺ¸´Ù Ä¿ÁöÁö ¾Ê´Â °Í. ÀÌ Ä³½ºÆ®´Â, ÃÖÁ´ÜÀÇ °ªÀ» ³²°Ü, ³ª¸ÓÁö¸¦ Àß¶ó ¹ö¸°´Ù°í ÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù. ÀÌ Ä³½ºÆ®¿¡¼´Â, ¿Çà·Ä, Çà Çà·Ä, ¼öÄ¡ÀÇ ±¸Á¶Ã¼´Â º¤Åͷμ 󸮵ȴÙ. |
| º¤ÅͷκÎÅÍ Çà·Ä | º¤ÅÍÀÇ »çÀÌÁî´Â, Çà·ÄÀÇ »çÀÌÁî¿Í µ¿ÀÏÇØ¾ß ÇÑ´Ù. |
| º¤ÅͷκÎÅÍ °³Ã¼ | Ç×»ó ¹«È¿. |
| º¤ÅͷκÎÅÍ ±¸Á¶Ã¼ | ±¸Á¶Ã¼°¡ º¤Åͺ¸´Ù Å©Áö ¾Ê°í, ±¸Á¶Ã¼ÀÇ ¸ðµç ¼ººÐÀÌ ¼öÄ¡ÀÎ ÇÑ, À¯È¿. |
| Çà·Ä·ÎºÎÅÍ ½ºÄ®¶ó- | Ç×»ó À¯È¿. ÀÌ Ä³½ºÆ®´Â, Çà·ÄÀÇ ÁÂ»ó¿¡ ÀÖ´Â ¼ººÐÀ» ¼±ÅÃÇÑ´Ù. |
| Çà·Ä·ÎºÎÅÍ º¤ÅÍ | Çà·ÄÀÇ »çÀÌÁî´Â, º¤ÅÍÀÇ »çÀÌÁî¿Í µ¿ÀÏÇØ¾ß ÇÑ´Ù. |
| Çà·Ä·ÎºÎÅÍ Çà·Ä | Ãâ·Â Çà·ÄÀº, ¾î´À ÂÊÀÇ ³ÐÀÌ¿¡¼µµ ÀÔ·Â Çà·Äº¸´Ù Ä¿ÁöÁö ¾Ê´Â °Í. ÀÌ Ä³½ºÆ®´Â, Á»óÀÇ °ªÀ» ³²°Ü, ³ª¸ÓÁö¸¦ Àß¶ó ¹ö¸°´Ù°í ÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù. |
| Çà·Ä·ÎºÎÅÍ °³Ã¼ | Ç×»ó ¹«È¿. |
| Çà·Ä·ÎºÎÅÍ ±¸Á¶Ã¼ | ±¸Á¶Ã¼ÀÇ »çÀÌÁî´Â Çà·ÄÀÇ »çÀÌÁî¿Í µ¿ÀÏÇϰí, ±¸Á¶Ã¼ÀÇ ¸ðµç ¼ººÐÀÌ ¼öÄ¡°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. |
| °³Ã¼·ÎºÎÅÍ ½ºÄ®¶ó- | Ç×»ó ¹«È¿. |
| °³Ã¼·ÎºÎÅÍ º¤ÅÍ | Ç×»ó ¹«È¿. |
| °³Ã¼·ÎºÎÅÍ Çà·Ä | Ç×»ó ¹«È¿. |
| °³Ã¼·ÎºÎÅÍ °³Ã¼ | °³Ã¼ÇüÀÌ ÀÏÄ¡ÇÏ´Â °æ¿ì¿¡ ÇÑÁ¤ÇØ, À¯È¿. |
| °³Ã¼·ÎºÎÅÍ ±¸Á¶Ã¼ | ±¸Á¶Ã¼¿¡´Â, 2 °³ ÀÌ»óÀÇ ¸â¹ö°¡ ÀúÀå µÇ°í À־ ¾È µÈ´Ù. ±× ¸â¹öÀÇ ÇüÅ´Â, °³Ã¼ÀÇ ÇüÅÂ¿Í ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. |
| ±¸Á¶Ã¼·ÎºÎÅÍ ½ºÄ®¶ó- | ±¸Á¶Ã¼¿¡´Â, Àû¾îµµ 1 °³ÀÇ ¸â¹ö°¡ ÀúÀå µÇ°í ÀÖÀ» Çʿ䰡 ÀÖ´Ù. ÀÌ ¸â¹ö´Â, ¼öÄ¡°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. |
| ±¸Á¶Ã¼·ÎºÎÅÍ º¤ÅÍ | ±¸Á¶Ã¼´Â, Àû¾îµµ º¤ÅÍÀÇ »çÀÌÁî°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. ÃÖÃÊÀÇ ¼ººÐÀº ¼öÄ¡·Î, ÃÖ´ë·Î º¤ÅÍÀÇ »çÀÌÁî±îÁö°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. |
| ±¸Á¶Ã¼·ÎºÎÅÍ Çà·Ä | ±¸Á¶Ã¼´Â, Àû¾îµµ Çà·ÄÀÇ »çÀÌÁî°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. ÃÖÃÊÀÇ ¼ººÐÀº ¼öÄ¡·Î, ÃÖ´ë·Î Çà·ÄÀÇ »çÀÌÁî±îÁö°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. |
| ±¸Á¶Ã¼·ÎºÎÅÍ °³Ã¼ | ±¸Á¶Ã¼¿¡´Â, Àû¾îµµ 1 °³ÀÇ ¸â¹ö°¡ ÀúÀå µÇ°í ÀÖÀ» Çʿ䰡 ÀÖ´Ù. ÀÌ ¸â¹öÀÇ ÇüÅ´Â, °³Ã¼ÀÇ ÇüÅÂ¿Í ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. |
| ±¸Á¶Ã¼·ÎºÎÅÍ ±¸Á¶Ã¼ | Ãâ·Â ±¸Á¶Ã¼´Â, ÀÔ·Â ±¸Á¶Ã¼º¸´Ù Ä¿ÁöÁö ¾Ê´Â °Í. °¢°¢ÀÇ ¸ðµç ÀÔ·Â ¼ººÐ°ú Ãâ·Â ¼ººÐÀÇ »çÀÌ·Î, À¯È¿ÇÑ Ä³½ºÆ®°¡ Á¸ÀçÇØ¾ß ÇÑ´Ù. |
º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
[static uniform extern shared volatile] [const] type id [array_suffix] [: semantic] [= initializers] [annotations] [, id ...] ;
º¯¼ö ¼±¾ð¿¡¼´Â, Ű¿öµå static ¸¦ Á¢µÎ¾î¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±Û·Î¹ú º¯¼ö¿¡¼´Â, À̰ÍÀº º¯¼ö¸¦ ¼ÎÀÌ´õ ³»ºÎ¸¸À¸·Î »ç¿ëÇØ, ¿ÜºÎ¿¡ °ø°³ÇÏÁö ¾Ê´Â °ÍÀ» ³ªÅ¸³½´Ù. ·ÎÄà º¯¼ö¿¡¼´Â, À̰ÍÀº º¯¼öÀÇ °ªÀÌ È£ÃâÇÒ °Í¿¡ ¹«È¿°¡ µÇÁö ¾Ê´Â °ÍÀ» ³ªÅ¸³½´Ù. static ÀÇ ·ÎÄà º¯¼ö´Â, 1 ȸ¸¸ ÃʱâȵȴÙ. ¸í½ÃÀûÀ¸·Î ÃʱâÈÇÏÁö ¾Ê´Â °æ¿ì, ÃʱⰪÀº 0 À¸·Î º¸¿©Áø´Ù.
±Û·Î¹ú º¯¼öÀÇ ¼±¾ð¿¡¼´Â, Ű¿öµå uniform ¸¦ Á¢µÎ¾î¿¡ »ç¿ëÇØ, ±× º¯¼ö°¡ ¼ÎÀÌ´õ¿¡ÀÇ ÇѰᰰÀº ÀÔ·ÂÀÎ °ÍÀ» ¸í½ÃÇÒ ¼ö ÀÖ´Ù. µðÆúÆ®¿¡¼´Â, static °¡ ¾Æ´Ñ ±Û·Î¹ú º¯¼ö´Â uniform ÀÌ´Ù.
±Û·Î¹ú º¯¼öÀÇ ¼±¾ð¿¡¼´Â, Ű¿öµå extern ¸¦ Á¢µÎ¾î¿¡ »ç¿ëÇØ, ±× º¯¼ö°¡ ¼ÎÀÌ´õ¿¡ÀÇ ¿ÜºÎ ÀÔ·ÂÀÎ °ÍÀ» ¸í½ÃÇÒ ¼ö ÀÖ´Ù. µðÆúÆ®¿¡¼´Â, static °¡ ¾Æ´Ñ ±Û·Î¹ú º¯¼ö´Â extern ÀÌ´Ù.
±Û·Î¹ú º¯¼öÀÇ ¼±¾ð¿¡¼´Â, Ű¿öµå shared ¸¦ Á¢µÎ¾î¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº, ÀÌ ÆÄ¶ó¹ÌÅÍÀÇ °ªÀÇ ¸ñÀûÀº, ÀÌÆåÆ® °³Ã¼°£¿¡ °øÀ¯ÇÏ´Â °ÍÀ̶ó°í ÇÏ´Â, ÀÌÆåÆ® ÇÁ·¹ÀÓ¿öÅ©(framework)¿¡ ´ëÇÑ ÈùÆ®ÀÌ´Ù.
±Û·Î¹ú º¯¼öÀÇ ¼±¾ð¿¡¼´Â, Ű¿öµå volatile ¸¦ Á¢µÎ¾î¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº, ÀÌ ÆÄ¶ó¹ÌÅÍÀÇ °ªÀÌ ºó¹øÇÏ°Ô ¹Ù²ï´Ù°í ÇÏ´Â, ÀÌÆåÆ® ÇÁ·¹ÀÓ¿öÅ©(framework)¿¡ ´ëÇÑ ÈùÆ®ÀÌ´Ù.
initializers ´Â ½Ä ¶Ç´Â {½Ä [, ½Ä [, ...]]} ÀÌ´Ù. extern ÀÇ ±Û·Î¹ú º¯¼ö¿¡¼´Â, ÀÌ·¯ÇÑ ½ÄÀº ¸®ÅÍ·²ÀÌ´Ù. ´Ù¸¥ ±Û·Î¹ú º¯¼ö ¹× static ÀÇ ·ÎÄà º¯¼ö¿¡¼´Â, ÀÌ·¯ÇÑ ½ÄÀº Á¤¼öÀÌ´Ù.
º¯¼ö¿¡´Â Àǹ̵éÀ» ÁÙ ¼ö°¡ ÀÖ´Ù. Àǹ̵鿡´Â ¾ð¾î À§¿¡ÀÇ Àǹ̴ ¾ø´Ù. º¯¼ö¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ¾î, ¿¬±¸ ÃÖÁ¾ ´Ü°è¿¡°Ô °Ç³×Áö´Â °Í¸¸À¸·Î ÀÖ´Ù. ´ë¹®ÀÚ ¼Ò¹®ÀÚ´Â ±¸º°µÇÁö ¾Ê´Â´Ù. À¯È¿ÇÑ Àǹ̵é°ú ±×·¯ÇÑ Àǹ̴Â, Á¤ÀÇÇϰí ÀÖ´Â ÇÔ¼öÀÇ Á¾·ù¿¡ µû¶ó¼ ´Ù¸£´Ù(Á¤Á¡ ¼ÎÀÌ´õ¿¡¼´Â, ¿¬±¸ ÃÖÁ¾ ´Ü°è´Â Àǹ̵éÀ» »ç¿ëÇØ ÀÔ·ÂÀ» ¸Ê ÇØ, Ãâ·Â ·¹Áö½ºÅ͸¦ ÇÒ´çÇÑ´Ù. ¼ÎÀÌ´õÀÇ ÀÔ·Â ¹× Ãâ·Â Àǹ̵éÀÇ À϶÷Àº, ÀÌ ¹®¼ÀÇ ´ÙÀ½¿¡ °¡¸®Å²´Ù).
±Û·Î¹ú º¯¼ö¿¡´Â, ÄÚ¸àÆ®¸¦ ºÙÀÏ ¼ö°¡ ÀÖ´Ù. ÄÚ¸àÆ®´Â { member_list } ¶ó°í ÇÏ´Â Çü½ÄÀ» ÃëÇÑ´Ù. ¿©±â¼, member_list ´Â ¸â¹ö ¼±¾ðÀÇ À϶÷À» ³ªÅ¸³», °¢ ¸â¹ö´Â ¸®ÅÍ·²°ª¿¡ ÃʱâȵȴÙ. ÄÚ¸àÆ®´Â, Àμö¿¡ °üÇÑ ¸ÞŸµ¥ÀÌŸ¸¦ ÀÌÆåÆ®¿¡ ÅëÁöÇÏ´Â ¸Þ¼µå¿¡ Áö³ªÁö ¾Ê´Â´Ù. ÇÁ·Î±×·¥Áß¿¡¼´Â ÂüÁ¶ÇÒ ¼ö ¾ø´Ù. ÄÚ¸àÆ® ¸â¹ö´Â Àǹ̵éÀ» °¡Áú ¼ö°¡ ¾ø´Ù.
±âº»ÇüÀÇ °¢ float ¼ººÐ¿¡´Â, ´ÙÀ½ÀÇ À̸§Ç¥¿¡ ³ªÅ¸³»´Â ÷ÀÚ¸¦ »ç¿ëÇØ, ±¸Á¶Ã¼ ¸â¹ö¿¡ÀÇ ¾×¼¼½º¿Í ´àÀº ¹æ¹ýÀ¸·Î ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù.
| _11, x, r | _12, y, g | _13, z, b | _14, w, a |
| _21 | _22 | _23 | _24 |
| _31 | _32 | _33 | _34 |
| _41 | _42 | _43 | _44 |
ÀÌ·¯ÇÑ À̸§À» 2 ~ 4 °³ ¿¬°áÇÑ Ã·ÀÚ¸¦ »ç¿ëÇØ, ƯÁ¤ÀÇ ¼ººÐ (¹Ù²ã ³Ö°í)À» Æ÷ÇÔÇÑ º¤Å͸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. À¯È¿ÇÑ ¿¹¸¦ ´ÙÀ½¿¡ ³ªÅ¸³½´Ù.
bgr, yyzw, _12_22_32_42
¸ðµÎ °°Àº ÷ÀÚ ¼¼Æ® (xyzw, rgba, ¶Ç´Â _11 ~ _44)ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â °Í. ´Ù¸¥ ¼¼Æ®´Â È¥ÀçÇÒ ¼ö ¾ø´Ù. °°Àº ¼ººÐÀ» ¹Ýº¹ÇØ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸, ¼ººÐÀ» ¹Ýº¹ÇØ ÁöÁ¤ÇÏ´Â °æ¿ì, ±³Ã¼´Â ÇÒ´çÀÇ Å¸°ÙÀ¸·Î¼´Â ¹«È¿ÀÌ´Ù.
¹®Àº, ó¸®ÀÇ È帧À» Á¦¾îÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. Áö¿ø µÇ´Â ¹®ÀåÀÇ Á¾·ù¸¦ ´ÙÀ½¿¡ ³ªÅ¸³½´Ù.
{ [statements] }
[expression] ;
return [expression] ;
if ( expression ) statement [else statement]
for ( [expression | variable_declaration] ; [expression] ; [expression] ) statement
do statement while ( expression ) ;
while ( expression ) statement ;
for, do, while ¹®Àº ¾ÆÁ÷ 󸮵ÇÁö ¾Ê´Ù.
½ÄÀº, ¸®ÅÍ·², º¯¼ö, ¶Ç´Â ¸®ÅÍ·²°ú º¯¼ö¸¦ ¡¸º¸À¯¡¹ÀÇ ¿¬»êÀÚ ¿ì¼± ¼øÀ§Ç¥¿¡ ÀÖ´Â ¿¬»êÀÚ·Î °áÇÕÇÑ °ÍÀÌ´Ù.
| ¿¬»êÀÚ | »ç¿ë ¹æ¹ý | ÀÇ¹Ì | °áÇÕ¹ýÄ¢ |
|---|---|---|---|
| () | (value) | ºÎºÐ½Ä | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| () | id(arguments) | ÇÔ¼öÀÇ È£Ãâ | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| type(arguments) | Çü constructor¡¡ ¡¡ | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ | |
| [] | array[int] | ¹è¿ÀÇ Ã·ÀÚ | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| . | structure.id | ¸â¹öÀÇ ¼±Åà | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| value.swizzle | ¼ººÐÀÇ ±³Ã¼ | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ | |
| ++ | variable++ | ÈÄ Ä¡ÀÎÅ©¸®¸ÕÆ®(increment) (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| -- | variable-- | ÈÄ Ä¡°¨¼Ò (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| ++ | ++variable | ÀüÄ¡ÀÎÅ©¸®¸ÕÆ®(increment) (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| -- | --variable | ÀüÄ¡°¨¼Ò (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| ! | ! value | ³í¸® NOT (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| - | -value | ´ÜÇ× ¸¶À̳ʽº (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| + | +value | ´ÜÇ× Ç÷¯½º (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| () | (type) value | Çü º¯È¯ | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| * | value*value | °ö¼À (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| / | value/value | ³ª´°¼À (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| % | value%value | À׿© (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| + | value+value | µ¡¼À (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| - | value-value | »¬¼À (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| < | value < value | ºñ±³ : º¸´Ù ÀÛÀº (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| > | value > value | ºñ±³ : º¸´Ù Å« (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| <= | value <= value | ºñ±³ : ÀÌÇÏ (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| >= | value >= value | ºñ±³ : ÀÌ»ó (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| == | value == value | ºñ±³ : µ¿ÀÏÇÑ (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| != | value != value | ºñ±³ : µ¿ÀÏÇÏÁö ¾ÊÀº (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| && | value && value | ³í¸® AND (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| || | value||value | ³í¸® OR (¼ººÐ¸¶´Ù) | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
| ? : | float? value:value | Á¶°Ç | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| = | variable=value | ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| *= | variable*=value | °ö¼À ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| /= | variable/=value | ³ª´°¼À ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| %= | variable%=value | À׿© ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| += | variable+=value | µ¡¼À ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| -= | variable-=value | »¬¼À ´ëÀÔ (¼ººÐ¸¶´Ù) | ¿À¸¥ÂÊ¿¡¼ ¿ÞÂÊ |
| , | value, value | ÄÞ¸¶ | ¿ÞÂÊ¿¡¼ ¿À¸¥ÂÊ |
C °ú´Â ´Þ¸®, &&,||,? : ½ÄÀÇ ÇÕ¼± Æò°¡´Â, °áÄÚ Æò°¡¸¦ ÇÕ¼± ÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé, ±×·¯ÇÑ ½ÄÀÌ º¤ÅÍ ¿¬»êÀ¸·Î, ½ÄÀÇ ¸ðµç Ç×ÀÌ Ç×»ó Æò°¡µÇ±â ¶§¹®ÀÌ´Ù.
% ¿¬»êÀÚ´Â, ¾çº¯ ¸ðµÎ Á¤Àΰ¡, ¾çº¯ ¸ðµÎ ºÎÀÇ °æ¿ì¿¡ ÇÑÁ¤ÇØ, Á¤ÀǵȴÙ. C °ú´Â ´Þ¸®, Á¤¼öÇü À̿ܿ¡, ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÀÇ µ¥ÀÌÅÍÇüµµ ó¸®ÇÑ´Ù.
¸¹Àº ¿¬»êÀÚ¿¡´Â "¼ººÐ¸¶´Ù" ¶ó°í ÇÏ´Â ¸¶Å©°¡ µÚµû¸£°í ÀÖ´Ù. À̰ÍÀº, ÀÔ·ÂÀÇ ¼ººÐ ¸¶´Ù, (´Ù¸¥ ¼ººÐ¿¡ ´ëÇÑ ¿¬»ê°ú´Â º°°³¿¡) ¾î¶°ÇÑ ¿¬»êÀ» ÇØ Ãâ·Â º¤ÅÍÀÇ ´ëÀÀÇÏ´Â ¼ººÐ¿¡ °á°ú°¡ ÀúÀå µÇ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
ºñ±³ ¿¬»êÀÚ ¹× 2 Ç׿¬»êÀÚµµ, ¼ººÐ ¸¶´Ù ÀÛ¿ëÇÑ´Ù. Áï, 2 °³ÀÇ º¤Å͸¦ ºñ±³ÇßÀ» °æ¿ì, °á°ú´Â, °¢ ¼ººÐÀ» ºñ±³ÇÑ ºÒ¸®¾ð °ªÀÇ °á°ú°¡ ÀúÀå µÈ º¤ÅͰ¡ µÈ´Ù.
2 Ç׿¬»êÀÚÀÇ ½Ä¿¡¼´Â, ¿¬»êÀÌ ½ÇÇàµÇ±â Àü¿¡, °¢º¯ÀÇ »çÀÌÁî¿Í ¼ººÐÀÇ ÇüÅ´ ¾çº¯ÀÌ °°°Ô µÇµµ·Ï(µíÀÌ) ÀÚµ¿ÀûÀ¸·Î ½Â°ÝµÈ´Ù. ½Â°ÝµÈ ÇüÅ¿¡ ÀÇÇØ, ¿¬»êÀ» ½ÇÇàÇÏ´Â ÇØ»óµµ¿Í ¿¬»ê °á°úÀÇ ÇüŰ¡ Á¤ÇØÁø´Ù. ¿¹¸¦ µé¾î, (int3 + float) ½ÄÀÇ °æ¿ì, (float3 + float3)¿¡ ½Â°ÝÇÏ°í ³ª¼ Æò°¡µÇ¾î ±× °á°ú´Â float3 ÇüÀÌ µÈ´Ù.
ÇÔ¼ö´Â C ÇÔ¼ö·Î ¸Å¿ì ´àÀº ¹æ¹ýÀ¸·Î Á¤ÀǵȴÙ.
[static inline target] [const] type id ( [parameter_list] ) ;
[static inline target] [const] type id ( [parameter_list] ) { [statements] } ;
target ´Â, ÇÔ¼ö°¡ »ý¼º µÈ Ç÷§ÆûÀ» ³ªÅ¸³»´Â, ¿É¼ÇÀÇ ½Äº°ÀÚ¸¦ ³ªÅ¸³½´Ù. parameter_list ´Â, 1 °³ ÀÌ»óÀÇ ÆÄ¶ó¹ÌÅÍ ¼±¾ðÀ» ÄÞ¸¶·Î ´Ü¶ôÁö¾î ´Ã¾î³õÀº °ÍÀÌ´Ù.
[uniform in out inout] type id [: semantic] [= default]
ÆÄ¶ó¹ÌÅÍÀÇ °ªÀº Ç×»ó, °ªÀ¸·Î °Ç³×¹Þ´Â´Ù. in ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇϸé ÇÔ¼öÀÇ ½ÇÇàÀü¿¡ ÀμöÀÇ °ªÀ» È£ÃâÇØ ¿øÀ¸·ÎºÎÅÍ º¹»ç ÇÒ Çʿ䰡 ÀÖ´Â °ÍÀ» ³ªÅ¸³½´Ù. out ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¸é ÆÄ¶ó¹ÌÅÍÀÇ ¸¶Áö¸· °ªÀ» º¹»ç ÇØ, ÇÔ¼ö°¡ µ¹¾Æ°¥ ¶§ ±× °ªÀÌ È£ÃâÇØ ¹ÙÅÁÀ¸·Î µ¹·ÁÁÖ¾îÁú Çʿ䰡 ÀÖ´Â °ÍÀ» ³ªÅ¸³½´Ù. inout ÆÄ¶ó¹ÌÅÍ´Â, in ¿Í out ÀÇ ¾çÂÊ ¸ðµÎ¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ» »ý·«ÇÑ °Í¸¸À¸·Î ÀÖ´Ù. uniform ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¸é Æ¯¼öÇÑ in ·Î, ÆÄ¶ó¹ÌÅÍÀÇ °ªÀ» Á¤¼ö µ¥ÀÌÅͷκÎÅÍ ÃëÇÏ´Â °ÍÀ» ÃÖ»óÁ¤µµ ÇÔ¼ö¿¡ ³ªÅ¸³»°í ÀÖ´Ù. ÃÖ»óÁ¤µµ ÀÌ¿ÜÀÇ ÇÔ¼ö¿¡ ÀÖ¾î, uniform ´Â, in ¿Í µ¿ÀÇÀÌ´Ù. ÆÄ¶ó¹ÌÅÍÀÇ »ç¿ë ¹æ¹ýÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì, ÆÄ¶ó¹ÌÅÍÀÇ »ç¿ë ¹æ¹ýÀº in ¶ó°í º¸¿©Áø´Ù.
º»Ã¼°¡ ¾ø´Â ÇÔ¼ö¸¦ Á¤ÀÇ Çϸé, prototype¶ó°í º¸¿©Áø´Ù. ÀÌ ÇÔ¼ö´Â, ÈÄÀÇ ÄÚµå·Î º»Ã¼¸¦ ºÙ¿© ÀçÁ¤ÀÇÇÒ Çʿ䰡 ÀÖ´Ù. º»Ã¼°¡ Á¤ÀǵÇÁö ¾ÊÀº ÇÔ¼ö¸¦ ÂüÁ¶ Çϸé, ¿¡·¯°¡ µÈ´Ù.
ÇÔ¼ö´Â, ´ÙÁß Á¤ÀÇ ÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö´Â, ±× À̸§, ÀμöÀÇ ÇüÅÂ, Ÿ°Ù Ç÷§Æû (ÁöÁ¤µÇ°í ÀÖ´Â °æ¿ì)¿¡ ÀÇÇØ ÀÏÀÇ¿¡ ½Äº°µÈ´Ù. ÇÔ¼öÀÇ ´ÙÁß Á¤ÀÇ´Â, ¾ÆÁ÷ 󸮵ÇÁö ¾Ê´Ù.
Çö½ÃÁ¡¿¡¼´Â, ¸ðµç ÇÔ¼ö°¡ ÀÎ ¶óÀÎÀÌ´Ù. Àç±Í´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.
| abs | value abs(value a) | Àý´ëÄ¡ (¼ººÐ¸¶´Ù). |
| acos | acos(x) | x ÀÇ °¢ ¼ººÐÀÇ ¿ªÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. °¢ ¼ººÐÀº,[-1, 1] ÀÇ ¹üÀ§·Î ÇÑ´Ù. |
| all | all(x) | x ÀÇ ¸ðµç ¼ººÐÀÌ 0 ÀÌ¿ÜÀÇ °ªÀÎÁö ¾Æ´ÑÁö¸¦ Å×½ºÆ®ÇÑ´Ù. |
| any | any(x) | x ÀÇ ¸î°³ÀÇ ¼ººÐÀÌ 0 ÀÌ¿ÜÀÇ °ªÀÎÁö ¾Æ´ÑÁö¸¦ Å×½ºÆ®ÇÑ´Ù. |
| asin | asin(x) | x ÀÇ °¢ ¼ººÐÀÇ ¿ªÁ¤ÇöÀ» µ¹·ÁÁØ´Ù. °¢ ¼ººÐÀº,[-pi/2, pi/2] ÀÇ ¹üÀ§·Î ÇÑ´Ù. |
| atan | atan(x) | x ÀÇ °¢ ¼ººÐÀÇ ¿ªÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. ¹Ýȯ°ªÀº,[-pi/2, pi/2] ÀÇ ¹üÀ§ÀÌ´Ù. |
| atan2 | atan2(y, x) | y/x ÀÇ ¿ªÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. y ¿Í x ÀÇ ºÎÈ£¸¦ »ç¿ëÇØ [-pi, pi] ÀÇ ¹üÀ§¿¡ ÀÖ´Â ¹Ýȯ°ªÀÇ »óÇÑÀ» ÆÇ´ÜÇÑ´Ù. atan2 ´Â, x °¡ 0 À¸·Î µ¿ÀÏÇϰí, y °¡ 0 À¸·Î µ¿ÀÏÇÏÁö ¾ÊÀº °æ¿ì¿¡¼µµ, ¿øÁ¡ ÀÌ¿ÜÀÇ °¢ Á¡¿¡ ´ëÇØ¼ ÃæºÐÈ÷ Á¤Àǵǰí ÀÖ´Ù. |
| ceil | ceil(x) | x ÀÌ»óÀÇ ÃÖ¼ÒÀÇ Á¤¼ö¸¦ µ¹·ÁÁØ´Ù. |
| clamp | clamp(x, min, max) | x ¸¦ [min, max] ÀÇ ¹üÀ§¿¡ Á¦ÇÑÇÑ´Ù. |
| clip | clip(x) | x ÀÇ ¸î°³ÀÇ ¼ººÐÀÌ 0 º¸´Ù ÀÛÀº °æ¿ì, ÇöÀçÀÇ Çȼ¿À» ÆÄ±âÇÑ´Ù. x ÀÇ °¢ ¼ººÐÀÌ ¸éÀ¸·ÎºÎÅÍÀÇ °Å¸®¸¦ ³ªÅ¸³»´Â °æ¿ì, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇØ, Ŭ¸³¸éÀ» ½Ã¹Ä·¹ÀÌ¼Ç ÇÑ´Ù. |
| cos | cos(x) | x ÀÇ ÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. |
| cosh | cosh(x) | x ÀÇ ½Ö°îÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. |
| cross | cross(a, b) | 2 °³ÀÇ 3D º¤ÅÍ a ¿Í b ÀÇ ¿ÜÀûÀ» µ¹·ÁÁØ´Ù. |
| D3DCOLORtoUBYTE4 | D3DCOLORtoUBYTE4(x) | 4D º¤ÅÍ x ÀÇ ¼ººÐÀ» ±³Ã¼ ¹× ½ºÄÉÀϸµ ÇØ, ÀϺΠÇϵå¿þ¾î¿¡ ÀÖ´Â UBYTE4 Áö¿øÀÇ ºÎÁ·À» º¸Á¤ÇÑ´Ù. |
| ddx | ddx(x) | ½ºÅ©¸° °ø°£ÀÇ x ÁÂÇ¥¿¡ ´ëÇØ, x ÀÇ Æí¹ÌºÐÀ» µ¹·ÁÁØ´Ù. |
| ddy | ddy(x) | ½ºÅ©¸° °ø°£ÀÇ y ÁÂÇ¥¿¡ ´ëÇØ, x ÀÇ Æí¹ÌºÐÀ» µ¹·ÁÁØ´Ù. |
| degrees | degrees(x) | x ¸¦ ¶óµð¾È ´ÜÀ§·ÎºÎÅÍ µµ¼ö·Î º¯È¯ÇÑ´Ù. |
| determinant | determinant(m) | ¼¹æ Çà·Ä m ÀÇ Çà·Ä½ÄÀ» µ¹·ÁÁØ´Ù. |
| distance | distance(a, b) | 2 °³ÀÇ Á¡ a ¿Í b °£ÀÇ °Å¸®¸¦ µ¹·ÁÁØ´Ù. |
| dot | dot(a, b) | 2 °³ÀÇ º¤ÅÍ a ¿Í b ÀÇ ³»ÀûÀ» µ¹·ÁÁØ´Ù. |
| exp | exp(x) | e ¸¦ ¹Ù´ÚÀ¸·Î ÇÏ´Â Áö¼ö ex ¸¦ µ¹·ÁÁØ´Ù. |
| exp2 | value exp2(value a) | 2 ¸¦ ¹Ù´ÚÀ¸·Î ÇÏ´Â Áö¼ö (¼ººÐ¸¶´Ù). |
| faceforward | faceforward(n, i, ng) | -n * sign(dot(i, ng))¸¦ µ¹·ÁÁØ´Ù. |
| floor | floor(x) | x ÀÌÇÏÀÇ ÃÖ´ëÀÇ Á¤¼ö¸¦ µ¹·ÁÁØ´Ù. |
| fmod | fmod(a, b) | a = i * b + f °¡ µÇ´Â °Í °°Àº, a / b ÀÇ ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÀÇ À׿© f ¸¦ µ¹·ÁÁØ´Ù. ¿©±â¼, i ´Â Á¤¼ö, f ´Â x ¿Í ºÎÈ£°¡ °°¾Æ, ±× Àý´ëÄ¡´Â b ÀÇ Àý´ëÄ¡º¸´Ù ÀÛ´Ù. |
| frac | frac(x) | f °¡ 0 º¸´Ù Å©°í, 1 º¸´Ù ÀÛÀº °ªÀÌ µÇ´Â °Í °°Àº, x ÀÇ ¼Ò¼öºÎ f ¸¦ µ¹·ÁÁØ´Ù. |
| frc | value frc(value a) | ¼Ò¼öºÎ (¼ººÐ¸¶´Ù). |
| frexp | frexp(x, out exp) | x ÀÇ °¡¼ö¿Í Áö¼ö¸¦ µ¹·ÁÁØ´Ù. frexp ´Â °¡¼ö¸¦ µ¹·ÁÁÖ¾î, Áö¼ö´Â Ãâ·Â Àμö exp ¿¡ ÀúÀå µÈ´Ù. x °¡ 0 ÀÇ °æ¿ì, ÇÔ¼ö´Â °¡¼ö¿Í Áö¼öÀÇ ¾çÂÊ ¸ðµÎ¿¡ 0 À» µ¹·ÁÁØ´Ù. |
| fwidth | fwidth(x) | abs(ddx(x)) +abs(ddy(x))¸¦ µ¹·ÁÁØ´Ù. |
| isfinite | isfinite(x) | x °¡ À¯ÇÑÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù. |
| isinf | isinf(x) | x °¡ +INF ³ª -INF ÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù. |
| isnan | isnan(x) | x °¡ NAN ³ª QNAN ÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù. |
| ldexp | ldexp(x, exp) | x * 2exp ¸¦ µ¹·ÁÁØ´Ù. |
| len | float len(value a) | º¤ÅÍÀÇ ±æÀÌ. |
| length | length(v) | º¤ÅÍ v ÀÇ ±æÀ̸¦ µ¹·ÁÁØ´Ù. |
| lerp | lerp(a, b, s) | a + s(b - a)¸¦ µ¹·ÁÁØ´Ù. ÀÌ ÇÔ¼ö´Â, s °¡ 0 ÀÇ °æ¿ì´Â a ¸¦ µ¹·ÁÁÖ¾î, 1 ÀÇ °æ¿ì´Â b ¸¦ µ¹·ÁÁÖµµ·Ï, a ¿Í b ÀÇ »çÀ̸¦ ¼±Çü º¸°£ ÇÑ´Ù. |
| lit | lit(ndotl, ndoth, m) | Á¶¸íÀÇ º¤ÅÍ (¾Úºñ¾ðÆ®, µðÇ»Áî, ½ºÆåÅ¥·¯, 1)¸¦ µ¹·ÁÁØ´Ù. ¾Úºñ¾ðÆ® = 1; µðÇ»Áî = (ndotl < 0) ? 0 : ndotl; ½ºÆåÅ¥·¯ = (ndotl < 0) || (ndoth < 0) ? 0 : (ndoth * m); |
| log | log(x) | x ÀÇ, ¹Ù´ÚÀÌ e ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù. |
| log10 | log10(x) | x ÀÇ, ¹Ù´ÚÀÌ 10 ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù. |
| log2 | log2(x) | x ÀÇ, ¹Ù´ÚÀÌ 2 ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù. |
| max | max(a, b) | a ¿Í b ÀÇ Å« (ºÐ)ÆíÀ» ¼±ÅÃÇÑ´Ù. |
| min | min(a, b) | a ¿Í b °¡ ÀÛÀº (ºÐ)ÆíÀ» ¼±ÅÃÇÑ´Ù. |
| modf | modf(x, out ip) | °ª x ¸¦, °¢°¢ÀÌ x ¿Í °°Àº ºÎÈ£¸¦ °¡Áø ¼Ò¼öºÎ¿Í Á¤¼öºÎ·Î ³ª´«´Ù. x ÀÇ ºÎÈ£ ÷ºÎ ¼Ò¼öºÎ°¡ ¹ÝȯµÈ´Ù. Á¤¼öºÎ´Â Ãâ·Â Àμö ip ¿¡ ÀúÀå µÈ´Ù. |
| mul | mul(a, b) | a ¿Í b ÀÇ »çÀÌÀÇ Çà·Ä °ö¼ÀÀ» ½ÇÇàÇÑ´Ù. a °¡ º¤ÅÍÀÇ °æ¿ì, Çà º¤Åͷμ ó¸®ÇÑ´Ù. b °¡ º¤ÅÍÀÇ °æ¿ì, ¿·Î¼ ó¸®ÇÑ´Ù. ³»ºÎ ³ÐÀÌÀÇ a ¿°ú b ÇàÀº µ¿ÀÏÇØ¾ß ÇÑ´Ù. a Çà x b ¿ÀÇ ³ÐÀ̸¦ ¾òÀ» ¼ö ÀÖ´Ù. |
| noise | noise(x) | 󸮵ÇÁö ¾Ê´Ù. |
| normalize | normalize(v) | Á¤±ÔÈµÈ º¤ÅÍ v / length(v)¸¦ µ¹·ÁÁØ´Ù. v ÀÇ ±æÀ̰¡ 0 ÀÇ °æ¿ì, °á°ú´Â ¹«ÇÑÀÌ µÈ´Ù. |
| pow | pow(x, y) | xy ¸¦ µ¹·ÁÁØ´Ù. |
| radians | radians(x) | x ¸¦ µµ¼ö·ÎºÎÅÍ ¶óµð¾È ´ÜÀ§·Î º¯È¯ÇÑ´Ù. |
| reflect | reflect(i, n) | ÀÔ»ç ¹æÇâ i, Ç¥¸é ¹ý¼± n ·Î ÇßÀ» °æ¿ìÀÇ, v = i - 2 * dot(i, n) * n ¿¡ ÀÇÇØ ±¸ÇÒ ¼ö ÀÖ´Â, ¹Ý»ç º¤ÅÍ v ¸¦ µ¹·ÁÁØ´Ù. |
| refract | refract(i, n, eta) | ÀÔ»ç ¹æÇâ i, Ç¥¸é ¹ý¼± n, ±¼Àý eta ÀÇ »ó´ë À妽º°¡ ÁÖ¾îÁ³À» °æ¿ìÀÇ, ±¼Àý º¤ÅÍ v ¸¦ µ¹·ÁÁØ´Ù. i ¿Í n ÀÇ »çÀÌÀÇ ÀԻ簢ÀÌ ÁöÁ¤µÈ eta º¸´Ù ³Ê¹« Å©¸é (0,0,0)¸¦ µ¹·ÁÁØ´Ù. |
| round | round(x) | x ¸¦ °¡Àå °¡±î¿î Á¤¼ö¿¡ ¸»´Ù. |
| rsqrt | rsqrt(x) | 1 / sqrt(x)¸¦ µ¹·ÁÁØ´Ù. |
| saturate | saturate(x) | x ¸¦ [0, 1] ÀÇ ¹üÀ§¿¡ Á¦ÇÑÇÑ´Ù. |
| sign | sign(x) | x ÀÇ ºÎÈ£¸¦ ¿ä±¸ÇÑ´Ù. x °¡ 0 º¸´Ù ÀÛÀº °æ¿ì´Â -1, 0 À¸·Î µ¿ÀÏÇÑ °æ¿ì´Â 0, 0 º¸´Ù Å« °æ¿ì´Â 1 À» µ¹·ÁÁØ´Ù. |
| sin | sin(x) | x ÀÇ Á¤ÇöÀ» µ¹·ÁÁØ´Ù. |
| sincos | sincos(x, out s, out c) | x ÀÇ Á¤Çö°ú ÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. sin(x)´Â Ãâ·Â Àμö s ¿¡ ÀúÀå µÇ¾î cos(x)´Â Ãâ·Â Àμö c ¿¡ ÀúÀå µÈ´Ù. |
| sinh | sinh(x) | x ÀÇ ½Ö°îÁ¤ÇöÀ» µ¹·ÁÁØ´Ù. |
| smoothstep | smoothstep(min, max, x) | x < min ÀÇ °æ¿ì´Â 0 À» µ¹·ÁÁØ´Ù. x > max ÀÇ °æ¿ì´Â 1 À» µ¹·ÁÁØ´Ù. x °¡ [min, max] ÀÇ ¹üÀ§³»À̸é, 0 À¸·Î 1 ÀÇ »çÀÌÀÇ ¸Å²ô·¯¿î ¿¡¸£¹ÌÆ® º¸°£À» µ¹·ÁÁØ´Ù. |
| sqrt | value sqrt(value a) | Á¦°ö±Ù (¼ººÐ¸¶´Ù). |
| step | step(a, x) | (x >= a) ? 1 : 0 À» µ¹·ÁÁØ´Ù. |
| tan | tan(x) | x ÀÇ ÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. |
| tanh | tanh(x) | x ÀÇ ½Ö°îźÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. |
| tex1D | tex1D(s, t) | 1D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â ½ºÄ®¶ó-. |
| tex1D | tex1D(s, t, ddx, ddy) | ¹ÌºÐÀ» ÁöÁ¤ÇÑ, 1D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t, ddx, ddy ´Â ½ºÄ®¶ó-. |
| tex1Dproj | tex1Dproj(s, t) | 1D ÀÇ Åõ¿µ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù. |
| tex1Dbias | tex1Dbias(s, t) | 1D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù. |
| tex2D | tex2D(s, t) | 2D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 2D ÅØ½ºÃ³ ÁÂÇ¥. |
| tex2D | tex2D(s, t, ddx, ddy) | ¹ÌºÐÀ» ÁöÁ¤ÇÑ, 2D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t, ddx, ddy ´Â 2D º¤ÅÍ. |
| tex2Dproj | tex2Dproj(s, t) | 2D ÀÇ Åõ¿µ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù. |
| tex2Dbias | tex2Dbias(s, t) | 2D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù. |
| tex3D | tex3D(s, t) | 3D ÀÇ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 3D ÅØ½ºÃ³ ÁÂÇ¥. |
| tex3D | tex3D(s, t, ddx, ddy) | ¹ÌºÐÀ» ÁöÁ¤ÇÑ, 3D ÀÇ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t, ddx, ddy ´Â 3D º¤ÅÍ. |
| tex3Dproj | tex3Dproj(s, t) | 3D ÀÇ Åõ¿µ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù. |
| tex3Dbias | tex3Dbias(s, t) | 3D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù. |
| texCUBE | texCUBE(s, t) | 3D ÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 3D ÅØ½ºÃ³ ÁÂÇ¥. |
| texCUBE | texCUBE(s, t, ddx, ddy) | ¹ÌºÐÀ» ÁöÁ¤ÇÑ, 3D ÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t, ddx, ddy ´Â 3D º¤ÅÍ. |
| texCUBEproj | texCUBEproj(s, t) | 3D Åõ¿µÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù. |
| texCUBEbias | texCUBEbias(s, t) | 3D ÀÇ ¹ÙÀ̾ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù. |
| transpose | transpose(m) | Çà·Ä m ÀÇ ÀüÄ¡Çà·ÄÀ» µ¹·ÁÁØ´Ù. ÀÔ·ÂÀÇ ³ÐÀ̰¡ m Çà x m ¿ÀÇ °æ¿ì, °á°ú´Â ³ÐÀÌ m ¿ x m ÇàÀÌ µÈ´Ù. |
ÀÔ·Â Àǹ̵éÀº, Á¤Á¡ ¼ÎÀÌ´õ ÀÔ·Â µ¥ÀÌÅÍÀÇ »ç¿ë ¹æ¹ýÀ» ½Äº°ÇÏ´Â ÄÚ¸àÆ®ÀÌ´Ù. À̰ÍÀº, °íÁ¤ ±â´É ÆÄÀÌÇÁ¶óÀÎÀÇ D3DDECLUSAGE Àμö¿Í À¯»çÇÏ´Ù.
| POSITION[n] | À§Ä¡ ÁÂÇ¥ |
| BLENDWEIGHT[n] | È¥ÇÕÀÇ Áß·®°¨ |
| BLENDINDICES[n] | ºí·»µåÀÇ À妽º |
| NORMAL[n] | ¹ý¼± º¤ÅÍ |
| PSIZE[n] | Æ÷ÀÎÆ® »çÀÌÁî |
| DIFFUSE[n] | µðÇ»Áî»ö |
| SPECULAR[n] | ½ºÆåÅ¥·¯»ö |
| TEXCOORD[n] | ÅØ½ºÃ³ ÁÂÇ¥ |
| TANGENT[n] | Á¢¼± |
| BINORMAL[n] | Á¾¹ý¼± |
| TESSFACTOR[n] | Å×¼³·¹ÀÌ¼Ç °è¼ö |
n ´Â ¿É¼ÇÀÇ Á¤¼öÀÌ´Ù. ¿¹ : PSIZE0, DIFFUSE1.
Ãâ·Â Àǹ̵éÀº, Á¤Á¡ ¼ÎÀÌ´õ Ãâ·Â µ¥ÀÌÅÍÀÇ »ç¿ë ¹æ¹ýÀ» ½Äº°ÇÏ´Â ÄÚ¸àÆ®ÀÌ´Ù. À̰ÍÀº, °íÁ¤ ±â´É ÆÄÀÌÇÁ¶óÀÎÀÇ D3DDECLUSAGE Àμö¿Í À¯»çÇÏ´Ù.
| POSITION | À§Ä¡ ÁÂÇ¥ |
| PSIZE | Æ÷ÀÎÆ® »çÀÌÁî |
| FOG | Á¤Á¡ Æ÷±×(¾È°³:fog) |
| COLOR[n] | »ö (¿¹ :COLOR0) |
| TEXCOORD[n] | ÅØ½ºÃ³ ÁÂÇ¥ (¿¹ :TEXCOORD0) |
n ´Â ¿É¼ÇÀÇ Á¤¼öÀÌ´Ù. ¿¹ : texcoord0.
ÀÔ·Â Àǹ̵éÀº, Çȼ¿ ¼ÎÀÌ´õ ÀÔ·Â µ¥ÀÌÅÍÀÇ »ç¿ë ¹æ¹ýÀ» ½Äº°ÇÏ´Â ÄÚ¸àÆ®ÀÌ´Ù. À̰ÍÀº, °íÁ¤ ±â´É ÆÄÀÌÇÁ¶óÀÎÀÇ D3DDECLUSAGE Àμö¿Í À¯»çÇÏ´Ù.
| COLOR[n] | ½ºÆåÅ¥·¯»öÀÇ µðÇ»Áî (¿¹ :COLOR0 ¶Ç´Â COLOR1) |
| TEXCOORD[n] | ÅØ½ºÃ³ ÁÂÇ¥ (¿¹ :TEXCOORD0) |
n ´Â ¿É¼ÇÀÇ Á¤¼öÀÌ´Ù. ¿¹ : TEXCOORD0, TEXCOORD1.
Ãâ·Â Àǹ̵éÀº, Çȼ¿ ¼ÎÀÌ´õ Ãâ·Â µ¥ÀÌÅÍÀÇ »ç¿ë ¹æ¹ýÀ» ½Äº°ÇÏ´Â ÄÚ¸àÆ®ÀÌ´Ù.
| COLOR[n] | »ö (¿¹ :COLOR0) |
| TEXCOORD[n] | ÅØ½ºÃ³ ÁÂÇ¥ (¿¹ :TEXCOORD0) |
n ´Â ¿É¼ÇÀÇ Á¤¼öÀÌ´Ù. ¿¹ : texcoord0.
¡¸±×·ÎÀÇ Àû¿ë¡¹À» ÂüÁ¶ÇÒ°Í.
//----------------------------------------------------------------------------
// Global parameters
//----------------------------------------------------------------------------
texture tDiffuse;
texture tNormal;
float4 cAmbient = { 0.3f, 0.3f, 0.3f, 1.0f }; // ambient color
float4 cDiffuse = { 1.0f, 1.0f, 1.0f, 1.0f }; // diffuse color
float4 cSpecular = { 0.6f, 0.6f, 0.6f, 1.0f }; // specular color
float3 vDiffuse = { 0.0f, 1.0f, 0.0f }; // diffuse direction
float3 vSpecular = { 0.0f, 0.0f, 0.0f }; // specular direction
struct VS_INPUT
{
float4 vPosition : POSITION;
float3 vBlendWeights : BLENDWEIGHT;
float4 vBlendIndices : BLENDINDICES;
float3 vNormal : NORMAL;
float2 vTexCoords : TEXCOORD0;
float3 vTangent : TANGENT;
float fFlip : TEXCOORD1;
float fDisplacement : TEXCOORD2;
};
struct VS_OUTPUT
{
float4 vPosition : POSITION;
float4 vTexCoord0 : TEXCOORD0;
float4 vTexCoord1 : TEXCOORD1;
float3 vDiffuse : COLOR0;
float3 vSpecular : COLOR1;
};
struct PS_OUTPUT
{
float4 vColor : COLOR0;
};
//----------------------------------------------------------------------------
// Shader body
//----------------------------------------------------------------------------
VS_OUTPUT main(const VS_INPUT v)
{
VS_OUTPUT o = (VS_OUTPUT) 0;
// Compute last blend weight.
// An application supplies one fewer bone weights than
// the number of bones. So, the last bone weight is
// calculated using a dot product.
float fLastBlendWeight = 1 - dot(v.vBlendWeights, 1);
// The dot product is a convenient way of subtracting
// the other three weights from 1.
// Skin position(to world space)
// Each vertex is influenced by four bones. Each bone
// must be transformed to world space, and then the result
// is combined using the bone weight.
float3 vPosition =
mul(v.vPosition, mWorld[v.vBlendIndices.x]) * v.vBlendWeights.x +
mul(v.vPosition, mWorld[v.vBlendIndices.y]) * v.vBlendWeights.y +
mul(v.vPosition, mWorld[v.vBlendIndices.z]) * v.vBlendWeights.z +
mul(v.vPosition, mWorld[v.vBlendIndices.w]) * fLastBlendWeight;
// Each normal is also influenced by four bones. Because normals
// cannot be transformed using the world matrix (because they
// end up with orientation problems if x, y, z scaling is not
// uniform), normals need to be transformed using an
// inverse-transpose matrix (mNormal). Otherwise, the mathematics
// is nearly the same (the data types are different) as the
// vertex position computation.
// Skin normal (to world space)
float3 vNormal =
mul(v.vNormal, mNormal[v.vBlendIndices.x]) * v.vBlendWeights.x +
mul(v.vNormal, mNormal[v.vBlendIndices.y]) * v.vBlendWeights.y +
mul(v.vNormal, mNormal[v.vBlendIndices.z]) * v.vBlendWeights.z +
mul(v.vNormal, mNormal[v.vBlendIndices.w]) * fLastBlendWeight;
// Skin tangent (to world space)
// A tangent is also influenced by four bones. Tangents, like
// normals, cannot be transformed using the world matrix
// (because they end up with orientation problems if x, y, z
// scaling is not uniform). Tangents need to be transformed
// using the inverse-transpose matrix (mNormal). Otherwise, the transform
// is the same for tangents as it is for normals - each tangent
// is transformed into world space ( using the world matrix
// transpose ) resulting in 4 possible tangent vectors. Weights
// are used to combine all four tangent vectors into a final
// tangent vector.
float3 vTangent =
mul(v.vTangent, mNormal[v.vBlendIndices.x]) * v.vBlendWeights.x +
mul(v.vTangent, mNormal[v.vBlendIndices.y]) * v.vBlendWeights.y +
mul(v.vTangent, mNormal[v.vBlendIndices.z]) * v.vBlendWeights.z +
mul(v.vTangent, mNormal[v.vBlendIndices.w]) * fLastBlendWeight;
// Compute binormal
// The binormal vector is the third axis in tangent space. You already
// have the vertex normal vector and the vertex tangent vector. So,
// a cross product will give you the third axis that is perpendicular
// to the other two axes. To generate an axis in left-handed
// coordinates, the result has to be flipped.
float3 vBinormal = cross(vNormal, vTangent) * v.fFlip;
// Light direction (to vertex space)
// Load the vertex tangent, bi-normal, and normal unit vectors
// into a matrix for transforming the light direction vector.
float3x3 mLight =
float3x3(vTangent.x, vBinormal.x, vNormal.x,
vTangent.y, vBinormal.y, vNormal.y,
vTangent.z, vBinormal.z, vNormal.z);
// Displace position
// To find the final vertex position, move each vertex with
// displacement data in the direction of the normal vector and
// transform the vertices into projection space.
o.vPosition = mul(float4(vPosition + vNormal * v.fDisplacement, 1),
mViewProj);
// vDiffuse and vSpecular contain the lights diffuse and specular
// direction. This is a float3 vector. Theses direction vectors
// need to be transformed to projection space also. Once transformed,
// the direction vectors may contain components between -1 and +1.
// Because they are being loaded into the pixel shader diffuse and
// specular registers, the data needs to be in the 0 to +1 range.
// The data is converted by scaling (* 0.5) and biasing (+ 0.5)
// the data.
o.vDiffuse = mul(vDiffuse, mLight) * 0.5 + 0.5;
o.vSpecular = mul(vSpecular, mLight) * 0.5 + 0.5;
// No change is needed for the texture coordinates, so copy them
// as is to both sets of output texture coordinates.
o.vTexCoord0.xy = o.vTexCoord1.xy = v.vTexCoords.xy;
return o;
}
sampler DiffuseMap = sampler_state
{
Texture = <tDiffuse>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
sampler NormalMap = sampler_state
{
Texture = <tNormal>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
technique T0
{
pass P0
{
// Vertex shader
VertexShader = compile vs_1_1 main();
// Pixel shader
PixelShader =
asm
{
ps_1_1
tex t0
tex t1
// Specular
dp3_sat r1, t1_bx2, v1_bx2
dp3_x4 r0, t1_bx2, v0_bx2
mul_sat r1, r1, r0
mul_sat r1, r1, r1
mul_sat r1, r1, c2
// Diffuse + Ambient
dp3_sat r0, t1_bx2, v0_bx2
mad_sat r0, r0, c1, c0
mad_sat r0, r0, t0, r1
};
PixelShaderConstant1[0] = <cAmbient>;
PixelShaderConstant1[1] = <cDiffuse>;
PixelShaderConstant1[2] = <cSpecular>;
Sampler[0] = (DiffuseMap);
Sampler[1] = (NormalMap);
// Clip/Raster state
CullMode = CW;
}
}
Ű¿öµå´Â, ¹Ì¸® Á¤Àǵǰí ÀÖ´Â ¿¹¾à ³¡³ ½Äº°ÀÚÀ̸ç, Ưº°ÇÑ Àǹ̸¦ °¡Áö°í ÀÖ´Ù. ÇÁ·Î±×·¥³»¿¡¼ ½Äº°Àڷμ »ç¿ëÇÒ ¼ö ¾ø´Ù. ´ÙÀ½ÀÇ Å°¿öµå°¡ ¿¹¾àµÇ°í ÀÖ´Ù. '*'°¡ ºÙ¾î Àִ Ű¿öµå´Â, ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê´Â´Ù.
| asm* | bool | compile | const |
| decl * | do | double | else |
| extern | false | float | for |
| half | if | in | inline |
| inout | int | matrix | out |
| pass * | pixelshader | return | sampler |
| shared | static | string | struct |
| technique * | texture | true | typedef |
| uniform | vector | vertexshader | void |
| volatile | while |
´ÙÀ½ÀÇ Å°¿öµå´Â ¹Ì»ç¿ëÀÌÁö¸¸, ¿¹¾àµÇ°í ÀÖ´Ù.
| asm* | bool | compile | const |
| auto | break | case | catch |
| char | class | const_cast | continue |
| default | delete | dynamic_cast | enum |
| explicit | friend | goto | long |
| mutable | namespace | new | operator |
| private | protected | public | register |
| reinterpret_cast | short | signed | sizeof |
| static_cast | switch | template | this |
| throw | try | typename | union |
| unsigned | using | virtual |
ÇÁ¸®ÇÁ·Î¼¼¼´Â, ´ÙÀ½ÀÇ Áö½Ã¹®À» ÀνÄÇÑ´Ù. ¾Æ·¡¿¡ ¿Ã¸®´Â Áö½Ã¹® Àܴ̿Â, ¸ðµÎ Microsoft Visual C++® ÇÁ¸®ÇÁ·Î¼¼¼¿ÍÀÇ È£È¯¼ºÀ» °¡Áöµµ·Ï(µíÀÌ) ó¸® µÈ´Ù. ÀÌ·¯ÇÑ Áö½Ã¹®ÀÇ ¿ÏÀüÇÑ ¼³¸í¿¡ ´ëÇØ¼´Â, Visual C++ ÀÇ ¹®¼¸¦ ÂüÁ¶ÇÒ°Í.
| #define | #elif | #else | #endif |
| #error | #if | #ifdef | #ifndef |
| #include | #line | pragma | #undef |
| #row_major | #column_major |
ÇÔ¼ö Çü½ÄÀÇ #defines ´Â, ¾ÆÁ÷ 󸮵ÇÁö ¾Ê´Ù. ´ÙÀ½ÀÇ ÅäÅ«Àº ÀÚµ¿ÀûÀ¸·Î Á¤ÀǵȴÙ.
#define D3DX #define D3DX_VERSION 0x0900 #define DIRECT3D #define DIRECT3D_VERSION 0x0900 #define __FILE__#define __LINE__
Áö½Ã¹® #include ´Â, ÆÄÀϷκÎÅÍ ÄÄÆÄÀÏ ÇÏ´Â °æ¿ì¿¡¸¸ À¯È¿ÇÏ´Ù. ÆÄÀϸíÀº, Àý´ë ÆÐ½º·Î ÁöÁ¤Çصµ »ó´ë ÆÐ½º·Î ÁöÁ¤Çصµ ±¦Âú´Ù. »ó´ë ÆÐ½º·Î ÁöÁ¤ÇßÀ» °æ¿ì´Â, #include ¸¦ ¹ßÇàÇÑ ÆÄÀÏÀÇ µð·ºÅ丮·ÎºÎÅÍÀÇ »ó´ë ÆÐ½º¶ó°í º¸¿©Áø´Ù. INCLUDE ÆÐ½º¶ó°í ÇÏ´Â °³³äÀÌ ¾ø±â ¶§¹®¿¡, <filename> ±¸¹®Àº Áö¿ø µÇÁö ¾Ê°í, ¹«È¿ÀÌ´Ù. ´ë½Å¿¡ "filename" ¸¦ »ç¿ëÇÏ´Â °Í.
Áö½Ã¹® #pragma ¿¡ ´ëÇØ Á¤ÀÇµÈ »ç¿ë ¹æ¹ýÀÌ ¾ÆÁ÷ ¾ø°í, ÀνĵÇÁö ¾Ê´Â pragma ´Â ¾Æ¹«°Íµµ µ¹·ÁÁÖÁö ¾Ê°í ¹«½ÃµÈ´Ù.
row_major ¿Í column_major ´Â, Çà·Ä º¯¼öÀÇ ÀúÀå ¹æ¹ýÀ» ÁöÁ¤ÇÑ´Ù. ´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº, ±× ¿¹¿Í »çÀÌÁîÀÌ´Ù.
row_major half1x4 fh1By4; column_major half1x4 fh4By1; row_major half3x2 fh3By2; column_major half3x2 fh2By3; // matrix name constant register size // fh4By1 c620 4 // fh3By2 c624 3 // fh2By3 c627 2 // fh1By4 c636 1
ÀÌ·¯ÇÑ ÀúÀå ¹æ¹ýÀº, ÄÄÆÄÀÏ·¯ÀÇ pragma ¿¡¼µµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
#pragma PACK_MATRIX (ROW_MAJOR) #pragma PACK_MATRIX (COLUMN_MAJOR)
·¹Áö½ºÅ͸¦ »ç¿ëÇØ, ƯÁ¤ÀÇ Á¤¼ö¸¦ º¯¼ö¿Í °ü·ÃÁþµµ·Ï(µíÀÌ) ÁöÁ¤ÇÑ´Ù. ´ÙÀ½¿¡ ¿¹¸¦ ³ªÅ¸³½´Ù.
float4 vColor : register(vs_2_0, c14) ;
º¯¼ö vColor °¡ ·¹Áö½ºÅÍ c14 ¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ´Ù.
´ÙÀ½¿¡, ±× ¿ÜÀÇ ¿¹¸¦ ³ªÅ¸³½´Ù.
float4 vDisplace : register (c0); // puts the vDisplace constant into C0
À̰ÍÀº, ´ÙÀ½°ú °°Àº º¹ÀâÇÑ ½Ä¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
float4 vDisplace : register (c0)
ÀÌ ½ÄÀº, ¹öÀü 2.0 ÀÌ¿ÜÀÇ Çȼ¿ ¼ÎÀÌ´õ¿¡ ´ëÇØ, vDisplace Á¤¼ö¸¦ C0 ¿¡ ÀúÀå ÇÑ´Ù.
float4 vDisplace : register(vs, c10)
ÀÌ ½ÄÀº, ¸ðµç Á¤Á¡ ¼ÎÀÌ´õ¿¡ ´ëÇØ, vDisplace Á¤¼ö¸¦ C10 ¿¡ ÀúÀå ÇÑ´Ù.
float4 vDisplace : register(ps_2_0, c10)
ÀÌ ½ÄÀº, ¹öÀü 2.0 ÀÇ Çȼ¿ ¼ÎÀÌ´õ¿¡ ´ëÇØ, vDisplace Á¤¼ö¸¦ C10 ¿¡ ÀúÀå ÇÑ´Ù.
| Space |
| Tab |
| EOL |
| C Çü½ÄÀÇ ÄÚ¸àÆ® (/* */) |
| C++ Çü½ÄÀÇ ÄÚ¸àÆ® (//) |
| asm ºí·Ï (;) ³»ÀÇ ¾î¼Àºí¸® Çü½ÄÀÇ ÄÚ¸àÆ® |
digit-sequence exponent-part floating-suffix(opt)
digit-sequence(opt) . digit-sequence
digit-sequence .
e sign(opt) digit-sequence
E sign(opt) digit-sequence
+ -
digit
digit-sequence digit
h H f F
# (10 Áø¼ö)
0# (8 Áø¼ö)
0x# (16 Áø¼ö)
u U l L
| 'c' | (¹®ÀÚ) |
| '\a' '\b' '\f' '\b' '\r' '\t' '\v' | (À̽ºÄÉÀÌÇÁ) |
| '\###' | (8 Áø¼ö À̽ºÄÉÀÌÇÁ, °¢ # Àº 8 Áø¼ö) |
| '\x#' | (16 Áø¼ö À̽ºÄÉÀÌÇÁ. # (Àº)´Â 16 Áø¼ö. ÀÓÀÇÀÇ ¼öÀÇ ¼ýÀÚ) |
| '\c' | (c ´Â ´Ù¸¥ ¹®ÀÚ. backslash³ª ÀοëºÎÈ£µµ Æ÷ÇÔÇÑ´Ù) |
À̽ºÄÉÀÌÇÁ´Â ÇÁ¸®ÇÁ·Î¼¼¼½Ä¿¡¼´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.
"s" (s ´Â À̽ºÄÉÀÌÇÁ°¡ ºÙÀº ÀÓÀÇÀÇ Ä³¸¯ÅÍ ¶óÀÎ)
[A-Za-z_][A-Za-z0-9_]*
##, #@, ++, --, &&, ||, ==, ::, <<, <<=, >>, >>=, ..., <=, >=, !=, *=, /=, +=, -=, %=, &=, |=, ^=, ->
°Ô´Ù°¡ ±× ¿ÜÀÇ ±ÔÄ¢°ú ÀÏÄ¡ÇÏÁö ¾Ê¾Ò´Ù, ±× ¿ÜÀÇ ÀÓÀÇÀÇ ¹®ÀÚ.
ÇÁ·Î±×·¥ ¿É¼Ç
///////////////////////////////////////////////////
Program :
| Decls
;
///////////////////////////////////////////////////
Decls : Decl
| Decl Decls
;
///////////////////////////////////////////////////
Decl : TypeDecl
| VariableDecl
| VarStructDecl
| FunctionDecl
| TechniqueDecl
;
///////////////////////////////////////////////////
»ç¿ë ¹æ¹ý
///////////////////////////////////////////////////
Usages : Usage
| Usage Usages
;
///////////////////////////////////////////////////
Usage : T_KW_STATIC
| T_KW_UNIFORM
| T_KW_EXTERN
| T_KW_VOLATILE
| T_KW_INLINE
| T_KW_SHARED
| Target
;
///////////////////////////////////////////////////
UsageType : Type
| Usages Type
;
///////////////////////////////////////////////////
UsageStructDef : StructDef
| Usages StructDef
;
///////////////////////////////////////////////////
Çü
TypeDecl : T_KW_TYPEDEF Type TypeDefs ';'
| StructDef ';'
;
///////////////////////////////////////////////////
TypeDefs : VariableDim
| VariableDim ', ' TypeDefs
;
///////////////////////////////////////////////////
TypeDim : Type
| TypeDim '[' ConstantExpr ']'
;
///////////////////////////////////////////////////
Type : SimpleType
| T_KW_CONST SimpleType
;
///////////////////////////////////////////////////
SimpleType : BaseType
| Struct
| TypeId
;
///////////////////////////////////////////////////
BaseType : T_KW_VOID
| ScalarType
| VectorType
| MatrixType
| ObjectType
;
///////////////////////////////////////////////////
ScalarType : T_KW_BOOL
| T_KW_INT
| T_KW_HALF
| T_KW_FLOAT
| T_KW_DOUBLE
;
///////////////////////////////////////////////////
VectorType : T_KW_VECTOR
| T_KW_VECTOR '<' ScalarType ', ' AddExpr '>'
;
///////////////////////////////////////////////////
MatrixType : T_KW_VECTOR
| T_KW_VECTOR '<' ScalarType ', ' ConstantExpr ', ' AddExpr '>'
;
///////////////////////////////////////////////////
ObjectType : T_KW_STRING
| T_KW_TEXTURE
| T_KW_SAMPLER
| T_KW_PIXELSHADER
| T_KW_VERTEXSHADER
;
///////////////////////////////////////////////////
±¸Á¶Ã¼
///////////////////////////////////////////////////
Struct : T_KW_STRUCT StructStart StructEnd
| T_KW_STRUCT StructStart StructDecls StructEnd
;
///////////////////////////////////////////////////
StructDef : SimpleStructDef
| T_KW_CONST SimpleStructDef
;
///////////////////////////////////////////////////
SimpleStructDef : T_KW_STRUCT Id StructStart StructEnd
| T_KW_STRUCT Id StructStart StructDecls StructEnd
;
///////////////////////////////////////////////////
StructStart : '{'
;
///////////////////////////////////////////////////
StructDecls : VariableDecl
| VariableDecl StructDecls
;
///////////////////////////////////////////////////
StructEnd : '}'
;
///////////////////////////////////////////////////
ÄÚ¸àÆ®
///////////////////////////////////////////////////
Annotation : AnnotationStart AnnotationEnd
| AnnotationStart AnnotationDecls AnnotationEnd
;
///////////////////////////////////////////////////
AnnnotationStart : '{'
;
///////////////////////////////////////////////////
AnnotationDecls : VariableDecl
| VariableDecl AnnotationDecls
;
///////////////////////////////////////////////////
AnnotationEnd : '}'
;
///////////////////////////////////////////////////
º¯¼ö
///////////////////////////////////////////////////
VariableDecl : UsageType Variables ';'
;
///////////////////////////////////////////////////
VarStructDecl : UsageStructDef Variables ';'
;
///////////////////////////////////////////////////
Variables : Variable
| Variable ', ' Variables
;
///////////////////////////////////////////////////
Variable : VariableAnn
| VariableAnn '=' InitExpr
;
///////////////////////////////////////////////////
VariableAnn : VariableSem
| VariableSem Annotation
;
///////////////////////////////////////////////////
VariableSem : VariableDim
| VariableDim ':' Id
;
///////////////////////////////////////////////////
VariableDim : Id
| VariableDim '[' ConstantExpr ']'
;
///////////////////////////////////////////////////
ÇÔ¼ö
///////////////////////////////////////////////////
FunctionDecl : FunctionDef FunctionBody
;
///////////////////////////////////////////////////
FunctionDef : UsageType Id ParamList
| UsageType Id ParamList ':' Id
;
///////////////////////////////////////////////////
FunctionBody : ';'
| StmtBlock
;
///////////////////////////////////////////////////
ParamList : ParamListStart ParamListEnd
| ParamListStart T_KW_VOID ParamListEnd
| ParamListStart ParameterDecls ParamListEnd
;
///////////////////////////////////////////////////
ParamListStart : '('
;
///////////////////////////////////////////////////
ParamListEnd : ')'
;
///////////////////////////////////////////////////
ParameterDecls : ParameterDecl
| ParameterDecl ', ' ParameterDecls
;
///////////////////////////////////////////////////
ParameterDecl : ParamUsageType Variable
;
///////////////////////////////////////////////////
ParamUsageType : Type
: ParamUsages Type
;
///////////////////////////////////////////////////
ParamUsages : ParamUsage
: ParamUsage ParamUsages
;
///////////////////////////////////////////////////
ParamUsages : T_KW_IN
: T_KW_OUT
: T_KW_INOUT
: T_KW_UNIFORM
;
///////////////////////////////////////////////////
Å×Å©´Ð
///////////////////////////////////////////////////
TechniqueDecl : T_KW_TECHNIQUE TechniqueBegin TechniqueEnd
| T_KW_TECHNIQUE Id TechniqueBegin TechniqueEnd
;
///////////////////////////////////////////////////
TechniqueBegin : '{'
;
///////////////////////////////////////////////////
TechniqueEnd : '}'
| Passes '}'
;
///////////////////////////////////////////////////
Passes : Pass
| Pass Passes
;
///////////////////////////////////////////////////
Pass : T_KW_PASS PassBegin PassEnd
| T_KW_PASS Id PassBegin PassEnd
| VariableDecl
;
///////////////////////////////////////////////////
PassBegin : '{'
;
///////////////////////////////////////////////////
PassEnd : '}'
| States '}'
;
///////////////////////////////////////////////////
States : State
| State States
;
///////////////////////////////////////////////////
State : Id StateExprBegin StateExpr StateExprEnd
| Id '[' Uint ']' StateExprBegin StateExpr StateExprEnd
;
///////////////////////////////////////////////////
StateExprBegin : '='
;
///////////////////////////////////////////////////
StateExprEnd : DwordExpr ';'
;
///////////////////////////////////////////////////
¹®
SimpleStmt : ';'
| Expr ';'
| T_KW_RETURN ';'
| T_KW_RETURN Expr ';'
| T_KW_DO Stmt T_KW_WHILE '(' Expr ')' ';'
| StmtBlock
;
///////////////////////////////////////////////////
NonIfStmt : SimpleStmt
| T_KW_WHILE '(' Expr ')' NonIfStmt
| T_KW_FOR '(' ForInit ForCond ForStep ')' NonIfStmt
;
///////////////////////////////////////////////////
Stmt : SimpleStmt
| T_KW_WHILE '(' Expr ')' Stmt
| T_KW_FOR '(' ForInit ForCond ForStep ')' Stmt
| T_KW_IF '(' Expr ')' Stmt
| T_KW_IF '(' Expr ')' NonIfStmt T_KW_ELSE Stmt
;
///////////////////////////////////////////////////
ForInit : ';'
| Expr ';'
| VariableDecl
;
///////////////////////////////////////////////////
ForCond : ';'
| Expr ';'
;
///////////////////////////////////////////////////
ForStep :
| Expr
;
///////////////////////////////////////////////////
DeclStmt : TypeDecl
| VariableDecl
| VarStructDecl
| Stmt
;
///////////////////////////////////////////////////
DeclStmts : DeclStmt
| DeclStmt DeclStmts
;
///////////////////////////////////////////////////
StmtBlock : StmtBlockStart StmtBlockEnd
| StmtBlockStart DeclStmts StmtBlockEnd
;
///////////////////////////////////////////////////
StmtBlockStart : '{'
;
///////////////////////////////////////////////////
StmtBlockEnd : '}'
;
///////////////////////////////////////////////////
½Ä
///////////////////////////////////////////////////
DwordExpr : Dword
| Dword '|' DwordExpr
;
///////////////////////////////////////////////////
StateExpr : DwordExpr
| ComplexExpr
| '{' InitExprs '}'
| '<' RelationalExpr '>'
;
///////////////////////////////////////////////////
SimpleExpr : T_KW_TRUE
| T_KW_FALSE
| UINT
| Float
| String
| NonTypeId
;
///////////////////////////////////////////////////
ComplexExpr : '(' Expr ')'
| TypeId '(' ArgumentExprs ')'
| BaseType '(' ArgumentExprs ')'
| NonTypeId '(' ArgumentExprs ')'
| Asm
| AsmDecl
| AsmDecl Asm
| T_KW_COMPILE Target NonTypeId '(' ArgumentExpr ')'
;
///////////////////////////////////////////////////
Primary : SimpleExpr
| ComplexExpr
;
///////////////////////////////////////////////////
PostfixExpr : PrimaryExpr
| PostfixExpr '[' Expr ']'
| PostfixExpr '. ' Id
| PostfixExpr T_OP_INC
| PostfixExpr T_OP_DEC
;
///////////////////////////////////////////////////
UnaryExpr : PostfixExpr
| T_OP_INC UnaryExpr
| T_OP_DEC UnaryExpr
| '! ' CastExpr
| '-' CastExpr
| '+' CastExpr
;
///////////////////////////////////////////////////
CastExpr : UnaryExpr
| '(' TypeDim ')' CastExpr
;
///////////////////////////////////////////////////
MulExpr : CastExpr
| MulExpr '*' CastExpr
| MulExpr '/' CastExpr
| MulExpr '%' CastExpr
;
///////////////////////////////////////////////////
AddExpr : MulExpr
| AddExpr '+' MulExpr
| AddExpr '-' MulExpr
;
///////////////////////////////////////////////////
RelationalExpr : AddExpr
| RelationalExpr '<' AddExpr
| RelationalExpr '>' AddExpr
| RelationalExpr T_OP_LE AddExpr
| RelationalExpr T_OP_GE AddExpr
;
///////////////////////////////////////////////////
EqualityExpr : RelationalExpr
| EqualityExpr T_OP_EQ RelationalExpr
| EqualityExpr T_OP_NE RelationalExpr
;
///////////////////////////////////////////////////
AndExpr : EqualityExpr
| AndExpr T_OP_AND EqualityExpr
;
///////////////////////////////////////////////////
OrExpr : AndExpr
| OrExpr T_OP_OR AndExpr
;
///////////////////////////////////////////////////
AssignmentExpr : OrExpr
| CastExpr '=' AssignmentExpr
| CastExpr T_OP_ME AssignmentExpr
| CastExpr T_OP_DE AssignmentExpr
| CastExpr T_OP_RE AssignmentExpr
| CastExpr T_OP_AE AssignmentExpr
| CastExpr T_OP_SE AssignmentExpr
;
///////////////////////////////////////////////////
ConditionalExpr : AssignmentExpr
| AssignmentExpr '? ' AssignmentExpr ':' ConditionalExpr
;
///////////////////////////////////////////////////
ArgumentExprs : ConditionalExpr
| ConditionalExpr ', ' ArgumentExprs
;
///////////////////////////////////////////////////
ArgumentExpr : ArgumentExpr
;
///////////////////////////////////////////////////
ArgumentExprs : ArgumentExpr
;
///////////////////////////////////////////////////
InitExpr : ConditionalExpr
| '{' InitExprs '}'
;
///////////////////////////////////////////////////
InitExprs : InitExpr
| InitExpr ', ' InitExprs
;
///////////////////////////////////////////////////
ConstantExpr : ConditionalExpr
;
///////////////////////////////////////////////////
Expr : ConditionalExpr
| ConditionalExpr ', ' Expr
;
///////////////////////////////////////////////////
ÅäÅ«
///////////////////////////////////////////////////
Dword : Uint
| '-' Uint
| Float
| '-' Float
| DwordId
| Uint DwordId
;
///////////////////////////////////////////////////
DwordId : Id
| T_KW_TRUE
| T_KW_FALSE
| T_KW_TEXTURE
;
///////////////////////////////////////////////////
Id : TypeId
| NonTypeId
;
///////////////////////////////////////////////////
Target : NonTypeId
;
///////////////////////////////////////////////////
Uint : T_UINT
| T_INT32
| T_UINT32
;
///////////////////////////////////////////////////
Float : T_FLOAT
| T_FLOAT16
| T_FLOAT32
| T_FLOAT64
;
///////////////////////////////////////////////////
String : T_STRING
;
///////////////////////////////////////////////////
TypeId : T_TYPE_ID
;
///////////////////////////////////////////////////
NonTypeId : T_NON_TYPE_ID
;
///////////////////////////////////////////////////
Asm : T_KW_ASM '{'
;
///////////////////////////////////////////////////
AsmDecl : T_KW_DECL '{'
;
///////////////////////////////////////////////////