DirectX Graphics ·¹ÆÛ·±½º ¼ÎÀÌ´õ ·¹ÆÛ·±½º »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î   [¸ñÂ÷¿­¶÷] [ÁÖ¼Òº¹»ç] [½½·Ôºñ¿ì±â]
»óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î
 
Microsoft DirectX 9.0

»óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î


¼ÎÀÌ´õ¸¦ ¾î¼Àºí¸® ¾ð¾î·Î ±â¼úÇÏ´Â °ÍÀÌ Å« ÀÏÀÎ ¶§´Â, »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î (HLSL: High Level Shader Language)¸¦ »ç¿ëÇØ º¸¸é ÁÁ´Ù. Microsoft® DirectX® 9.0 ¿¡´Â »óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾îÀÇ ÃÖÃÊÀÇ ¸±¸®½º°¡ Æ÷ÇԵǾî ÀÖ¾î C ¸¦ ´àÀº °í±Þ¾ð¾î·Î ¼ÎÀÌ´õ¸¦ °³¹ß ¹× µð¹ö±× ÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº, DirectX 8.0 À¸·ÎºÎÅÍ Àåºñ µÈ Á¤Á¡ ¼ÎÀÌ´õ, Çȼ¿ ¼ÎÀÌ´õ, ÀÌÆåÆ®ÀÇ »ý¼º¿¡ »ç¿ëÇÏ´Â ¼ÎÀÌ´õÀÇ ¾î¼Àºí¸® ¾ð¾îÀÇ ¼ÎÀÌ´õ ±â´É°ú´Â ´Ù¸¥ Ãß°¡ ±â´ÉÀÌ´Ù.

»óÀ§ ·¹º§ ¼ÎÀÌ´õ ¾ð¾î¿¡¼­´Â, C ¸¦ ´àÀº ÇÔ¼ö·ÎºÎÅÍÀÇ ¼ÎÀÌ´õ °³¹ßÀ» Áö¿ø Çϰí ÀÖ´Ù. ÀÌ ¾ð¾î´Â, ÇÔ¼ö, ½Ä, ¹®Àå, Ç¥ÁØ µ¥ÀÌÅÍÇü, »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍÇü, ÇÁ¸®ÇÁ·Î¼¼¼­ Áö½Ã¹® µî, ¸¹Àº Ç¥ÁØÀûÀÎ ¾ð¾î ±â´ÉÀ» ÇâÈÄ Áö¿ø ÇÑ´Ù.

µ¥ÀÌÅÍÇü

½ºÄ®¶ó-ÇüÅÂ

boolTRUE ¶Ç´Â FALSE
int32 ºñÆ® ºÎÈ£ ÷ºÎ Á¤¼ö
half16 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª
float32 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª
double64 ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)°ª

¸ðµç Ÿ°Ù Ç÷§ÆûÀÌ Á¤¼ö°ªÀ» ³×ÀÌÆ¼ºê·Î Áö¿ø Çϰí ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Á¤¼ö°ªÀº, ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)¿ë Çϵå¿þ¾î¸¦ »ç¿ëÇØ ¿¡¹Ä·¹ÀÌÆ® ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ´Ù. ÀÌ·¯ÇÑ Ç÷§Æû»ó¿¡¼­, Á¤¼öÀÇ ¹üÀ§¸¦ ³Ñ¾î ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)·Î¼­ ³ªÅ¸³»Áú °¡´É¼ºÀÌ ÀÖ´Â Á¤¼ö ¿¬»êÀº, ¿¹Ãø´ë·Î µ¿ÀÛ ÇÏ¸é ¸»ÇÏ´Â º¸ÁõÀº ¾ø´Ù.

¸ðµç Ÿ°Ù Ç÷§ÆûÀÌ half °ª ¶Ç´Â double °ªÀ» ³×ÀÌÆ¼ºê·Î Áö¿ø Çϰí ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Ÿ°Ù Ç÷§ÆûÀÌ Áö¿ø Çϰí ÀÖÁö ¾Ê´Â °æ¿ì, ÀÌ·¯ÇÑ °ªÀº ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö) (float)¸¦ »ç¿ëÇØ ¿¡¹Ä·¹ÀÌÆ® µÈ´Ù. ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)½ÄÀÇ Áß°£ °á°ú´Â, ¿ÀÆÛ·£µå³ª °á°úº¸´Ù °íÁ¤¹Ðµµ·Î Æò°¡µÈ´Ù.

