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)
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)
{