matrix complete;
matrix world;
float4 eye;
float4 aa;

struct vsinput
{
    float4 pos				: POSITION;
    float4 normal			: NORMAL;
    float2 tc				: TEXCOORD0;
};

struct vsoutput
{
    float4 pos				: POSITION;
    float2 skin				: TEXCOORD0;
    float2 bump				: TEXCOORD1;
    float2 caustic			: TEXCOORD2;
    float4 diffuse			: COLOR0;
};


vsoutput main(vsinput v)
{
	vsoutput o;
	float4 dings;
	
	// Bare ganger normalen med world
	v.normal = mul(v.normal, world);
	
	// reflekterer
	float4 invec = normalize(v.pos - eye);
	float4 outvec = reflect(invec, v.normal);
	
	// og posisjon med complete
	o.pos = mul(v.pos, complete); 
	
	// Lys
	// I tillegg til caustics lyslegger vi fisken
	// med et fake omni lys.
	// Antar at lyset kommer rett ovenfra
	// altså er lys = normal.z (her er z opp)
	// Dette funker altså selvom fisken roterer på alle akser
	// Ambient på 0.5 og lys på 0.5
	o.diffuse = 0.75f + (v.normal.z * 0.25f);
	o.diffuse *= aa;
		
	// Skin
	// Her har vi altså to teksturer med fixed teksturkoordinater
	// Skinbase og bumpmap... Disse bare henter sine koordinater
	// fra input verdien
	o.skin = v.tc;
	o.bump = v.tc;
	
	// Caustics
	// Vi bruker en caustic envmap som bump-envmap
	// i texture stage 2. Rett opp er midten av
	// teksturen, altså:
	o.caustic.x = 0.5+outvec.x*0.5;
	o.caustic.y = 0.5+outvec.y*0.5;	
	
	return o;
}