º¤ÅÍÇü

vector4D ÀÇ º¤ÅÍ. °¢ ¼ººÐÀº, 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 µîÀÌ´Ù. ¿¬°áÇÏ´Â À̸§Àº ¸ðµÎ, °°Àº À̸§ ¼¼Æ®ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â °Í. °°Àº ¼ººÐÀº ¿©·¯ Â÷·Ê ¹Ýº¹ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ±× °æ¿ì, ±³Ã¼´Â ÇÒ´çÀÇ Å¸°ÙÀ¸·Î¼­´Â ¹«È¿ÀÌ´Ù.

Çà·ÄÇü

matrix4 Çà 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 ÀÌ´Ù. ¿¬°áÇÏ´Â À̸§Àº ¸ðµÎ, °°Àº À̸§ ¼¼Æ®ÀÇ À̸§À» ÁöÁ¤ÇÏ´Â °Í. °°Àº ¼ººÐÀº ¿©·¯ Â÷·Ê ¹Ýº¹ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, ±× °æ¿ì, ±³Ã¼´Â ÇÒ´çÀÇ Å¸°ÙÀ¸·Î¼­´Â ¹«È¿ÀÌ´Ù.

°³Ã¼Çü

string

ASCII ij¸¯ÅÍ ¶óÀÎÇü. ij¸¯ÅÍ ¶óÀÎÀ» ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀ̳ª ½ºÅ×ÀÌÆ®´Â ¾ø´Ù. ´Ù¸¸, ij¸¯ÅÍ ¶óÀÎ Àμö¿Í ÄÚ¸àÆ®´Â, ¾ÖÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅÍ ID3DXEffect ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.

pixelshader

Çȼ¿ ¼ÎÀÌ´õ (pixelshader) °³Ã¼´Â, Microsoft Direct3D® Çȼ¿ ¼ÎÀÌ´õ °³Ã¼¸¦ ³ªÅ¸³½´Ù. ¼ÎÀÌ´õ ÇÔ¼ö³»ÀÇ ¿¬»êÀ¸·Î, Çȼ¿ ¼ÎÀÌ´õ¸¦ Á÷Á¢ ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀº ¾øÁö¸¸, Å×Å©´Ð³»·ÎºÎÅÍ Çȼ¿ ¼ÎÀÌ´õ¿¡ ÀåÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¼Ó¼ºÀº, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, Çȼ¿ ¼ÎÀÌ´õ °³Ã¼·ÎºÎÅÍ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.

const string version;

¸®ÅÍ·² Çȼ¿ ¼ÎÀÌ´õ°ªÀº, ¾î¼Àºí¸® ºí·ÏÀ¸·Î¼­ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.

pixelshader ps = asm { ps. 2.0 mov oC0, c0 };			

¶Ç´Â, ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ È£Ãâ·Î¼­ÀÇ Ç¥Çöµµ °¡´ÉÇÏ´Ù.

pixelshader ps = compile ps_2_0 psmain();	

sampler

»ùÇ÷¯ (sampler) °³Ã¼´Â, Direct3D »ùÇ÷¯ ½ºÅ×ÀÌÁö¸¦ ³ªÅ¸³½´Ù. »ùÇ÷¯ ½ºÅ×ÀÌÁö¸¦ »ç¿ëÇØ, ÅØ½ºÃ³¸¦ »ùÇøµ ÇÑ´Ù. »ùÇ÷¯¿¡´Â, ÅØ½ºÃ³ ŸÀÔ ¹× ÇÊÅ͸µ ŸÀÔÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù.

sampler s = sampler_state { texture = NULL; mipfilter = LINEAR; };

texture

ÅØ½ºÃ³ (texture) °³Ã¼´Â, Direct3D ÅØ½ºÃ³ °³Ã¼¸¦ ³ªÅ¸³½´Ù. ¼ÎÀÌ´õ ÇÔ¼ö³»ÀÇ ¿¬»êÀ¸·Î, ÅØ½ºÃ³¸¦ Á÷Á¢ ¹Þ¾ÆµéÀÌ´Â ¿¬»êÀº ¾øÁö¸¸, Å×Å©´Ð³»·ÎºÎÅÍ ÅØ½ºÃ³¿¡ ÀåÄ¡¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ¼Ó¼ºÀº, ±¸Á¶Ã¼ ¸â¹ö ¾×¼¼½º ±¸¹®À» »ç¿ëÇØ, ÅØ½ºÃ³ °³Ã¼·ÎºÎÅÍ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ´Ù.

const string type;	const string format;
const int width;
const int height;
const int depth;			

vertexshader

Á¤Á¡ ¼ÎÀÌ´õ (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 vector VECTOR;
	typedef matrix MATRIX;
	typedef string STRING;
	typedef texture TEXTURE;
	typedef pixelshader PIXELSHADER;
	typedef vertexshader VERTEXSHADER;

ÆíÀÇ»ó, ´ÙÀ½ÀÇ ÇüÅ´ ÀÚµ¿ÀûÀ¸·Î ½´ÆÛ ±Û·Î¹ú ½ºÄÚÇÁ·Î Á¤ÀǵȴÙ(ÀÌ·¯ÇÑ Á¤ÀÇ¿¡¼­´Â, »þÇÁ ±âÈ£´Â 1 ~ 4 ÀÇ ¼ýÀÚ¸¦ ³ªÅ¸³½´Ù).

	typedef vector bool#;
	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¶ó°í º¸¿©Áø´Ù. ÀÌ ÇÔ¼ö´Â, ÈÄÀÇ ÄÚµå·Î º»Ã¼¸¦ ºÙ¿© ÀçÁ¤ÀÇÇÒ Çʿ䰡 ÀÖ´Ù. º»Ã¼°¡ Á¤ÀǵÇÁö ¾ÊÀº ÇÔ¼ö¸¦ ÂüÁ¶ Çϸé, ¿¡·¯°¡ µÈ´Ù.

ÇÔ¼ö´Â, ´ÙÁß Á¤ÀÇ ÇÒ ¼ö ÀÖ´Ù. ÇÔ¼ö´Â, ±× À̸§, ÀμöÀÇ ÇüÅÂ, Ÿ°Ù Ç÷§Æû (ÁöÁ¤µÇ°í ÀÖ´Â °æ¿ì)¿¡ ÀÇÇØ ÀÏÀÇ¿¡ ½Äº°µÈ´Ù. ÇÔ¼öÀÇ ´ÙÁß Á¤ÀÇ´Â, ¾ÆÁ÷ 󸮵ÇÁö ¾Ê´Ù.

Çö½ÃÁ¡¿¡¼­´Â, ¸ðµç ÇÔ¼ö°¡ ÀÎ ¶óÀÎÀÌ´Ù. Àç±Í´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.

ÆíÀÔ ÇÔ¼ö

absvalue abs(value a)Àý´ëÄ¡ (¼ººÐ¸¶´Ù).
acosacos(x)x ÀÇ °¢ ¼ººÐÀÇ ¿ªÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. °¢ ¼ººÐÀº,[-1, 1] ÀÇ ¹üÀ§·Î ÇÑ´Ù.
allall(x)x ÀÇ ¸ðµç ¼ººÐÀÌ 0 ÀÌ¿ÜÀÇ °ªÀÎÁö ¾Æ´ÑÁö¸¦ Å×½ºÆ®ÇÑ´Ù.
anyany(x)x ÀÇ ¸î°³ÀÇ ¼ººÐÀÌ 0 ÀÌ¿ÜÀÇ °ªÀÎÁö ¾Æ´ÑÁö¸¦ Å×½ºÆ®ÇÑ´Ù.
asinasin(x)x ÀÇ °¢ ¼ººÐÀÇ ¿ªÁ¤ÇöÀ» µ¹·ÁÁØ´Ù. °¢ ¼ººÐÀº,[-pi/2, pi/2] ÀÇ ¹üÀ§·Î ÇÑ´Ù.
atanatan(x)x ÀÇ °¢ ¼ººÐÀÇ ¿ªÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. ¹Ýȯ°ªÀº,[-pi/2, pi/2] ÀÇ ¹üÀ§ÀÌ´Ù.
atan2atan2(y, x)y/x ÀÇ ¿ªÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù. y ¿Í x ÀÇ ºÎÈ£¸¦ »ç¿ëÇØ [-pi, pi] ÀÇ ¹üÀ§¿¡ ÀÖ´Â ¹Ýȯ°ªÀÇ »óÇÑÀ» ÆÇ´ÜÇÑ´Ù. atan2 ´Â, x °¡ 0 À¸·Î µ¿ÀÏÇϰí, y °¡ 0 À¸·Î µ¿ÀÏÇÏÁö ¾ÊÀº °æ¿ì¿¡¼­µµ, ¿øÁ¡ ÀÌ¿ÜÀÇ °¢ Á¡¿¡ ´ëÇØ¼­ ÃæºÐÈ÷ Á¤Àǵǰí ÀÖ´Ù.
ceilceil(x)x ÀÌ»óÀÇ ÃÖ¼ÒÀÇ Á¤¼ö¸¦ µ¹·ÁÁØ´Ù.
clampclamp(x, min, max)x ¸¦ [min, max] ÀÇ ¹üÀ§¿¡ Á¦ÇÑÇÑ´Ù.
clipclip(x)x ÀÇ ¸î°³ÀÇ ¼ººÐÀÌ 0 º¸´Ù ÀÛÀº °æ¿ì, ÇöÀçÀÇ Çȼ¿À» ÆÄ±âÇÑ´Ù. x ÀÇ °¢ ¼ººÐÀÌ ¸éÀ¸·ÎºÎÅÍÀÇ °Å¸®¸¦ ³ªÅ¸³»´Â °æ¿ì, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇØ, Ŭ¸³¸éÀ» ½Ã¹Ä·¹ÀÌ¼Ç ÇÑ´Ù.
coscos(x)x ÀÇ ÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù.
coshcosh(x)x ÀÇ ½Ö°îÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù.
crosscross(a, b)2 °³ÀÇ 3D º¤ÅÍ a ¿Í b ÀÇ ¿ÜÀûÀ» µ¹·ÁÁØ´Ù.
D3DCOLORtoUBYTE4D3DCOLORtoUBYTE4(x)4D º¤ÅÍ x ÀÇ ¼ººÐÀ» ±³Ã¼ ¹× ½ºÄÉÀϸµ ÇØ, ÀϺΠÇϵå¿þ¾î¿¡ ÀÖ´Â UBYTE4 Áö¿øÀÇ ºÎÁ·À» º¸Á¤ÇÑ´Ù.
ddxddx(x)½ºÅ©¸° °ø°£ÀÇ x ÁÂÇ¥¿¡ ´ëÇØ, x ÀÇ Æí¹ÌºÐÀ» µ¹·ÁÁØ´Ù.
ddyddy(x)½ºÅ©¸° °ø°£ÀÇ y ÁÂÇ¥¿¡ ´ëÇØ, x ÀÇ Æí¹ÌºÐÀ» µ¹·ÁÁØ´Ù.
degreesdegrees(x)x ¸¦ ¶óµð¾È ´ÜÀ§·ÎºÎÅÍ µµ¼ö·Î º¯È¯ÇÑ´Ù.
determinantdeterminant(m)¼­¹æ Çà·Ä m ÀÇ Çà·Ä½ÄÀ» µ¹·ÁÁØ´Ù.
distancedistance(a, b)2 °³ÀÇ Á¡ a ¿Í b °£ÀÇ °Å¸®¸¦ µ¹·ÁÁØ´Ù.
dotdot(a, b)2 °³ÀÇ º¤ÅÍ a ¿Í b ÀÇ ³»ÀûÀ» µ¹·ÁÁØ´Ù.
expexp(x)e ¸¦ ¹Ù´ÚÀ¸·Î ÇÏ´Â Áö¼ö ex ¸¦ µ¹·ÁÁØ´Ù.
exp2value exp2(value a)2 ¸¦ ¹Ù´ÚÀ¸·Î ÇÏ´Â Áö¼ö (¼ººÐ¸¶´Ù).
faceforwardfaceforward(n, i, ng)-n * sign(dot(i, ng))¸¦ µ¹·ÁÁØ´Ù.
floorfloor(x)x ÀÌÇÏÀÇ ÃÖ´ëÀÇ Á¤¼ö¸¦ µ¹·ÁÁØ´Ù.
fmodfmod(a, b)a = i * b + f °¡ µÇ´Â °Í °°Àº, a / b ÀÇ ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)ÀÇ À׿© f ¸¦ µ¹·ÁÁØ´Ù. ¿©±â¼­, i ´Â Á¤¼ö, f ´Â x ¿Í ºÎÈ£°¡ °°¾Æ, ±× Àý´ëÄ¡´Â b ÀÇ Àý´ëÄ¡º¸´Ù ÀÛ´Ù.
fracfrac(x)f °¡ 0 º¸´Ù Å©°í, 1 º¸´Ù ÀÛÀº °ªÀÌ µÇ´Â °Í °°Àº, x ÀÇ ¼Ò¼öºÎ f ¸¦ µ¹·ÁÁØ´Ù.
frcvalue frc(value a)¼Ò¼öºÎ (¼ººÐ¸¶´Ù).
frexpfrexp(x, out exp)x ÀÇ °¡¼ö¿Í Áö¼ö¸¦ µ¹·ÁÁØ´Ù. frexp ´Â °¡¼ö¸¦ µ¹·ÁÁÖ¾î, Áö¼ö´Â Ãâ·Â Àμö exp ¿¡ ÀúÀå µÈ´Ù. x °¡ 0 ÀÇ °æ¿ì, ÇÔ¼ö´Â °¡¼ö¿Í Áö¼öÀÇ ¾çÂÊ ¸ðµÎ¿¡ 0 À» µ¹·ÁÁØ´Ù.
fwidthfwidth(x)abs(ddx(x)) +abs(ddy(x))¸¦ µ¹·ÁÁØ´Ù.
isfiniteisfinite(x)x °¡ À¯ÇÑÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù.
isinfisinf(x)x °¡ +INF ³ª -INF ÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù.
isnanisnan(x)x °¡ NAN ³ª QNAN ÀÇ °æ¿ì´Â TRUE ¸¦ µ¹·ÁÁØ´Ù. ±× ÀÌ¿ÜÀÇ °æ¿ì´Â FALSE ¸¦ µ¹·ÁÁØ´Ù.
ldexpldexp(x, exp)x * 2exp ¸¦ µ¹·ÁÁØ´Ù.
lenfloat len(value a)º¤ÅÍÀÇ ±æÀÌ.
lengthlength(v)º¤ÅÍ v ÀÇ ±æÀ̸¦ µ¹·ÁÁØ´Ù.
lerplerp(a, b, s)a + s(b - a)¸¦ µ¹·ÁÁØ´Ù. ÀÌ ÇÔ¼ö´Â, s °¡ 0 ÀÇ °æ¿ì´Â a ¸¦ µ¹·ÁÁÖ¾î, 1 ÀÇ °æ¿ì´Â b ¸¦ µ¹·ÁÁÖµµ·Ï, a ¿Í b ÀÇ »çÀ̸¦ ¼±Çü º¸°£ ÇÑ´Ù.
litlit(ndotl, ndoth, m)Á¶¸íÀÇ º¤ÅÍ (¾Úºñ¾ðÆ®, µðÇ»Áî, ½ºÆåÅ¥·¯, 1)¸¦ µ¹·ÁÁØ´Ù. ¾Úºñ¾ðÆ® = 1; µðÇ»Áî = (ndotl < 0) ? 0 : ndotl; ½ºÆåÅ¥·¯ = (ndotl < 0) || (ndoth < 0) ? 0 : (ndoth * m);
loglog(x)x ÀÇ, ¹Ù´ÚÀÌ e ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù.
log10log10(x)x ÀÇ, ¹Ù´ÚÀÌ 10 ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù.
log2log2(x)x ÀÇ, ¹Ù´ÚÀÌ 2 ÀÇ ÀÚ¿¬´ë¼ö¸¦ µ¹·ÁÁØ´Ù. x °¡ ºÎÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â ¹«ÇÑÀ» µ¹·ÁÁØ´Ù. x °¡ 0 ÀÇ °æ¿ì, +INF ¸¦ µ¹·ÁÁØ´Ù.
maxmax(a, b)a ¿Í b ÀÇ Å« (ºÐ)ÆíÀ» ¼±ÅÃÇÑ´Ù.
minmin(a, b)a ¿Í b °¡ ÀÛÀº (ºÐ)ÆíÀ» ¼±ÅÃÇÑ´Ù.
modfmodf(x, out ip)°ª x ¸¦, °¢°¢ÀÌ x ¿Í °°Àº ºÎÈ£¸¦ °¡Áø ¼Ò¼öºÎ¿Í Á¤¼öºÎ·Î ³ª´«´Ù. x ÀÇ ºÎÈ£ ÷ºÎ ¼Ò¼öºÎ°¡ ¹ÝȯµÈ´Ù. Á¤¼öºÎ´Â Ãâ·Â Àμö ip ¿¡ ÀúÀå µÈ´Ù.
mulmul(a, b)a ¿Í b ÀÇ »çÀÌÀÇ Çà·Ä °ö¼ÀÀ» ½ÇÇàÇÑ´Ù. a °¡ º¤ÅÍÀÇ °æ¿ì, Çà º¤Åͷμ­ ó¸®ÇÑ´Ù. b °¡ º¤ÅÍÀÇ °æ¿ì, ¿­·Î¼­ ó¸®ÇÑ´Ù. ³»ºÎ ³ÐÀÌÀÇ a ¿­°ú b ÇàÀº µ¿ÀÏÇØ¾ß ÇÑ´Ù. a Çà x b ¿­ÀÇ ³ÐÀ̸¦ ¾òÀ» ¼ö ÀÖ´Ù.
noisenoise(x)󸮵ÇÁö ¾Ê´Ù.
normalizenormalize(v)Á¤±ÔÈ­µÈ º¤ÅÍ v / length(v)¸¦ µ¹·ÁÁØ´Ù. v ÀÇ ±æÀ̰¡ 0 ÀÇ °æ¿ì, °á°ú´Â ¹«ÇÑÀÌ µÈ´Ù.
powpow(x, y)xy ¸¦ µ¹·ÁÁØ´Ù.
radiansradians(x)x ¸¦ µµ¼ö·ÎºÎÅÍ ¶óµð¾È ´ÜÀ§·Î º¯È¯ÇÑ´Ù.
reflectreflect(i, n)ÀÔ»ç ¹æÇâ i, Ç¥¸é ¹ý¼± n ·Î ÇßÀ» °æ¿ìÀÇ, v = i - 2 * dot(i, n) * n ¿¡ ÀÇÇØ ±¸ÇÒ ¼ö ÀÖ´Â, ¹Ý»ç º¤ÅÍ v ¸¦ µ¹·ÁÁØ´Ù.
refractrefract(i, n, eta)ÀÔ»ç ¹æÇâ i, Ç¥¸é ¹ý¼± n, ±¼Àý eta ÀÇ »ó´ë À妽º°¡ ÁÖ¾îÁ³À» °æ¿ìÀÇ, ±¼Àý º¤ÅÍ v ¸¦ µ¹·ÁÁØ´Ù. i ¿Í n ÀÇ »çÀÌÀÇ ÀԻ簢ÀÌ ÁöÁ¤µÈ eta º¸´Ù ³Ê¹« Å©¸é (0,0,0)¸¦ µ¹·ÁÁØ´Ù.
roundround(x)x ¸¦ °¡Àå °¡±î¿î Á¤¼ö¿¡ ¸»´Ù.
rsqrtrsqrt(x)1 / sqrt(x)¸¦ µ¹·ÁÁØ´Ù.
saturatesaturate(x)x ¸¦ [0, 1] ÀÇ ¹üÀ§¿¡ Á¦ÇÑÇÑ´Ù.
signsign(x)x ÀÇ ºÎÈ£¸¦ ¿ä±¸ÇÑ´Ù. x °¡ 0 º¸´Ù ÀÛÀº °æ¿ì´Â -1, 0 À¸·Î µ¿ÀÏÇÑ °æ¿ì´Â 0, 0 º¸´Ù Å« °æ¿ì´Â 1 À» µ¹·ÁÁØ´Ù.
sinsin(x)x ÀÇ Á¤ÇöÀ» µ¹·ÁÁØ´Ù.
sincossincos(x, out s, out c)x ÀÇ Á¤Çö°ú ÄÚ»çÀÎÀ» µ¹·ÁÁØ´Ù. sin(x)´Â Ãâ·Â Àμö s ¿¡ ÀúÀå µÇ¾î cos(x)´Â Ãâ·Â Àμö c ¿¡ ÀúÀå µÈ´Ù.
sinhsinh(x)x ÀÇ ½Ö°îÁ¤ÇöÀ» µ¹·ÁÁØ´Ù.
smoothstepsmoothstep(min, max, x)x < min ÀÇ °æ¿ì´Â 0 À» µ¹·ÁÁØ´Ù. x > max ÀÇ °æ¿ì´Â 1 À» µ¹·ÁÁØ´Ù. x °¡ [min, max] ÀÇ ¹üÀ§³»À̸é, 0 À¸·Î 1 ÀÇ »çÀÌÀÇ ¸Å²ô·¯¿î ¿¡¸£¹ÌÆ® º¸°£À» µ¹·ÁÁØ´Ù.
sqrtvalue sqrt(value a)Á¦°ö±Ù (¼ººÐ¸¶´Ù).
stepstep(a, x)(x >= a) ? 1 : 0 À» µ¹·ÁÁØ´Ù.
tantan(x) x ÀÇ ÅºÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù.
tanhtanh(x)x ÀÇ ½Ö°îźÁ¨Æ®¸¦ µ¹·ÁÁØ´Ù.
tex1Dtex1D(s, t)1D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â ½ºÄ®¶ó-.
tex1Dtex1D(s, t, ddx, ddy)¹ÌºÐÀ» ÁöÁ¤ÇÑ, 1D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t, ddx, ddy ´Â ½ºÄ®¶ó-.
tex1Dprojtex1Dproj(s, t)1D ÀÇ Åõ¿µ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù.
tex1Dbiastex1Dbias(s, t)1D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler1D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù.
tex2Dtex2D(s, t)2D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 2D ÅØ½ºÃ³ ÁÂÇ¥.
tex2Dtex2D(s, t, ddx, ddy)¹ÌºÐÀ» ÁöÁ¤ÇÑ, 2D ÀÇ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t, ddx, ddy ´Â 2D º¤ÅÍ.
tex2Dprojtex2Dproj(s, t)2D ÀÇ Åõ¿µ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù.
tex2Dbiastex2Dbias(s, t)2D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler2D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù.
tex3Dtex3D(s, t)3D ÀÇ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 3D ÅØ½ºÃ³ ÁÂÇ¥.
tex3Dtex3D(s, t, ddx, ddy)¹ÌºÐÀ» ÁöÁ¤ÇÑ, 3D ÀÇ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t, ddx, ddy ´Â 3D º¤ÅÍ.
tex3Dprojtex3Dproj(s, t)3D ÀÇ Åõ¿µ º¼·ý ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù.
tex3Dbiastex3Dbias(s, t)3D ÀÇ ¹ÙÀ̾ ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â sampler3D °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù.
texCUBEtexCUBE(s, t)3D ÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 3D ÅØ½ºÃ³ ÁÂÇ¥.
texCUBEtexCUBE(s, t, ddx, ddy)¹ÌºÐÀ» ÁöÁ¤ÇÑ, 3D ÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t, ddx, ddy ´Â 3D º¤ÅÍ.
texCUBEprojtexCUBEproj(s, t)3D Åõ¿µÀÇ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 4D º¤ÅÍ. t ´Â, ÂüÁ¶°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ¼ººÐÀ¸·Î ³ª´°¼À µÈ´Ù.
texCUBEbiastexCUBEbias(s, t)3D ÀÇ ¹ÙÀ̾ Å¥ºê ÅØ½ºÃ³ ÂüÁ¶. s ´Â »ùÇ÷¯ ¶Ç´Â samplerCUBE °³Ã¼. t ´Â 4D º¤ÅÍ. ÂüÁ¶¸¦ ½ÇÇàÇϱâ Àü¿¡, ¹Ó·¹º§¿¡ t.w ÀÇ ¹ÙÀ̾¸¦ °ÉÄ¥ ¼ö ÀÖ´Ù.
transposetranspose(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.

¿¹

±×·ÎÀÇ ¿¹

¡¸±×·ÎÀÇ Àû¿ë¡¹À» ÂüÁ¶ÇÒ°Í.

À妽º ÷ºÎÀÇ ºí·»µå µÈ ij¸¯ÅÍ ½ºÅ°´×

//----------------------------------------------------------------------------
// 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*boolcompileconst
decl *dodoubleelse
externfalsefloatfor
halfifininline
inoutintmatrixout
pass *pixelshaderreturnsampler
sharedstaticstringstruct
technique *texturetruetypedef
uniformvectorvertexshadervoid
volatilewhile

´ÙÀ½ÀÇ Å°¿öµå´Â ¹Ì»ç¿ëÀÌÁö¸¸, ¿¹¾àµÇ°í ÀÖ´Ù.

asm*boolcompileconst
autobreakcasecatch
charclassconst_castcontinue
defaultdeletedynamic_castenum
explicitfriendgotolong
mutablenamespacenewoperator
privateprotectedpublicregister
reinterpret_castshortsignedsizeof
static_castswitchtemplatethis
throwtrytypenameunion
unsignedusingvirtual

ÇÁ¸®ÇÁ·Î¼¼¼­ Áö½Ã¹®

ÇÁ¸®ÇÁ·Î¼¼¼­´Â, ´ÙÀ½ÀÇ Áö½Ã¹®À» ÀνÄÇÑ´Ù. ¾Æ·¡¿¡ ¿Ã¸®´Â Áö½Ã¹® Àܴ̿Â, ¸ðµÎ Microsoft Visual C++® ÇÁ¸®ÇÁ·Î¼¼¼­¿ÍÀÇ È£È¯¼ºÀ» °¡Áöµµ·Ï(µíÀÌ) ó¸® µÈ´Ù. ÀÌ·¯ÇÑ Áö½Ã¹®ÀÇ ¿ÏÀüÇÑ ¼³¸í¿¡ ´ëÇØ¼­´Â, Visual C++ ÀÇ ¹®¼­¸¦ ÂüÁ¶ÇÒ°Í.

#define#elif#else#endif
#error#if#ifdef#ifndef
#include#linepragma#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 ºí·Ï (;) ³»ÀÇ ¾î¼Àºí¸® Çü½ÄÀÇ ÄÚ¸àÆ®

ºÎµ¿ ¼Ò¼öÁ¡¼ö(½Ç¼ö)

Á¤¼ö

¹®ÀÚ

'c'(¹®ÀÚ)
'\a' '\b' '\f' '\b' '\r' '\t' '\v'(À̽ºÄÉÀÌÇÁ)
'\###'(8 Áø¼ö À̽ºÄÉÀÌÇÁ, °¢ # Àº 8 Áø¼ö)
'\x#'(16 Áø¼ö À̽ºÄÉÀÌÇÁ. # (Àº)´Â 16 Áø¼ö. ÀÓÀÇÀÇ ¼öÀÇ ¼ýÀÚ)
'\c'(c ´Â ´Ù¸¥ ¹®ÀÚ. backslash³ª ÀοëºÎÈ£µµ Æ÷ÇÔÇÑ´Ù)

À̽ºÄÉÀÌÇÁ´Â ÇÁ¸®ÇÁ·Î¼¼¼­½Ä¿¡¼­´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.

ij¸¯ÅÍ ¶óÀÎ

"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 '{'
                ;
///////////////////////////////////////////////////


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