정점쉐이더 (Vertex Shader)
VS_OUTPUT vs_main( VS_INPUT input )
// POSITION은 시맨틱으로 좌표정보임을 알리는 역할을 한다.
struct VS_INPUT { float4 mPosition : POSITION; }
struct VS_OUTPUT { float4 mPosition : POSITION; }
이 과정이 끝나야 화면에 표시할 수 있는 좌표계로 변환된다.
// 좌표계변환을 위한 각 행렬들. 셰이더 작성 프로그램에는 사전에 정의된 값이 있음. float4x4 gWorldMatrix; float4x4 gViewMatrix; float4x4 gProjectionMatrix;
VS_OUTPUT vs_main(VS_INPUT Input)
{
VS_OUTPUT Output;
Output.mPosition = mul( Input.mPosition, gWorldMatrix );
Output.mPosition = mul( Output.mPosition, gViewMatrix );
Output.mPosition = mul( Output.mPosition, gProjectionMatrix );
return Output;
}
float4 ps_main() : COLOR
{
return float4( 1.0f, 0.9f, 0.0f, 1.0f );
}
람베르트 모델
난반사광 구하기
이런 순서로
정반사Supercular Light는 입사각과 출사각이 같은 빛.
정반사를 구하는 것은 퐁모델을 사용.
구할때 사용할 벡터
| reflect() | 벡터의 반사벡터를 (빛의 입사각의 반사각을 구하는) 구하는 함수 |
| param1 : 입사각 방향벡터, param2 : 입사각이 닿는, 반사면의 법선벡터 | |
| mul() | 벡터 곱하기 |
| normalize() | 노말벡터 구하기 |
| dot() | 벡터 내적을 구한다. 두 벡터의 <m>cos{theta}</m>를 구하는데도 사용 |