uniform mat4 uMatrixMvp; uniform mat3 uMatrixNormal; uniform mat4 uMatrixModelview; uniform vec4 uLightPosition; varying vec3 vLightVector; varying vec3 vLightHalfVector; varying vec3 vEyeVector; VERTEX_SHADER_USE_SHADOWS VERTEX_SHADER_USE_POSITION VERTEX_SHADER_USE_NORMALS #ifdef VERTEX_TANGENT attribute vec4 aTangent0; #endif //VERTEX_TANGENT #ifdef VERTEX_TANGENT_BLEND attribute vec4 aTangent1; uniform float uTangentWeight; #endif //VERTEX_TANGENT_BLEND VERTEX_SHADER_USE_TEXCOORD VERTEX_SHADER_NEED_TEX_COORD VERTEX_SHADER_USE_LIGHT_ATTENUATION void vertexParallaxOcclusion(vec4 position, vec3 normal, vec3 tangent) { vec3 n = normalize(uMatrixNormal * normal); vec3 t = normalize(uMatrixNormal * tangent); vec3 b = cross(n, t); vec3 tmp; position = uMatrixModelview * position; #ifdef LIGHT_DIRECTIONAL vec3 lightDir = uLightPosition.xyz; #else vec3 lightDir = uLightPosition.xyz - position.xyz; #ifdef LIGHT_ATTENUATION vLightDist = length(lightDir); #endif //LIGHT_ATTENUATION lightDir = normalize(lightDir); #endif //LIGHT_DIRECTIONAL tmp.x = dot(lightDir, t); tmp.y = dot(lightDir, b); tmp.z = dot(lightDir, n); vLightVector = tmp; tmp.x = dot(position.xyz, t); tmp.y = dot(position.xyz, b); tmp.z = dot(position.xyz, n); vEyeVector = normalize(tmp); vec3 hv = normalize(normalize(-position.xyz) + lightDir); tmp.x = dot(hv, t); tmp.y = dot(hv, b); tmp.z = dot(hv, n); vLightHalfVector = tmp; } void main() { VERTEX_SHADER_POSITION VERTEX_SHADER_NORMAL #ifdef VERTEX_TANGENT_BLEND vec3 tangent = aTangent0.xyz * uTangentWeight + aTangent1.xyz * (1.0 - uTangentWeight); #else #ifdef VERTEX_TANGENT vec3 tangent = aTangent0.xyz; #endif //VERTEX_TANGENT #endif //VERTEX_TANGENT_BLEND VERTEX_SHADER_TEXCOORD gl_Position = uMatrixMvp * position; vertexParallaxOcclusion(position, normal, tangent); VERTEX_SHADER_SHADOWED }