¼ÎÀÌ´õ ÀÔ¹®1
Per Vertex Lighting, No Specular Reflection - simpleLighting1.rfx
struct VS_INPUT
{ float4 pos : POSITION; float3 normal : NORMAL; }; struct VS_OUTPUT { float4 pos : POSITION; float3 diffuse : TEXCOORD1; }; float4x4 gWorldMat; float4x4 gViewMat; float4x4 gProjMat; float4 gWorldLightPos; VS_OUTPUT vs_main( VS_INPUT input) { VS_OUTPUT output; output.pos = mul(input.pos, gWorldMat); float3 lightDir = output.pos.xyz - gWorldLightPos.xyz; lightDir = normalize( lightDir); output.pos = mul( output.pos, gViewMat); output.pos = mul( output.pos, gProjMat); float3 worldNormal = mul( input.normal, (float3x3)gWorldMat); worldNormal = normalize( worldNormal); output.diffuse = dot( -lightDir, worldNormal); return output; } //------------------------------------------------------------ struct PS_INPUT { float3 diffuse : TEXCOORD1; }; float4 ps_main( PS_INPUT input) : COLOR { float3 diffuse = saturate( input.diffuse); return float4( diffuse, 1); } ´Ù¿î·Îµå : simpleLighting1.rfx Per Vertex Lighting, Specular Reflection
float4x4 gWorldMat;
float4x4 gViewMat; float4x4 gProjMat; float4 gLightPos; float4 gViewPos; struct VS_INPUT { float4 pos : POSITION; float3 normal : NORMAL; }; struct VS_OUTPUT { float4 pos : POSITION; float3 diffuse : TEXCOORD1; float3 reflection : TEXCOORD2; float3 viewDir : TEXCOORD3; }; VS_OUTPUT vs_main( VS_INPUT input ) { VS_OUTPUT output; output.pos = mul( input.pos, gWorldMat); float3 lightDir = output.pos.xyz - gLightPos.xyz; lightDir = normalize( lightDir); float3 viewDir = output.pos.xyz - gViewPos.xyz; output.viewDir = normalize( viewDir); output.pos = mul( output.pos, gViewMat); output.pos = mul( output.pos, gProjMat); float3 worldNormal = mul( input.normal, gWorldMat); worldNormal = normalize( worldNormal); output.diffuse = dot( -lightDir, worldNormal); output.reflection = reflect( lightDir, worldNormal); return( output ); } //------------------------------------------------------------ struct PS_INPUT { float3 diffuse : TEXCOORD1; float3 reflection : TEXCOORD2; float3 viewDir : TEXCOORD3; }; float4 ps_main( PS_INPUT input) : COLOR { float3 diffuse = saturate( input.diffuse); float3 specular = 0; if( diffuse.x > 0) { float3 reflection = normalize( input.reflection); float3 viewDir = normalize( input.viewDir); specular = dot( reflection, -viewDir); specular = saturate( specular); specular = pow( specular, 20); } float3 ambient = float3( 0.1f, 0.1f, 0.1f); return( float4( ambient + specular + diffuse, 1.0f) ); } µðÇ»Áî ¸Ê°ú ½ºÆåŧ·¯ ¸ÊÀ» Ãß°¡ÇÑ´Ù. ÅؽºÃÄ Ãß°¡½Ã ºûÀÇ ¾çÀ» ±¸ÇÏ´Â ¹æ¹ýÀÌ´Ù.
Specular Mapping
float4x4 gWorldMat;
float4x4 gViewMat; float4x4 gProjMat; float4 gLightPos; float4 gViewPos; struct VS_INPUT { float4 pos : POSITION; float3 normal : NORMAL; float2 uv : TEXCOORD0; }; struct VS_OUTPUT { float4 pos : POSITION; float2 uv : TEXCOORD0; float3 diffuse : TEXCOORD1; float3 reflection : TEXCOORD2; float3 viewDir : TEXCOORD3; }; VS_OUTPUT vs_main( VS_INPUT input ) { VS_OUTPUT output; output.pos = mul( input.pos, gWorldMat); float3 lightDir = output.pos.xyz - gLightPos.xyz; lightDir = normalize( lightDir); float3 viewDir = output.pos.xyz - gViewPos.xyz; output.viewDir = normalize( viewDir); output.pos = mul( output.pos, gViewMat); output.pos = mul( output.pos, gProjMat); float3 worldNormal = mul( input.normal, gWorldMat); worldNormal = normalize( worldNormal); output.diffuse = dot( -lightDir, worldNormal); output.reflection = reflect( lightDir, worldNormal); output.uv = input.uv; return( output ); } //------------------------------------------------------------ sampler2D DiffuseSampler; sampler2D SpecularSampler; float3 gLightColor; struct PS_INPUT { float2 uv : TEXCOORD0; float3 diffuse : TEXCOORD1; float3 reflection : TEXCOORD2; float3 viewDir : TEXCOORD3; }; float4 ps_main( PS_INPUT input) : COLOR { float4 albedo = tex2D(DiffuseSampler, input.uv); float3 diffuse = gLightColor * albedo.rgb * saturate( input.diffuse); float3 specular = 0; if( diffuse.x > 0) { float3 reflection = normalize( input.reflection); float3 viewDir = normalize( input.viewDir); specular = dot( reflection, -viewDir); specular = saturate( specular); specular = pow( specular, 20); float4 specularIntensity = tex2D(SpecularSampler, input.uv); specular = gLightColor * specularIntensity.rgb * specular; } float3 ambient = float3( 0.1f, 0.1f, 0.1f) * albedo; return( float4( ambient + specular + diffuse, 1.0f) ); } ´Ù¿î·Îµå : SpecularMapping.rfx SpecularMappling.rfx Çà·ÄÀ» ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤Çغ¸ÀÚ. ¿ùµå Çà·Ä, ºä Çà·Ä, ÇÁ·ÎÁ§¼Ç Çà·ÄÀ» Çѹø¿¡ °è»êÇϱâ À§ÇØ gWorldViewProjMat Çà·ÄÀ» ÀÌ¿ëÇÏÀÚ. ´Ù¿î·Îµå : SpecularMapping2.rfx simpleLighting2.rfx ¼ÎÀÌ´õ Äڵ忡¼ ¿ùµå Çà·Ä, ºä Çà·Ä, ÇÁ·ÎÁ§¼Ç Çà·ÄÀ» ¹Ì¸® °è»êÇؼ ÇϳªÀÇ Çà·Ä¸¸ Àü´ÞÇØ º¸ÀÚ. ¿ùµå°ø°£À» ¿ÀºêÁ§Æ® °ø°£À¸·Î º¯È¯ ÇÒ·Á¸é ¿ùµå Çà·ÄÀÇ ¿ªÇà·ÄÀ» °öÇÏ¸é µÈ´Ù. float3 objectLightPos = mul( gWorldLightPos, gInvWorldMat) simpleLight2.rfx
struct VS_INPUT
{ float4 pos : POSITION; float3 normal : NORMAL; }; float4x4 gWorldViewProjMat; float4x4 gInvWorldMat; float4 gWorldLightPos; struct VS_OUTPUT { float4 pos : POSITION; float3 diffuse : TEXCOORD1; }; VS_OUTPUT vs_main( VS_INPUT input ) { VS_OUTPUT output; output.pos = mul( input.pos, gWorldViewProjMat); float3 objectLightPos = mul( gWorldLightPos, gInvWorldMat); float3 lightDir = normalize(input.pos.xyz - objectLightPos); output.diffuse = dot( -lightDir, input.normal); return( output ); } //------------------------------------------------------------ struct PS_INPUT { float3 diffuse : TEXCOORD1; }; float4 ps_main( PS_INPUT input) : COLOR { float3 diffuse = saturate( input.diffuse); return float4( diffuse, 1.0f); } ´Ù¿î·Îµå : simpleLighting2.rfx
|