#version 120 /** * Lit Sphere (spherically mapped captured light) shader. * **Project Name:** MakeHuman * **Product Home Page:** http://www.makehuman.org/ * **Code Home Page:** https://bitbucket.org/MakeHuman/makehuman/ * **Authors:** Jonas Hauquier * **Copyright(c):** MakeHuman Team 2001-2014 * **Licensing:** AGPL3 (see also http://www.makehuman.org/node/318) * **Coding Standards:** See http://www.makehuman.org/node/165 * * Abstract * -------- * * Has the effect of a specular material, shaded relative to the camera without * lights. * The normal is used as UV coordinates of the litsphere texture, which is a * spherically shaped mapping of colors for all angles that normals can face in * the half sphere facing the camera. * Litsphere textures express lighting for normal angles in view space. **/ #ifdef NORMALMAP // Inputs attribute vec4 tangent; // Output varying mat3 tbnMat; // Tangent to view space conversion matrix #else // Output varying vec3 vNormal; // Vertex normal in view space #endif void main() { gl_Position = ftransform(); gl_TexCoord[0] = gl_MultiTexCoord0; #ifdef NORMALMAP vec3 vNormal = vec3(0, 0, 0); #endif vNormal = normalize(gl_NormalMatrix * gl_Normal); // Vertex normal in view space #ifdef DIFFUSE gl_TexCoord[0] = gl_MultiTexCoord0; #endif #ifdef NORMALMAP // Tangent and binormal in view space vec3 tang = normalize(gl_NormalMatrix * tangent.xyz); //normal = normalize(gl_NormalMatrix * gl_Normal); vec3 binormal = normalize(cross(vNormal, tang)); tbnMat = mat3(tang, binormal, vNormal); // TBN matrix, converts from Tangent space in view space #endif #ifdef VERTEX_COLOR gl_FrontColor = gl_Color; #endif }