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
|
#if (defined(TREE_NEAR_BASIC) || defined(TREE_NEAR_SHADOW))
uniform vec3 cameraDirX;
uniform vec3 cameraDirY;
uniform vec3 treeOffset;
uniform vec3 groundAmbientColor;
uniform vec3 groundDiffuseColor;
uniform vec2 alphaModifiers; // (tree-height alpha, ground-diffuse alpha)
#endif
#ifdef TREE_NEAR_BASIC
uniform vec4 invMapSizePO2;
#endif
#if (defined(TREE_NEAR_SHADOW) || defined(TREE_DIST_SHADOW))
uniform mat4 shadowMatrix;
uniform vec4 shadowParams;
varying float fogFactor;
#endif
#define MAX_TREE_HEIGHT 60.0
void main() {
vec4 vertexPos = gl_Vertex;
#if (defined(TREE_NEAR_BASIC) || defined(TREE_NEAR_SHADOW))
vertexPos.xyz += treeOffset;
vertexPos.xyz += (cameraDirX * gl_Normal.x);
vertexPos.xyz += (cameraDirY * gl_Normal.y);
gl_FrontColor.rgb = (gl_Normal.z * groundDiffuseColor.rgb) + groundAmbientColor.rgb;
gl_FrontColor.a = (gl_Vertex.y * alphaModifiers.x) + alphaModifiers.y;
#endif
#if (defined(TREE_DIST_SHADOW))
gl_FrontColor = gl_Color;
#endif
#if (defined(TREE_NEAR_SHADOW) || defined(TREE_DIST_SHADOW))
vec2 p17 = shadowParams.zz;
vec2 p18 = shadowParams.ww;
vec4 vertexShadowPos = shadowMatrix * vertexPos;
vertexShadowPos.st *= (inversesqrt(abs(vertexShadowPos.st) + p17) + p18);
vertexShadowPos.st += shadowParams.xy;
#endif
#if (defined(TREE_NEAR_BASIC))
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = vertexPos.xzyw * invMapSizePO2;
#endif
#if (defined(TREE_NEAR_SHADOW) || defined(TREE_DIST_SHADOW))
gl_TexCoord[0] = vertexShadowPos;
gl_TexCoord[1] = gl_MultiTexCoord0;
#endif
gl_FogFragCoord = length((gl_ModelViewMatrix * vertexPos).xyz);
gl_Position = gl_ModelViewProjectionMatrix * vertexPos;
#if (defined(TREE_NEAR_SHADOW) || defined(TREE_DIST_SHADOW))
fogFactor = (gl_Fog.end - gl_FogFragCoord) / (gl_Fog.end - gl_Fog.start);
fogFactor = clamp(fogFactor, 0.0, 1.0);
#endif
}
|