polyvox/media/materials/programs/ColourMapAndNormalMap3DFragmentProgram.cg
2007-10-08 21:26:13 +00:00

48 lines
1.4 KiB
Plaintext

struct a2v
{
float4 Position : POSITION; //in object space
float3 Normal : NORMAL;
};
struct v2f
{
float4 Position : POSITION; //in projection space
float4 TexCoords : TEXCOORD0;
float3 LightDirection : TEXCOORD1;
float3 Normal : TEXCOORD2;
};
float4 main(v2f IN, uniform sampler3D colourMap : TEXUNIT0, uniform sampler3D normalMap : TEXUNIT1) : COLOR
{
float3 normalMapValue = tex3D(normalMap, IN.TexCoords.xyz).rgb;
normalMapValue = (normalMapValue - 0.5) * 2;
float3 finalNormal = normalize(IN.Normal + normalMapValue);
float3 colourMapValue = tex3D(colourMap, IN.TexCoords.xyz).rgb;
// calculate light vector
//float3 Normal = normalize(IN.Color.xyz);
/* float3 Normal = (IN.Color.xyz * 2) - float3(1.0,1.0,1.0);
Normal = normalize(Normal+ normalAdjustment);
float3 lightDirection = normalize(float3(1,1,1)); */
// Calculate diffuse component
float diffuse = max(dot(finalNormal, IN.LightDirection) , 0);
diffuse += 0.3;
//OUT.Color = ambient + float4(diffuse,diffuse,diffuse,1.0);
//return float4(detailColor * IN.Color.rgb, 1.0);
return float4(colourMapValue*diffuse, 1.0);
}
/*float4 main(v2f IN, uniform sampler3D detailTexture : TEXUNIT0) : COLOR
{
float3 detailColor = tex3D(detailTexture, IN.TexCoords.xyz).rgb;
return float4(detailColor * IN.Color.rgb, 1.0);
} */