89 lines
1.9 KiB
Plaintext
89 lines
1.9 KiB
Plaintext
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
|
|
}
|