Attempt to do Phong shading in the fragment shader

This commit is contained in:
Eryn Wells 2018-11-21 08:19:41 -07:00
parent 59697dbb51
commit 73d162337c

View file

@ -43,7 +43,7 @@ vertex ColorInOut vertexShader(Vertex in [[stage_in]],
out.position = uniforms.projectionMatrix * eyeCoords;
out.eyeCoords = eyeCoords;
out.normal = in.normal;
out.normal = normalize(in.normal);
out.texCoord = in.texCoord;
return out;
@ -53,10 +53,24 @@ fragment float4 fragmentShader(ColorInOut in [[stage_in]],
constant Uniforms &uniforms [[buffer(BufferIndexUniforms)]])
{
float3 normal = normalize(uniforms.normalMatrix * in.normal);
float3 lightDirection = -in.eyeCoords.xyz;
float3 lightDirection = normalize(float3(-8, 8, 1) - in.eyeCoords.xyz);
float3 viewDirection = normalize(-in.eyeCoords.xyz);
float3 reflection = -reflect(lightDirection, normal);
float4 out;
float lightDotNormal = dot(normal, lightDirection);
float4 color(abs(lightDotNormal) * float3(0.2), 1.0);
return color;
if (lightDotNormal <= 0.0) {
// No color contribution to this pixel.
out = float4();
} else {
float3 color = 0.8 * lightDotNormal * float3(0.6);
float reflectDotViewDirection = dot(reflection, viewDirection);
if (reflectDotViewDirection > 0.0) {
color += 0.4 * pow(reflectDotViewDirection, 10) * float3(0, 0, 1);
}
out = float4(color, 1);
}
return out;
}
#pragma mark - Normal Shaders