#ifndef DIRECTIONAL_LIGHT_COUNT #define DIRECTIONAL_LIGHT_COUNT 0 #endif #ifndef SPOT_LIGHT_COUNT #define SPOT_LIGHT_COUNT 0 #endif #ifndef POINT_LIGHT_COUNT #define POINT_LIGHT_COUNT 0 #endif #if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0) #define LIGHTING #endif /////////////////////////////////////////////////////////// // Atributes in vec4 a_position; #if defined(SKINNING) in vec4 a_blendWeights; in vec4 a_blendIndices; #endif in vec2 a_texCoord; #if defined(LIGHTMAP) in vec2 a_texCoord1; #endif #if defined(LIGHTING) in vec3 a_normal; #if defined(BUMPED) in vec3 a_tangent; in vec3 a_binormal; #endif #endif /////////////////////////////////////////////////////////// // Uniforms uniform mat4 u_worldViewProjectionMatrix; #if defined(SKINNING) uniform vec4 u_matrixPalette[SKINNING_JOINT_COUNT * 3]; #endif #if defined(LIGHTING) uniform mat4 u_inverseTransposeWorldViewMatrix; #if defined(FOG) || defined(SPECULAR) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0) uniform mat4 u_worldViewMatrix; #endif #if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0) uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT]; #endif #if (POINT_LIGHT_COUNT > 0) uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT]; #endif #if (SPOT_LIGHT_COUNT > 0) uniform vec3 u_spotLightPosition[SPOT_LIGHT_COUNT]; #if defined(BUMPED) uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT]; #endif #endif #if defined(SPECULAR) uniform vec3 u_cameraPosition; #endif #else #if defined(FOG) uniform mat4 u_worldViewMatrix; #endif #endif #if defined(TEXTURE_REPEAT) uniform vec2 u_textureRepeat; #endif #if defined(TEXTURE_OFFSET) uniform vec2 u_textureOffset; #endif #if defined(CLIP_PLANE) uniform mat4 u_worldMatrix; uniform vec4 u_clipPlane; #endif /////////////////////////////////////////////////////////// // Varyings out vec2 v_texCoord; #if defined(LIGHTMAP) out vec2 v_texCoord1; #endif #if defined(LIGHTING) #if !defined(BUMPED) out vec3 v_normalVector; #endif #if defined(BUMPED) && (DIRECTIONAL_LIGHT_COUNT > 0) out vec3 v_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT]; #endif #if (POINT_LIGHT_COUNT > 0) out vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT]; #endif #if (SPOT_LIGHT_COUNT > 0) out vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT]; #if defined(BUMPED) out vec3 v_spotLightDirection[SPOT_LIGHT_COUNT]; #endif #endif #if defined(SPECULAR) out vec3 v_cameraDirection; #endif #include "lighting.vert" #endif #if defined(SKINNING) #include "skinning.vert" #else #include "skinning-none.vert" #endif #if defined(CLIP_PLANE) out float v_clipDistance; #endif #if defined(FOG) out vec4 viewSpace; #endif void main() { vec4 position = getPosition(); #if defined(FOG) viewSpace = u_worldViewMatrix * position; #endif gl_Position = u_worldViewProjectionMatrix * position; #if defined(LIGHTING) vec3 normal = getNormal(); // Transform the normal, tangent and binormals to view space. mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz, u_inverseTransposeWorldViewMatrix[1].xyz, u_inverseTransposeWorldViewMatrix[2].xyz); vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * normal); #if defined(BUMPED) vec3 tangent = getTangent(); vec3 binormal = getBinormal(); vec3 tangentVector = normalize(inverseTransposeWorldViewMatrix * tangent); vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * binormal); mat3 tangentSpaceTransformMatrix = mat3(tangentVector.x, binormalVector.x, normalVector.x, tangentVector.y, binormalVector.y, normalVector.y, tangentVector.z, binormalVector.z, normalVector.z); applyLight(position, tangentSpaceTransformMatrix); #else v_normalVector = normalVector; applyLight(position); #endif #endif v_texCoord = a_texCoord; #if defined(TEXTURE_REPEAT) v_texCoord *= u_textureRepeat; #endif #if defined(TEXTURE_OFFSET) v_texCoord += u_textureOffset; #endif #if defined(LIGHTMAP) v_texCoord1 = a_texCoord1; #endif #if defined(CLIP_PLANE) v_clipDistance = dot(u_worldMatrix * position, u_clipPlane); #endif }