101 lines
3.8 KiB
Plaintext
101 lines
3.8 KiB
Plaintext
struct v2f
|
|
{
|
|
float4 Position : POSITION; //in projection space
|
|
float4 Color : COLOR;
|
|
float4 TexCoords : TEXCOORD0;
|
|
float4 Normal : TEXCOORD1;
|
|
float2 Alpha : TEXCOORD2;
|
|
};
|
|
|
|
float4 main(v2f IN,
|
|
uniform sampler2D colourMap0 : TEXUNIT0,
|
|
uniform sampler2D colourMap1 : TEXUNIT1,
|
|
uniform sampler2D colourMap2 : TEXUNIT2,
|
|
uniform sampler2D colourMap3 : TEXUNIT3,
|
|
uniform sampler2D colourMap4 : TEXUNIT4,
|
|
uniform sampler2D colourMap5 : TEXUNIT5,
|
|
uniform sampler2D colourMap6 : TEXUNIT6,
|
|
uniform sampler2D colourMap7 : TEXUNIT7) : COLOR
|
|
{
|
|
//return float4(IN.Alpha.y, 1.0f-IN.Alpha.y, 0.0f,1.0f);
|
|
|
|
float textureScalingFactor = 20.0f;
|
|
//float textureSize = 512.0f;
|
|
//float noOfTexturesPerDimension = 4.0;
|
|
|
|
//Scale the texture.
|
|
IN.TexCoords /= textureScalingFactor;
|
|
//Next we compute the offset of the texture in the texture atlas
|
|
//float material = floor(IN.Alpha.x);
|
|
//float y = floor(material / noOfTexturesPerDimension);
|
|
//float x = fmod(material,noOfTexturesPerDimension);
|
|
//float2 offset = float2(x,y);
|
|
//offset /= noOfTexturesPerDimension;
|
|
|
|
float3 colourMapValueXY;
|
|
float3 colourMapValueYZ;
|
|
float3 colourMapValueXZ;
|
|
|
|
if(IN.Alpha.x < 1.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap0, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap0, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap0, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 2.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap1, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap1, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap1, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 3.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap2, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap2, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap2, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 4.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap3, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap3, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap3, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 5.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap4, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap4, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap4, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 6.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap5, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap5, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap5, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else if(IN.Alpha.x < 7.5)
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap6, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap6, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap6, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
else
|
|
{
|
|
//Retrieve the 3 samples
|
|
colourMapValueXY = tex2D(colourMap7, IN.TexCoords.xy).rgb * abs(IN.Normal.z);
|
|
colourMapValueYZ = tex2D(colourMap7, IN.TexCoords.yz).rgb * abs(IN.Normal.x);
|
|
colourMapValueXZ = tex2D(colourMap7, IN.TexCoords.xz).rgb * abs(IN.Normal.y);
|
|
}
|
|
|
|
//Blend according to triplanar texturing
|
|
float3 colourMapValue = colourMapValueXY + colourMapValueYZ + colourMapValueXZ;
|
|
|
|
//Return the result
|
|
return float4(colourMapValue*IN.Color.rgb*IN.Alpha.y,IN.Alpha.y);
|
|
} |