can this phong shading program be implemented in pure python? thanks in advance struct Lighting { float3 Diffuse; float3 Specular; }; struct PointLight { float3 position; float3 diffuseColor; float diffusePower; float3 specularColor; float specularPower; };
Hi, can this phong shading
struct Lighting
{
float3 Diffuse;
float3 Specular;
};
struct PointLight
{
float3 position;
float3 diffuseColor;
float diffusePower;
float3 specularColor;
float specularPower;
};
Lighting GetPointLight(PointLight light, float3 pos3D, float3 viewDir, float3 normal)
{
Lighting OUT;
if (light.diffusePower > 0)
{
float3 lightDir = light.position - pos3D; //3D position in space of the surface
float distance = length(lightDir);
lightDir = lightDir / distance; // = normalize(lightDir);
distance = distance * distance; //This line may be optimised using Inverse square root
//Intensity of the diffuse light. Saturate to keep within the 0-1 range.
float NdotL = dot(normal, lightDir);
float intensity = saturate(NdotL);
// Calculate the diffuse light factoring in light color, power and the attenuation
OUT.Diffuse = intensity * light.diffuseColor * light.diffusePower / distance;
//Calculate the half
//This is typically slower than calculating the actual reflection vector
// due to the normalize function's reciprocal square root
float3 H = normalize(lightDir + viewDir);
//Intensity of the specular light
float NdotH = dot(normal, H);
intensity = pow(saturate(NdotH), specularHardness);
//Sum up the specular light factoring
OUT.Specular = intensity * light.specularColor * light.specularPower / distance;
}
return OUT;
}
Step by step
Solved in 2 steps