From d48b03f23b7da6b6a26428deb006f42cad1cae97 Mon Sep 17 00:00:00 2001 From: yunfeibai Date: Mon, 28 Nov 2016 10:13:09 -0800 Subject: [PATCH] Use the barycentric coordinate to get the coordinate in shadow buffer. --- examples/TinyRenderer/TinyRenderer.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/TinyRenderer/TinyRenderer.cpp b/examples/TinyRenderer/TinyRenderer.cpp index d449e4a3a..1b7013487 100644 --- a/examples/TinyRenderer/TinyRenderer.cpp +++ b/examples/TinyRenderer/TinyRenderer.cpp @@ -202,14 +202,14 @@ struct ShadowShader : public IShader { virtual bool fragment(Vec3f bar, TGAColor &color) { Vec4f p = viewportmat*(varying_tri_light_view*bar); float depth = p[2]; - //p = p/p[3]; - //int index_x = b3Min(m_width-1, int(p[0])); - //index_x = b3Max(0, index_x); - //int index_y = b3Min(m_height-1, int(p[1])); - //index_y = b3Max(0, index_y); - //int idx = index_x + index_y*m_width; // index in the shadowbuffer array - int idx = indexmap[count]; - float shadow = 0.8+0.2*(m_shadowBuffer[idx]<-depth+0.43); // magic coeff to avoid z-fighting + p = p/p[3]; + int index_x = b3Min(m_width-1, int(p[0])); + index_x = b3Max(0, index_x); + int index_y = b3Min(m_height-1, int(p[1])); + index_y = b3Max(0, index_y); + int idx = index_x + index_y*m_width; // index in the shadowbuffer array + //int idx = indexmap[count]; + float shadow = 0.8+0.2*(m_shadowBuffer[idx]<-depth+0.2); // magic coeff to avoid z-fighting //printf("count: %d, idx: %d\n", count, idx); //printf("shadowbuffer: %f, depth: %f\n", m_shadowBuffer[idx], -depth+0.43);