nuclear@3: attribute vec3 attr_tang; nuclear@3: nuclear@3: varying vec3 vpos, vnorm; nuclear@3: varying vec3 ldir, vdir; nuclear@3: nuclear@3: void main() nuclear@3: { nuclear@3: gl_Position = ftransform(); nuclear@3: vpos = (gl_ModelViewMatrix * gl_Vertex).xyz; nuclear@3: vec3 norm = gl_NormalMatrix * gl_Normal; nuclear@3: vec3 tang = gl_NormalMatrix * attr_tang; nuclear@3: nuclear@3: vec3 n = normalize(norm); nuclear@3: vec3 t = normalize(tang); nuclear@3: vec3 b = cross(n, t); nuclear@3: nuclear@3: mat3 tbn_mat = mat3( nuclear@3: t.x, b.x, n.x, nuclear@3: t.y, b.y, n.y, nuclear@3: t.z, b.z, n.z); nuclear@3: ldir = tbn_mat * (gl_LightSource[0].position.xyz - vpos); nuclear@3: vdir = tbn_mat * -vpos; nuclear@3: vnorm = n; nuclear@3: nuclear@4: gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; nuclear@3: }