99c208bdda4d8e1239eb0bb7c788e5e400b45a81
[oweals/minetest.git] / client / shaders / bumpmaps_solids / opengl_vertex.glsl
1 \r
2 uniform mat4 mWorldViewProj;\r
3 uniform mat4 mInvWorld;\r
4 uniform mat4 mTransWorld;\r
5 uniform float dayNightRatio;\r
6 \r
7 varying vec3 vPosition;\r
8 varying vec3 viewVec;\r
9 \r
10 void main(void)\r
11 {\r
12         gl_Position = mWorldViewProj * gl_Vertex;\r
13 \r
14         vPosition = (mWorldViewProj * gl_Vertex).xyz;\r
15         \r
16         vec3 tangent; \r
17         vec3 binormal; \r
18 \r
19         vec3 c1 = cross( gl_Normal, vec3(0.0, 0.0, 1.0) ); \r
20         vec3 c2 = cross( gl_Normal, vec3(0.0, 1.0, 0.0) ); \r
21 \r
22         if( length(c1)>length(c2) )\r
23         {\r
24                 tangent = c1;   \r
25         }\r
26         else\r
27         {\r
28                 tangent = c2;   \r
29         }\r
30 \r
31         tangent = normalize(tangent);\r
32 \r
33 //binormal = cross(gl_Normal, tangent); \r
34 //binormal = normalize(binormal);\r
35 \r
36         vec4 color;\r
37         //color = vec4(1.0, 1.0, 1.0, 1.0);\r
38 \r
39         float day = gl_Color.r;\r
40         float night = gl_Color.g;\r
41         float light_source = gl_Color.b;\r
42 \r
43         /*color.r = mix(night, day, dayNightRatio);\r
44         color.g = color.r;\r
45         color.b = color.r;*/\r
46 \r
47         float rg = mix(night, day, dayNightRatio);\r
48         rg += light_source * 1.5; // Make light sources brighter\r
49         float b = rg;\r
50 \r
51         // Moonlight is blue\r
52         b += (day - night) / 13.0;\r
53         rg -= (day - night) / 13.0;\r
54 \r
55         // Emphase blue a bit in darker places\r
56         // See C++ implementation in mapblock_mesh.cpp finalColorBlend()\r
57         b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);\r
58 \r
59         // Artificial light is yellow-ish\r
60         // See C++ implementation in mapblock_mesh.cpp finalColorBlend()\r
61         rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);\r
62 \r
63         color.r = rg;\r
64         color.g = rg;\r
65         color.b = b;\r
66 \r
67         // Make sides and bottom darker than the top\r
68         color = color * color; // SRGB -> Linear\r
69         if(gl_Normal.y <= 0.5)\r
70                 color *= 0.6;\r
71                 //color *= 0.7;\r
72         color = sqrt(color); // Linear -> SRGB\r
73 \r
74         color.a = gl_Color.a;\r
75 \r
76         gl_FrontColor = gl_BackColor = color;\r
77 \r
78         gl_TexCoord[0] = gl_MultiTexCoord0;\r
79         \r
80         vec3 n1 = normalize(gl_NormalMatrix * gl_Normal);\r
81         vec4 tangent1 = vec4(tangent.x, tangent.y, tangent.z, 0);\r
82         //vec3 t1 = normalize(gl_NormalMatrix * tangent1);\r
83         //vec3 b1 = cross(n1, t1);\r
84 \r
85         vec3 v;\r
86         vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);\r
87         vec3 vVec = -vVertex;\r
88         //v.x = dot(vVec, t1);\r
89         //v.y = dot(vVec, b1);\r
90         //v.z = dot(vVec, n1);\r
91         //viewVec = vVec;\r
92         viewVec = normalize(vec3(0.0, -0.4, 0.5));\r
93         //Vector representing the 0th texture coordinate passed to fragment shader\r
94 //gl_TexCoord[0] = vec2(gl_MultiTexCoord0);\r
95 \r
96 // Transform the current vertex\r
97 //gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\r
98 }\r