File: lib_normal.glsl

package info (click to toggle)
wings3d 2.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 14,404 kB
  • sloc: erlang: 132,169; ansic: 3,779; lisp: 1,434; sh: 805; makefile: 794; cpp: 244; xml: 50
file content (29 lines) | stat: -rw-r--r-- 844 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//
// GLSL library routine: normal handling
//
// Author: Dan Gudmundsson
//

uniform int UseNormalMap;
uniform sampler2D NormalMap;

varying vec3 ws_normal;
varying vec4 ws_tangent;

vec3 get_normal() {
    vec3 T = ws_tangent.xyz;
    float backface = (2.0 * float(gl_FrontFacing) - 1.0);
    if(UseNormalMap == 0 || dot(T,T) < 0.0001)
	return backface*normalize(ws_normal); // No normal-map or Tangents
    // Calc Bumped normal
    T = normalize(T);
    vec3 BumpMapNormal = texture2D(NormalMap, gl_TexCoord[0].xy).xyz;
    BumpMapNormal = 2.0 * BumpMapNormal - vec3(1.0, 1.0, 1.0);
    vec3 N = normalize(ws_normal);
    T = normalize(T - dot(T, N) * N);
    vec3 B = cross(T, N) * ws_tangent.w;
    mat3 TBN = mat3(T, B, N);
    vec3 NewNormal = TBN * BumpMapNormal;
    NewNormal = normalize(NewNormal);
    return backface*NewNormal;
}