d3d/archive/D3D11_3_FunctionalSpec.htm [8868:9002]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface Light
{
float3 Calculate(float3 Position, float3 Normal);
};
class AmbientLight : Light
{
float3 m_AmbientValue;
float3 Calculate(float3 Position, float3 Normal)
{
return m_AmbientValue;
}
};
class DirectionalLight : Light
{
float3 m_LightDir;
float3 m_LightColor;
float3 Calculate(float3 Position, float3 Normal)
{
float LightContrib = saturate( dot( Normal, -m_LightDir) );
return m_LightColor * LightContrib;
}
};
uint g_NumLights;
uint g_LightsInUse[4];
Light g_Lights[9];
float3 AccumulateLighting(float3 Position, float3 Normal)
{
float3 Color = 0;
for (uint i = 0; i < g_NumLights; i++)
{
Color += g_Lights[g_LightsInUse[i]].Calculate(Position, Normal);
}
return Color;
}
interface Material
{
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord);
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord);
};
class FlatMaterial : Material
{
float3 m_Color;
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
return m_Color * AccumulateLighting(Position, Normal);
}
};
class TexturedMaterial : Material
{
float3 m_Color;
Texture2D<float3> m_Tex;
sampler m_Sampler;
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
float3 Color = m_Color;
Color *= m_Tex.Sample(m_Sampler, TexCoord) * 0.1234;
Color *= AccumulateLighting(Position, Normal);
return Color;
}
};
class StrangeMaterial : Material
{
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
Position += Normal * 0.1;
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
return AccumulateLighting(Position, Normal);
}
};
float TestValueFromLight(Light Obj, float3 Position, float3 Normal)
{
float3 Calc = Obj.Calculate(Position, Normal);
return saturate(Calc.x + Calc.y + Calc.z);
}
AmbientLight g_Ambient0;
DirectionalLight g_DirLight0;
DirectionalLight g_DirLight1;
DirectionalLight g_DirLight2;
DirectionalLight g_DirLight3;
DirectionalLight g_DirLight4;
DirectionalLight g_DirLight5;
DirectionalLight g_DirLight6;
DirectionalLight g_DirLight7;
FlatMaterial g_FlatMat0;
TexturedMaterial g_TexMat0;
StrangeMaterial g_StrangeMat0;
float4 main (
Material MyMaterial,
float3 CurPos: CurPosition,
float3 Normal : Normal,
float2 TexCoord : TexCoord0) : SV_Target
{
float4 Ret;
if (TestValueFromLight(g_DirLight0, CurPos, Normal) > 0.5)
{
MyMaterial.Perturb(CurPos, Normal, TexCoord);
}
Ret.xyz = MyMaterial.CalculateLitColor(CurPos, Normal, TexCoord);
Ret.w = 1;
return Ret;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
d3d/archive/images/d3d11/D3D11_3_FunctionalSpec.htm [7981:8115]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
interface Light
{
float3 Calculate(float3 Position, float3 Normal);
};
class AmbientLight : Light
{
float3 m_AmbientValue;
float3 Calculate(float3 Position, float3 Normal)
{
return m_AmbientValue;
}
};
class DirectionalLight : Light
{
float3 m_LightDir;
float3 m_LightColor;
float3 Calculate(float3 Position, float3 Normal)
{
float LightContrib = saturate( dot( Normal, -m_LightDir) );
return m_LightColor * LightContrib;
}
};
uint g_NumLights;
uint g_LightsInUse[4];
Light g_Lights[9];
float3 AccumulateLighting(float3 Position, float3 Normal)
{
float3 Color = 0;
for (uint i = 0; i < g_NumLights; i++)
{
Color += g_Lights[g_LightsInUse[i]].Calculate(Position, Normal);
}
return Color;
}
interface Material
{
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord);
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord);
};
class FlatMaterial : Material
{
float3 m_Color;
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
return m_Color * AccumulateLighting(Position, Normal);
}
};
class TexturedMaterial : Material
{
float3 m_Color;
Texture2D<float3> m_Tex;
sampler m_Sampler;
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
float3 Color = m_Color;
Color *= m_Tex.Sample(m_Sampler, TexCoord) * 0.1234;
Color *= AccumulateLighting(Position, Normal);
return Color;
}
};
class StrangeMaterial : Material
{
void Perturb(in out float3 Position, in out float3 Normal, in out float2 TexCoord)
{
Position += Normal * 0.1;
}
float3 CalculateLitColor(float3 Position, float3 Normal, float2 TexCoord)
{
return AccumulateLighting(Position, Normal);
}
};
float TestValueFromLight(Light Obj, float3 Position, float3 Normal)
{
float3 Calc = Obj.Calculate(Position, Normal);
return saturate(Calc.x + Calc.y + Calc.z);
}
AmbientLight g_Ambient0;
DirectionalLight g_DirLight0;
DirectionalLight g_DirLight1;
DirectionalLight g_DirLight2;
DirectionalLight g_DirLight3;
DirectionalLight g_DirLight4;
DirectionalLight g_DirLight5;
DirectionalLight g_DirLight6;
DirectionalLight g_DirLight7;
FlatMaterial g_FlatMat0;
TexturedMaterial g_TexMat0;
StrangeMaterial g_StrangeMat0;
float4 main (
Material MyMaterial,
float3 CurPos: CurPosition,
float3 Normal : Normal,
float2 TexCoord : TexCoord0) : SV_Target
{
float4 Ret;
if (TestValueFromLight(g_DirLight0, CurPos, Normal) > 0.5)
{
MyMaterial.Perturb(CurPos, Normal, TexCoord);
}
Ret.xyz = MyMaterial.CalculateLitColor(CurPos, Normal, TexCoord);
Ret.w = 1;
return Ret;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -