// Copyright (C) 2009-2010 Amundis // Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt // and OpenGL ES driver implemented by Christian Stehno // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in Irrlicht.h #define MAX_LIGHTS 2 attribute vec4 inVertexPosition; attribute vec4 inVertexColor; attribute vec4 inTexCoord0; attribute vec3 inVertexNormal; attribute vec3 inVertexTangent; attribute vec3 inVertexBinormal; uniform mat4 uMvpMatrix; uniform vec4 uLightPos[MAX_LIGHTS]; uniform vec4 uLightColor[MAX_LIGHTS]; uniform vec3 uEyePos; varying vec4 varTexCoord; varying vec3 varLightVector[MAX_LIGHTS]; varying vec4 varLightColor[MAX_LIGHTS]; varying vec3 varEyeVector; varying vec4 debug; void main(void) { debug = vec4(inVertexNormal, 1.0); // transform position to clip space gl_Position = uMvpMatrix * inVertexPosition; // vertex - lightpositions vec4 tempLightVector0 = uLightPos[0] - inVertexPosition; vec4 tempLightVector1 = uLightPos[1] - inVertexPosition; // eye vector vec4 Temp = vec4(uEyePos, 1.0) - inVertexPosition; // transform the light vector 1 with U, V, W varLightVector[0].x = dot(inVertexTangent, tempLightVector0.xyz); varLightVector[0].y = dot(inVertexBinormal, tempLightVector0.xyz); varLightVector[0].z = dot(inVertexNormal, tempLightVector0.xyz); // transform the light vector 2 with U, V, W varLightVector[1].x = dot(inVertexTangent, tempLightVector1.xyz); varLightVector[1].y = dot(inVertexBinormal, tempLightVector1.xyz); varLightVector[1].z = dot(inVertexNormal, tempLightVector1.xyz); // transform the eye vector with U, V, W varEyeVector.x = dot(inVertexTangent, Temp.xyz); varEyeVector.y = dot(inVertexBinormal, Temp.xyz); varEyeVector.z = dot(inVertexNormal, Temp.xyz); varEyeVector *= vec3(1.0,-1.0, -1.0); varEyeVector = normalize(varEyeVector); // calculate attenuation of light 0 varLightColor[0].w = 0.0; varLightColor[0].x = dot(tempLightVector0, tempLightVector0); varLightColor[0].x *= uLightColor[0].w; varLightColor[0] = vec4(inversesqrt(varLightColor[0].x)); varLightColor[0] *= uLightColor[0]; // normalize light vector 0 varLightVector[0] = normalize(varLightVector[0]); // calculate attenuation of light 1 varLightColor[1].w = 0.0; varLightColor[1].x = dot(tempLightVector1, tempLightVector1); varLightColor[1].x *= uLightColor[1].w; varLightColor[1] = vec4(inversesqrt(varLightColor[1].x)); varLightColor[1] *= uLightColor[1]; // normalize light vector 1 varLightVector[1] = normalize(varLightVector[1]); // move out texture coordinates and original alpha value varTexCoord = inTexCoord0; varLightColor[0].a = inVertexColor.a; }