DirectX Shader Programming

download DirectX  Shader  Programming

of 20

  • date post

    15-Jan-2016
  • Category

    Documents

  • view

    68
  • download

    0

Embed Size (px)

description

DirectX Shader Programming. Lambert 조명모델의 확장. 지난주에 구현한 프로그램의 단점 조명계산을 하는 과정에서 월드 좌표계의 법선 벡터를 받아오면서 연산을 2 회함 로컬 좌표계에서 계산하는 방법으로 바꿀 수 있다면 ? Normal Vector 의 연산을 로컬좌표계로 바꾸어 보자 float N 에 모델의 Normal 벡터를 대입하면 됨. Lambert 조명 모델의 최적화. 의 경우 바뀔 일이 없음 상수화 가능 환경광과 확산 반사광은 색의 강도만 다름 - PowerPoint PPT Presentation

Transcript of DirectX Shader Programming

DirectX Shader Programming

DirectX Shader Programming1Lambert 2 ?Normal Vector float N Normal 2Lambert L w

3Lambert

4 x,y,z ,W 4Phong

5Phong (Specularity, ) 6

7

8Phong

9Phong , , R R L

10Phong (n) n 0

11Phong

EyePos EyePos V

12Phong

13

14 15 struct VS_OUTPUT{ float4 Pos: POSITION; float4 Color: COLOR0; float3 N : TEXCOORD0; float3 Eye : TEXCOORD1;}; 16VS Output // -------------------------------------------------------------// // -------------------------------------------------------------VS_OUTPUT VS( float4 Pos : POSITION, // float4 Normal : NORMAL // ){VS_OUTPUT Out = (VS_OUTPUT)0; // // Out.Pos = mul(Pos, mWVP);// float amb = -vLightDir.w;// float3 eye = normalize(vEyePos - Pos.xyz);float3 L = -vLightDir; // float3 N = Normal.xyz;float3 R = -eye + 2.0f*dot(N,eye)*N;// Out.Color = vColor * max(amb, dot(Normal, -vLightDir)) + pow(max(0,dot(L, R)), 10);Out.N = N;Out.Eye = R;return Out;}

float4 PS(VS_OUTPUT In) : COLOR{ float3 L = -vLightDir.xyz;float3 R = In.Eye;float3 N = In.N; return In.Color * max(.3, dot(N, -vLightDir)) + pow(max(0,dot(L, R)), 10);;}

// -------------------------------------------------------------// // -------------------------------------------------------------VS_OUTPUT VS( float4 Pos : POSITION, // float4 Normal : NORMAL // ){VS_OUTPUT Out = (VS_OUTPUT)0; // // Out.Pos = mul(Pos, mWVP);// float amb = -vLightDir.w;// float3 eye = normalize(vEyePos - Pos.xyz);float3 L = -vLightDir; // float3 N = Normal.xyz;float3 R = -eye + 2.0f*dot(N,eye)*N;// Out.Color = vColor * max(amb, dot(Normal, -vLightDir)) + pow(max(0,dot(L, R)), 10);Out.N = N;Out.Eye = R;return Out;}// -------------------------------------------------------------float4 PS(VS_OUTPUT In) : COLOR{ float3 L = -vLightDir.xyz;float3 R = In.Eye;float3 N = In.N; return In.Color * max(.3, dot(N, -vLightDir)) + pow(max(0,dot(L, R)), 10);;}19 (.x ) , : + DirectX Tutorial 620