diff options
author | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-08-10 23:43:26 +0200 |
---|---|---|
committer | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-08-14 06:43:47 +0200 |
commit | 5e54bf1472039af79b3bf7bfab43d294aed8e9e9 (patch) | |
tree | 37f67da6e33bb1736c7d288d83fb3a2a84ff84db /src | |
parent | 587167e940228e52e5df5e4b5ecb7b5ff1ea1a7b (diff) | |
download | minetest-5e54bf1472039af79b3bf7bfab43d294aed8e9e9.tar.gz minetest-5e54bf1472039af79b3bf7bfab43d294aed8e9e9.tar.bz2 minetest-5e54bf1472039af79b3bf7bfab43d294aed8e9e9.zip |
Make faces shading correct for all possible modes.
Skip shading for lightsources and top of the nodes.
Fixes liquid sources and flowing surfaces having different brightness.
Diffstat (limited to 'src')
-rw-r--r-- | src/mapblock_mesh.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index b29d07319..ef2c868a0 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -32,11 +32,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "util/directiontables.h" -static void applyContrast(video::SColor& color, float factor) +static void applyFacesShading(video::SColor& color, float factor) { color.setRed(core::clamp(core::round32(color.getRed()*factor), 0, 255)); color.setGreen(core::clamp(core::round32(color.getGreen()*factor), 0, 255)); - color.setBlue(core::clamp(core::round32(color.getBlue()*factor), 0, 255)); } /* @@ -1142,21 +1141,22 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): for(u32 j = 0; j < p.vertices.size(); j++) { - // Note applyContrast second parameter is precalculated sqrt from original - // values for speed improvement + // Note applyFacesShading second parameter is precalculated sqrt + // value for speed improvement + // Skip it for lightsources and top faces. video::SColor &vc = p.vertices[j].Color; - if(p.vertices[j].Normal.Y > 0.5) { - applyContrast (vc, 1.095445); - } else if (p.vertices[j].Normal.Y < -0.5) { - applyContrast (vc, 0.547723); - } else if (p.vertices[j].Normal.X > 0.5) { - applyContrast (vc, 0.707107); - } else if (p.vertices[j].Normal.X < -0.5) { - applyContrast (vc, 0.707107); - } else if (p.vertices[j].Normal.Z > 0.5) { - applyContrast (vc, 0.894427); - } else if (p.vertices[j].Normal.Z < -0.5) { - applyContrast (vc, 0.894427); + if (!vc.getBlue()) { + if (p.vertices[j].Normal.Y < -0.5) { + applyFacesShading (vc, 0.447213); + } else if (p.vertices[j].Normal.X > 0.5) { + applyFacesShading (vc, 0.670820); + } else if (p.vertices[j].Normal.X < -0.5) { + applyFacesShading (vc, 0.670820); + } else if (p.vertices[j].Normal.Z > 0.5) { + applyFacesShading (vc, 0.836660); + } else if (p.vertices[j].Normal.Z < -0.5) { + applyFacesShading (vc, 0.836660); + } } if(!enable_shaders) { |