OffsetMappingVp.glsl
上传用户:xhbjoy
上传日期:2014-10-07
资源大小:38068k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. attribute vec3 tangent;
  2. uniform vec4 lightPosition; // object space 
  3. uniform vec4 lightPosition1; // object space 
  4. uniform vec4 eyePosition;   // object space 
  5. uniform vec4 spotDirection; // object space
  6. uniform vec4 spotDirection1; // object space
  7. uniform mat4 worldViewProj; // not actually used but here for compat with HLSL
  8. uniform mat4 worldMatrix;
  9. uniform mat4 texViewProj1;
  10. uniform mat4 texViewProj2;
  11. varying vec3 tangentEyeDir;
  12. varying vec3 tangentLightDir[2];
  13. varying vec3 tangentSpotDir[2];
  14. varying vec4 shadowUV[2];
  15. void main()
  16. {
  17. gl_Position = ftransform();
  18. vec4 worldPos = worldMatrix * gl_Vertex;
  19. shadowUV[0] = texViewProj1 * worldPos;
  20. shadowUV[1] = texViewProj2 * worldPos;
  21. // pass the main uvs straight through unchanged 
  22. gl_TexCoord[0] = gl_MultiTexCoord0;
  23. // calculate tangent space light vector 
  24. // Get object space light direction 
  25.     vec3 lightDir = normalize(lightPosition.xyz -  (gl_Vertex.xyz * lightPosition.w));
  26. vec3 lightDir1 = normalize(lightPosition1.xyz -  (gl_Vertex.xyz * lightPosition1.w));
  27. vec3 eyeDir = (eyePosition - gl_Vertex).xyz; 
  28. // Calculate the binormal (NB we assume both normal and tangent are 
  29. // already normalised) 
  30. vec3 binormal = cross(gl_Normal, tangent); 
  31. // Form a rotation matrix out of the vectors 
  32. mat3 rotation = mat3(tangent, binormal, gl_Normal); 
  33.     
  34. // Transform the light vector according to this matrix 
  35. tangentLightDir[0] = normalize(rotation * lightDir); 
  36. tangentLightDir[1] = normalize(rotation * lightDir1); 
  37. // Invert the Y on the eye dir since we'll be using this to alter UVs and
  38. // GL has Y inverted
  39. tangentEyeDir = normalize(rotation * eyeDir) * vec3(1, -1, 1); 
  40. tangentSpotDir[0] = normalize(rotation * -spotDirection.xyz);
  41. tangentSpotDir[1] = normalize(rotation * -spotDirection1.xyz);
  42. }