47 lines
1.6 KiB
Plaintext
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;
|
|
} |