Attempt to do Phong shading in the fragment shader
This commit is contained in:
parent
59697dbb51
commit
73d162337c
1 changed files with 18 additions and 4 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue