aboutsummaryrefslogtreecommitdiff
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
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.
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl2
-rw-r--r--src/mapblock_mesh.cpp32
2 files changed, 17 insertions, 17 deletions
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index 03b682d1b..28d3e8ed8 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -108,7 +108,7 @@ void main(void)
// Moonlight is blue
b += (day - night) / 13.0;
- rg -= (day - night) / 13.0;
+ rg -= (day - night) / 23.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
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)
{