2013-12-19 19:32:50 +01:00

47 lines
1.6 KiB
Plaintext

/////////////////////////////////////////////////////////////////////////////////
//
// shadowreceivervp.cg
//
// Hamilton Chong
// (c) 2006
//
// This is an example vertex shader for shadow receiver objects.
//
/////////////////////////////////////////////////////////////////////////////////
// Define inputs from application.
struct VertexIn
{
float4 position : POSITION; // vertex position in object space
float4 normal : NORMAL; // vertex normal in object space
};
// Define outputs from vertex shader.
struct Vertex
{
float4 position : POSITION; // vertex position in post projective space
float4 shadowCoord : TEXCOORD0; // vertex position in shadow map coordinates
float diffuse : TEXCOORD1; // diffuse shading value
};
Vertex main(VertexIn In,
uniform float4x4 uModelViewProjection, // model-view-projection matrix
uniform float4 uLightPosition, // light position in object space
uniform float4x4 uModel, // model matrix
uniform float4x4 uTextureViewProjection // shadow map's view projection matrix
)
{
Vertex Out;
// compute diffuse shading
float3 lightDirection = normalize(uLightPosition.xyz - In.position.xyz);
Out.diffuse = dot(In.normal.xyz, lightDirection);
// compute shadow map lookup coordinates
Out.shadowCoord = mul(uTextureViewProjection, mul(uModel, In.position));
// compute vertex's homogenous screen-space coordinates
Out.position = mul(uModelViewProjection, In.position);
return Out;
}