blinn phong shading works

This commit is contained in:
Dynamitos
2023-12-03 23:12:20 +01:00
parent 178f48120d
commit 34e9304a3c
4 changed files with 14 additions and 12 deletions
+6 -6
View File
@@ -23,14 +23,14 @@ struct BlinnPhong : IBRDF
sheen = 1;
}
float3 evaluate(float3x3 tbn, float3 viewDir_WS, float3 lightDir_WS, float3 lightColor)
float3 evaluate(float3x3 tbn, float3 viewDir_TS, float3 lightDir_TS, float3 lightColor)
{
float3 normal_WS = mul(normal, tbn);
float diffuse = max(dot(normal_WS, lightDir_WS), 0);
float3 h = lightDir_WS + viewDir_WS;
float specular = dot(normal_WS, h);
float3 normal_TS = normalize(normal);
float diffuse = max(dot(normal_TS, lightDir_TS), 0);
float3 h = normalize(lightDir_TS + viewDir_TS);
float specular = saturate(dot(normal_TS, h));
return (viewDir_WS + float3(1, 1, 1)) / 2;//baseColor * (diffuse + specular) * lightColor;
return baseColor * (diffuse + specular) * lightColor;
}
};
+5 -3
View File
@@ -14,7 +14,8 @@ struct DirectionalLight : ILightEnv
float3 illuminate<B:IBRDF>(LightingParameter params, B brdf)
{
return brdf.evaluate(params.tbn, params.viewDir_WS, -normalize(direction.xyz), color.xyz);
float3 lightDir_TS = mul(params.tbn, direction.xyz);
return brdf.evaluate(params.tbn, params.viewDir_TS, -normalize(lightDir_TS), color.xyz);
}
};
@@ -26,9 +27,10 @@ struct PointLight : ILightEnv
float3 illuminate<B:IBRDF>(LightingParameter params, B brdf)
{
float3 lightDir_WS = position_WS.xyz - params.position_WS;
float d = length(lightDir_WS);
float3 lightDir_TS = mul(params.tbn, lightDir_WS);
float d = length(lightDir_TS);
float illuminance = max(1 - d / colorRange.w, 0);
return brdf.evaluate(params.tbn, params.viewDir_WS, normalize(lightDir_WS), colorRange.xyz);
return brdf.evaluate(params.tbn, params.viewDir_TS, normalize(lightDir_TS), colorRange.xyz);
}
bool insidePlane(Plane plane)
+2 -2
View File
@@ -12,7 +12,7 @@ struct LightingParameter
{
float3x3 tbn;
float3 position_WS;
float3 viewDir_WS;
float3 viewDir_TS;
};
// data passed to fragment shader
@@ -39,7 +39,7 @@ struct FragmentParameter
LightingParameter result;
result.tbn = float3x3(normalize(tangent_WS), normalize(biTangent_WS), normalize(normal_WS));
result.position_WS = position_WS;
result.viewDir_WS = normalize(viewDir_WS);
result.viewDir_TS = normalize(mul(result.tbn, viewDir_WS));
return result;
}
};
+1 -1
View File
@@ -21,7 +21,7 @@ struct Camera
}
Vector getCameraPosition() const
{
return -viewMatrix[3];
return cameraPos;
}
void mouseMove(float deltaX, float deltaY);
void mouseScroll(float x);