From 9c4222ea9e23c43412e3845c9fd3bea7a5ad7435 Mon Sep 17 00:00:00 2001 From: yunfeibai Date: Wed, 7 Dec 2016 11:33:26 -0800 Subject: [PATCH] Modify shader so that the color of the light and the shadow don't affect the ambient component. --- examples/TinyRenderer/TinyRenderer.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/examples/TinyRenderer/TinyRenderer.cpp b/examples/TinyRenderer/TinyRenderer.cpp index 8ae3fb1e5..4284d484d 100644 --- a/examples/TinyRenderer/TinyRenderer.cpp +++ b/examples/TinyRenderer/TinyRenderer.cpp @@ -140,22 +140,16 @@ struct Shader : public IShader { float specular = pow(b3Max(reflection_direction.z, 0.f), m_model->specular(uv)); float diffuse = b3Max(0.f, bn * m_light_dir_local); - Vec3f light_coeff = Vec3f(m_ambient_coefficient, m_diffuse_coefficient, m_specular_coefficient); - light_coeff = light_coeff/(light_coeff[0]+light_coeff[1]+light_coeff[2]); + color = TGAColor(255,255,255,255); + color[0] *= m_colorRGBA[0]; + color[1] *= m_colorRGBA[1]; + color[2] *= m_colorRGBA[2]; + color[3] *= m_colorRGBA[3]; - float intensity = light_coeff[0] + b3Min(diffuse * light_coeff[1] + specular * light_coeff[2], 1.0f - light_coeff[0]); - - color = m_model->diffuse(uv) * intensity * shadow; - - //warning: bgra color is swapped to rgba to upload texture - color.bgra[0] *= m_colorRGBA[0]; - color.bgra[1] *= m_colorRGBA[1]; - color.bgra[2] *= m_colorRGBA[2]; - color.bgra[3] *= m_colorRGBA[3]; - - color.bgra[0] *= m_light_color[0]; - color.bgra[1] *= m_light_color[1]; - color.bgra[2] *= m_light_color[2]; + for (int i = 0; i < 3; ++i) + { + color[i] = std::min(m_ambient_coefficient*color[i] + shadow*(m_diffuse_coefficient*diffuse+m_specular_coefficient*specular)*color[i]*m_light_color[i], 255); + } return false;