1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// note: gl_ModelViewMatrix actually only contains the
// model matrix, view matrix is on the projection stack
//
// todo: clip gl_Position against gl_ClipPlane[3] if advFade
// note: many gfx will fallback to software rendering when
// gl_ClipDistance or gl_ClipPosition are used, so it might
// be better to use may a `discard` in the fragment shader
//
// note: shadow-map texture coordinates should be generated
// per fragment (the non-linear projection used can produce
// shifting artefacts with large triangles due to the linear
// interpolation of vertex positions), but this is a source
// of acne itself
// #define use_normalmapping
// #define flip_normalmap
//uniform mat4 cameraMat;
//uniform mat4 cameraInv;
uniform vec3 cameraPos;
#if (USE_SHADOWS == 1)
uniform mat4 shadowMatrix;
uniform vec4 shadowParams;
#endif
varying vec4 vertexWorldPos;
varying vec3 cameraDir;
varying float fogFactor;
#ifdef use_normalmapping
varying mat3 tbnMatrix;
#else
varying vec3 normalv;
#endif
uniform int numModelDynLights;
void main(void)
{
#ifdef use_normalmapping
vec3 tangent = gl_MultiTexCoord5.xyz;
vec3 bitangent = gl_MultiTexCoord6.xyz;
tbnMatrix = gl_NormalMatrix * mat3(tangent, bitangent, gl_Normal);
#else
normalv = gl_NormalMatrix * gl_Normal;
#endif
vertexWorldPos = gl_ModelViewMatrix * gl_Vertex;
gl_Position = gl_ProjectionMatrix * vertexWorldPos;
cameraDir = vertexWorldPos.xyz - cameraPos;
#if (USE_SHADOWS == 1)
gl_TexCoord[1] = shadowMatrix * vertexWorldPos;
gl_TexCoord[1].st = gl_TexCoord[1].st * (inversesqrt( abs(gl_TexCoord[1].st) + shadowParams.z) + shadowParams.w) + shadowParams.xy;
#endif
gl_TexCoord[0].st = gl_MultiTexCoord0.st;
#if (DEFERRED_MODE == 0)
float fogCoord = length(cameraDir.xyz);
fogFactor = (gl_Fog.end - fogCoord) * gl_Fog.scale; //gl_Fog.scale := 1.0 / (gl_Fog.end - gl_Fog.start)
fogFactor = clamp(fogFactor, 0.0, 1.0);
#endif
}
|