Home | History | Annotate | Download | only in Terrain
      1 uniform mat4 g_WorldViewProjectionMatrix;
      2 uniform mat4 g_WorldViewMatrix;
      3 uniform mat3 g_NormalMatrix;
      4 uniform mat4 g_ViewMatrix;
      5 
      6 uniform vec4 g_LightColor;
      7 uniform vec4 g_LightPosition;
      8 uniform vec4 g_AmbientLightColor;
      9 
     10 uniform float m_Shininess;
     11 
     12 attribute vec3 inPosition;
     13 attribute vec3 inNormal;
     14 attribute vec2 inTexCoord;
     15 attribute vec4 inTangent;
     16 
     17 varying vec3 vNormal;
     18 varying vec2 texCoord;
     19 varying vec3 vPosition;
     20 varying vec3 vnPosition;
     21 varying vec3 vViewDir;
     22 varying vec3 vnViewDir;
     23 varying vec4 vLightDir;
     24 varying vec4 vnLightDir;
     25 
     26 varying vec3 lightVec;
     27 
     28 varying vec4 AmbientSum;
     29 varying vec4 DiffuseSum;
     30 varying vec4 SpecularSum;
     31 
     32 #ifdef TRI_PLANAR_MAPPING
     33   varying vec4 wVertex;
     34   varying vec3 wNormal;
     35 #endif
     36 
     37 // JME3 lights in world space
     38 void lightComputeDir(in vec3 worldPos, in vec4 color, in vec4 position, out vec4 lightDir){
     39     float posLight = step(0.5, color.w);
     40     vec3 tempVec = position.xyz * sign(posLight - 0.5) - (worldPos * posLight);
     41     lightVec.xyz = tempVec;  
     42     float dist = length(tempVec);
     43     lightDir.w = clamp(1.0 - position.w * dist * posLight, 0.0, 1.0);
     44     lightDir.xyz = tempVec / vec3(dist);
     45 }
     46 
     47 
     48 void main(){
     49     vec4 pos = vec4(inPosition, 1.0);
     50     gl_Position = g_WorldViewProjectionMatrix * pos;
     51     #ifdef TERRAIN_GRID
     52     texCoord = inTexCoord * 2.0;
     53     #else
     54     texCoord = inTexCoord;
     55     #endif
     56 
     57     vec3 wvPosition = (g_WorldViewMatrix * pos).xyz;
     58     vec3 wvNormal  = normalize(g_NormalMatrix * inNormal);
     59     vec3 viewDir = normalize(-wvPosition);
     60 
     61     vec4 wvLightPos = (g_ViewMatrix * vec4(g_LightPosition.xyz,clamp(g_LightColor.w,0.0,1.0)));
     62     wvLightPos.w = g_LightPosition.w;
     63     vec4 lightColor = g_LightColor;
     64 
     65     //--------------------------
     66     // specific to normal maps:
     67     //--------------------------
     68     #if defined(NORMALMAP) || defined(NORMALMAP_1) || defined(NORMALMAP_2) || defined(NORMALMAP_3) || defined(NORMALMAP_4) || defined(NORMALMAP_5) || defined(NORMALMAP_6) || defined(NORMALMAP_7) || defined(NORMALMAP_8) || defined(NORMALMAP_9) || defined(NORMALMAP_10) || defined(NORMALMAP_11)
     69       vec3 wvTangent = normalize(g_NormalMatrix * inTangent.xyz);
     70       vec3 wvBinormal = cross(wvNormal, wvTangent);
     71 
     72       mat3 tbnMat = mat3(wvTangent, wvBinormal * -inTangent.w,wvNormal);
     73 
     74       vPosition = wvPosition * tbnMat;
     75       vViewDir  = viewDir * tbnMat;
     76       lightComputeDir(wvPosition, lightColor, wvLightPos, vLightDir);
     77       vLightDir.xyz = (vLightDir.xyz * tbnMat).xyz;
     78     #else
     79 
     80     //-------------------------
     81     // general to all lighting
     82     //-------------------------
     83     vNormal = wvNormal;
     84 
     85     vPosition = wvPosition;
     86     vViewDir = viewDir;
     87 
     88     lightComputeDir(wvPosition, lightColor, wvLightPos, vLightDir);
     89 
     90     #endif
     91    
     92       //computing spot direction in view space and unpacking spotlight cos
     93   // spotVec=(g_ViewMatrix *vec4(g_LightDirection.xyz,0.0) );
     94   // spotVec.w=floor(g_LightDirection.w)*0.001;
     95   // lightVec.w = fract(g_LightDirection.w);
     96 
     97     AmbientSum  = vec4(0.2, 0.2, 0.2, 1.0) * g_AmbientLightColor; // Default: ambient color is dark gray
     98     DiffuseSum  = lightColor;
     99     SpecularSum = lightColor;
    100 
    101 
    102 #ifdef TRI_PLANAR_MAPPING
    103     wVertex = vec4(inPosition,0.0);
    104     wNormal = inNormal;
    105 #endif
    106 
    107 }