iedefault.vertex.fx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #ifdef GL_ES
  2. precision mediump float;
  3. #endif
  4. #define MAP_EXPLICIT 0.
  5. #define MAP_SPHERICAL 1.
  6. #define MAP_PLANAR 2.
  7. #define MAP_CUBIC 3.
  8. #define MAP_PROJECTION 4.
  9. #define MAP_SKYBOX 5.
  10. // Attributes
  11. attribute vec3 position;
  12. attribute vec3 normal;
  13. #ifdef UV1
  14. attribute vec2 uv;
  15. #endif
  16. #ifdef UV2
  17. attribute vec2 uv2;
  18. #endif
  19. #ifdef BONES
  20. attribute vec4 matricesIndices;
  21. attribute vec4 matricesWeights;
  22. #endif
  23. // Uniforms
  24. uniform mat4 world;
  25. uniform mat4 view;
  26. #ifdef DIFFUSE
  27. varying vec2 vDiffuseUV;
  28. uniform mat4 diffuseMatrix;
  29. uniform vec2 vDiffuseInfos;
  30. #endif
  31. #ifdef AMBIENT
  32. varying vec2 vAmbientUV;
  33. uniform mat4 ambientMatrix;
  34. uniform vec2 vAmbientInfos;
  35. #endif
  36. #ifdef OPACITY
  37. varying vec2 vOpacityUV;
  38. uniform mat4 opacityMatrix;
  39. uniform vec2 vOpacityInfos;
  40. #endif
  41. #ifdef REFLECTION
  42. uniform vec3 vEyePosition;
  43. varying vec3 vReflectionUVW;
  44. uniform vec3 vReflectionInfos;
  45. uniform mat4 reflectionMatrix;
  46. #endif
  47. #ifdef EMISSIVE
  48. varying vec2 vEmissiveUV;
  49. uniform vec2 vEmissiveInfos;
  50. uniform mat4 emissiveMatrix;
  51. #endif
  52. #ifdef SPECULAR
  53. varying vec2 vSpecularUV;
  54. uniform vec2 vSpecularInfos;
  55. uniform mat4 specularMatrix;
  56. #endif
  57. #ifdef BONES
  58. uniform mat4 mBones[BonesPerMesh];
  59. uniform mat4 viewProjection;
  60. #else
  61. uniform mat4 worldViewProjection;
  62. #endif
  63. // Output
  64. varying vec3 vPositionW;
  65. varying vec3 vNormalW;
  66. #ifdef CLIPPLANE
  67. uniform vec4 vClipPlane;
  68. varying float fClipDistance;
  69. #endif
  70. #ifdef FOG
  71. varying float fFogDistance;
  72. #endif
  73. #ifdef SHADOWS
  74. #ifdef LIGHT0
  75. uniform mat4 lightMatrix0;
  76. varying vec4 vPositionFromLight0;
  77. #endif
  78. #endif
  79. #ifdef REFLECTION
  80. vec3 computeReflectionCoords(float mode, vec4 worldPos, vec3 worldNormal)
  81. {
  82. if (mode == MAP_SPHERICAL)
  83. {
  84. vec3 coords = vec3(view * vec4(worldNormal, 0.0));
  85. return vec3(reflectionMatrix * vec4(coords, 1.0));
  86. }
  87. else if (mode == MAP_PLANAR)
  88. {
  89. vec3 viewDir = worldPos.xyz - vEyePosition;
  90. vec3 coords = normalize(reflect(viewDir, worldNormal));
  91. return vec3(reflectionMatrix * vec4(coords, 1));
  92. }
  93. else if (mode == MAP_CUBIC)
  94. {
  95. vec3 viewDir = worldPos.xyz - vEyePosition;
  96. vec3 coords = reflect(viewDir, worldNormal);
  97. return vec3(reflectionMatrix * vec4(coords, 0));
  98. }
  99. else if (mode == MAP_PROJECTION)
  100. {
  101. return vec3(reflectionMatrix * (view * worldPos));
  102. }
  103. else if (mode == MAP_SKYBOX)
  104. {
  105. return position;
  106. }
  107. return vec3(0, 0, 0);
  108. }
  109. #endif
  110. void main(void) {
  111. mat4 finalWorld;
  112. #ifdef BONES
  113. mat4 m0 = mBones[int(matricesIndices.x)] * matricesWeights.x;
  114. mat4 m1 = mBones[int(matricesIndices.y)] * matricesWeights.y;
  115. mat4 m2 = mBones[int(matricesIndices.z)] * matricesWeights.z;
  116. finalWorld = world * (m0 + m1 + m2);
  117. gl_Position = viewProjection * finalWorld * vec4(position, 1.0);
  118. #else
  119. finalWorld = world;
  120. gl_Position = worldViewProjection * vec4(position, 1.0);
  121. #endif
  122. vec4 worldPos = finalWorld * vec4(position, 1.0);
  123. vPositionW = vec3(worldPos);
  124. vNormalW = normalize(vec3(finalWorld * vec4(normal, 0.0)));
  125. // Texture coordinates
  126. #ifndef UV1
  127. vec2 uv = vec2(0., 0.);
  128. #endif
  129. #ifndef UV2
  130. vec2 uv2 = vec2(0., 0.);
  131. #endif
  132. #ifdef DIFFUSE
  133. if (vDiffuseInfos.x == 0.)
  134. {
  135. vDiffuseUV = vec2(diffuseMatrix * vec4(uv, 1.0, 0.0));
  136. }
  137. else
  138. {
  139. vDiffuseUV = vec2(diffuseMatrix * vec4(uv2, 1.0, 0.0));
  140. }
  141. #endif
  142. #ifdef AMBIENT
  143. if (vAmbientInfos.x == 0.)
  144. {
  145. vAmbientUV = vec2(ambientMatrix * vec4(uv, 1.0, 0.0));
  146. }
  147. else
  148. {
  149. vAmbientUV = vec2(ambientMatrix * vec4(uv2, 1.0, 0.0));
  150. }
  151. #endif
  152. #ifdef OPACITY
  153. if (vOpacityInfos.x == 0.)
  154. {
  155. vOpacityUV = vec2(opacityMatrix * vec4(uv, 1.0, 0.0));
  156. }
  157. else
  158. {
  159. vOpacityUV = vec2(opacityMatrix * vec4(uv2, 1.0, 0.0));
  160. }
  161. #endif
  162. #ifdef REFLECTION
  163. vReflectionUVW = computeReflectionCoords(vReflectionInfos.x, vec4(vPositionW, 1.0), vNormalW);
  164. #endif
  165. #ifdef EMISSIVE
  166. if (vEmissiveInfos.x == 0.)
  167. {
  168. vEmissiveUV = vec2(emissiveMatrix * vec4(uv, 1.0, 0.0));
  169. }
  170. else
  171. {
  172. vEmissiveUV = vec2(emissiveMatrix * vec4(uv2, 1.0, 0.0));
  173. }
  174. #endif
  175. #ifdef SPECULAR
  176. if (vSpecularInfos.x == 0.)
  177. {
  178. vSpecularUV = vec2(specularMatrix * vec4(uv, 1.0, 0.0));
  179. }
  180. else
  181. {
  182. vSpecularUV = vec2(specularMatrix * vec4(uv2, 1.0, 0.0));
  183. }
  184. #endif
  185. // Clip plane
  186. #ifdef CLIPPLANE
  187. fClipDistance = dot(worldPos, vClipPlane);
  188. #endif
  189. // Fog
  190. #ifdef FOG
  191. fFogDistance = (view * worldPos).z;
  192. #endif
  193. // Shadows
  194. #ifdef SHADOWS
  195. #ifdef LIGHT0
  196. vPositionFromLight0 = lightMatrix0 * vec4(position, 1.0);
  197. #endif
  198. #endif
  199. }