//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
float4x4 WorldView;
float4x4 ViewProj;
//-----------------------------------------------------------------------------
// Input / output structures
//-----------------------------------------------------------------------------
struct VS_Input
{
float4 Position : POSITION;
float3 Normal : NORMAL;
};
struct VS_Output
{
float4 Position : POSITION;
float2 TexCoord : TEXCOORD0;
};
//-----------------------------------------------------------------------------
// Main function
//-----------------------------------------------------------------------------
// Main vertex shader function
void main( in VS_Input i, out VS_Output o )
{
o.Position = mul( i.Position, WorldView );
// Compute normal in camera space
float3 NormalVec = mul( i.Normal, WorldView );
NormalVec = normalize( NormalVec );
// Obtain the reverse eye vector
float3 EyeReflectVec = -normalize( o.Position );
// Compute the reflection vector
float3 Reflect = 2 * dot( EyeReflectVec, NormalVec ) * NormalVec - EyeReflectVec;
// Store the reflection vector in texcoord0
o.TexCoord = Reflect;
// Apply the projection
o.Position = mul( o.Position, ViewProj );
}
//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
float4 reflectivity = 1.0f;
samplerCUBE enviroMap =
sampler_state
{
Texture = <CubeMap>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
};
//-----------------------------------------------------------------------------
// Input / output structures
//-----------------------------------------------------------------------------
struct PS_Input
{
float3 TexCoord : TEXCOORD0;
};
struct PS_Output
{
float4 Colour : COLOR;
};
//-----------------------------------------------------------------------------
// Main function
//-----------------------------------------------------------------------------
void main( in PS_Input i, out PS_Output o )
{
o.Colour = reflectivity * texCUBE( enviroMap, i.TexCoord );
}