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

游戏引擎

开发平台:

Visual C++

  1. uniform vec4 worldMatrix3x4Array[240];
  2. uniform mat4 viewProjectionMatrix;
  3. uniform vec4 lightPos;
  4. uniform vec4 ambient;
  5. uniform vec4 lightDiffuseColour;
  6. void main()
  7. {
  8. // transform by indexed matrix
  9. // perform matrix multiplication manually since no 3x4 matrices
  10. vec3 transformedPos;
  11. vec3 transformedNorm;
  12. int instanceOffset = int(gl_MultiTexCoord1.x) * 3;
  13. for (int row = 0; row < 3; ++row)
  14. {
  15. vec4 matrixRow = worldMatrix3x4Array[instanceOffset + row];
  16. transformedPos[row] = dot(matrixRow, gl_Vertex);
  17. #if SHADOW_CASTER
  18. #else
  19. transformedNorm[row] = dot(matrixRow.xyz, gl_Normal);
  20. #endif
  21. }
  22. // view / projection
  23. gl_Position = viewProjectionMatrix * vec4(transformedPos,1);
  24. gl_TexCoord[0] = gl_MultiTexCoord0;
  25.     gl_FrontSecondaryColor = vec4(0);
  26. #if SHADOW_CASTER
  27. gl_FrontColor = ambient;
  28. #else
  29. vec3 lightDir = normalize(
  30. lightPos.xyz -  (transformedPos.xyz * lightPos.w));
  31. gl_FrontColor = ambient + clamp(dot(lightDir, transformedNorm),0.0,1.0) * lightDiffuseColour;
  32. #endif
  33. }