aboutsummaryrefslogtreecommitdiff
path: root/src/mapblock_mesh.cpp
diff options
context:
space:
mode:
authorRealBadAngel <maciej.kasatkin@o2.pl>2014-08-10 23:43:26 +0200
committerRealBadAngel <maciej.kasatkin@o2.pl>2014-08-14 06:43:47 +0200
commit5e54bf1472039af79b3bf7bfab43d294aed8e9e9 (patch)
tree37f67da6e33bb1736c7d288d83fb3a2a84ff84db /src/mapblock_mesh.cpp
parent587167e940228e52e5df5e4b5ecb7b5ff1ea1a7b (diff)
downloadminetest-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/mapblock_mesh.cpp')
-rw-r--r--src/mapblock_mesh.cpp32
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)
{