default.vertex.fx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. // Uniforms
  20. uniform mat4 world;
  21. uniform mat4 view;
  22. uniform mat4 worldViewProjection;
  23. #ifdef DIFFUSE
  24. varying vec2 vDiffuseUV;
  25. uniform mat4 diffuseMatrix;
  26. uniform vec2 vDiffuseInfos;
  27. #endif
  28. #ifdef AMBIENT
  29. varying vec2 vAmbientUV;
  30. uniform mat4 ambientMatrix;
  31. uniform vec2 vAmbientInfos;
  32. #endif
  33. #ifdef OPACITY
  34. varying vec2 vOpacityUV;
  35. uniform mat4 opacityMatrix;
  36. uniform vec2 vOpacityInfos;
  37. #endif
  38. #ifdef REFLECTION
  39. uniform vec3 vEyePosition;
  40. varying vec3 vReflectionUVW;
  41. uniform vec3 vReflectionInfos;
  42. uniform mat4 reflectionMatrix;
  43. #endif
  44. #ifdef EMISSIVE
  45. varying vec2 vEmissiveUV;
  46. uniform vec2 vEmissiveInfos;
  47. uniform mat4 emissiveMatrix;
  48. #endif
  49. #ifdef SPECULAR
  50. varying vec2 vSpecularUV;
  51. uniform vec2 vSpecularInfos;
  52. uniform mat4 specularMatrix;
  53. #endif
  54. #ifdef BUMP
  55. varying vec2 vBumpUV;
  56. uniform vec2 vBumpInfos;
  57. uniform mat4 bumpMatrix;
  58. #endif
  59. // Output
  60. varying vec3 vPositionW;
  61. varying vec3 vNormalW;
  62. #ifdef CLIPPLANE
  63. uniform vec4 vClipPlane;
  64. varying float fClipDistance;
  65. #endif
  66. #ifdef FOG
  67. varying float fFogDistance;
  68. #endif
  69. #ifdef SHADOWS
  70. #ifdef LIGHT0
  71. uniform mat4 lightMatrix0;
  72. varying vec4 vPositionFromLight0;
  73. #endif
  74. #ifdef LIGHT1
  75. uniform mat4 lightMatrix1;
  76. varying vec4 vPositionFromLight1;
  77. #endif
  78. #ifdef LIGHT2
  79. uniform mat4 lightMatrix2;
  80. varying vec4 vPositionFromLight2;
  81. #endif
  82. #ifdef LIGHT3
  83. uniform mat4 lightMatrix3;
  84. varying vec4 vPositionFromLight3;
  85. #endif
  86. #endif
  87. #ifdef REFLECTION
  88. vec3 computeReflectionCoords(float mode, vec4 worldPos, vec3 worldNormal)
  89. {
  90. if (mode == MAP_SPHERICAL)
  91. {
  92. vec3 coords = vec3(view * vec4(worldNormal, 0.0));
  93. return vec3(reflectionMatrix * vec4(coords, 1.0));
  94. }
  95. else if (mode == MAP_PLANAR)
  96. {
  97. vec3 viewDir = worldPos.xyz - vEyePosition;
  98. vec3 coords = normalize(reflect(viewDir, worldNormal));
  99. return vec3(reflectionMatrix * vec4(coords, 1));
  100. }
  101. else if (mode == MAP_CUBIC)
  102. {
  103. vec3 viewDir = worldPos.xyz - vEyePosition;
  104. vec3 coords = reflect(viewDir, worldNormal);
  105. return vec3(reflectionMatrix * vec4(coords, 0));
  106. }
  107. else if (mode == MAP_PROJECTION)
  108. {
  109. return vec3(reflectionMatrix * (view * worldPos));
  110. }
  111. else if (mode == MAP_SKYBOX)
  112. {
  113. return position;
  114. }
  115. return vec3(0, 0, 0);
  116. }
  117. #endif
  118. void main(void) {
  119. gl_Position = worldViewProjection * vec4(position, 1.0);
  120. vec4 worldPos = world * vec4(position, 1.0);
  121. vPositionW = vec3(worldPos);
  122. vNormalW = normalize(vec3(world * vec4(normal, 0.0)));
  123. // Texture coordinates
  124. #ifndef UV1
  125. vec2 uv = vec2(0., 0.);
  126. #endif
  127. #ifndef UV2
  128. vec2 uv2 = vec2(0., 0.);
  129. #endif
  130. #ifdef DIFFUSE
  131. if (vDiffuseInfos.x == 0.)
  132. {
  133. vDiffuseUV = vec2(diffuseMatrix * vec4(uv, 1.0, 0.0));
  134. }
  135. else
  136. {
  137. vDiffuseUV = vec2(diffuseMatrix * vec4(uv2, 1.0, 0.0));
  138. }
  139. #endif
  140. #ifdef AMBIENT
  141. if (vAmbientInfos.x == 0.)
  142. {
  143. vAmbientUV = vec2(ambientMatrix * vec4(uv, 1.0, 0.0));
  144. }
  145. else
  146. {
  147. vAmbientUV = vec2(ambientMatrix * vec4(uv2, 1.0, 0.0));
  148. }
  149. #endif
  150. #ifdef OPACITY
  151. if (vOpacityInfos.x == 0.)
  152. {
  153. vOpacityUV = vec2(opacityMatrix * vec4(uv, 1.0, 0.0));
  154. }
  155. else
  156. {
  157. vOpacityUV = vec2(opacityMatrix * vec4(uv2, 1.0, 0.0));
  158. }
  159. #endif
  160. #ifdef REFLECTION
  161. vReflectionUVW = computeReflectionCoords(vReflectionInfos.x, vec4(vPositionW, 1.0), vNormalW);
  162. #endif
  163. #ifdef EMISSIVE
  164. if (vEmissiveInfos.x == 0.)
  165. {
  166. vEmissiveUV = vec2(emissiveMatrix * vec4(uv, 1.0, 0.0));
  167. }
  168. else
  169. {
  170. vEmissiveUV = vec2(emissiveMatrix * vec4(uv2, 1.0, 0.0));
  171. }
  172. #endif
  173. #ifdef SPECULAR
  174. if (vSpecularInfos.x == 0.)
  175. {
  176. vSpecularUV = vec2(specularMatrix * vec4(uv, 1.0, 0.0));
  177. }
  178. else
  179. {
  180. vSpecularUV = vec2(specularMatrix * vec4(uv2, 1.0, 0.0));
  181. }
  182. #endif
  183. #ifdef BUMP
  184. if (vBumpInfos.x == 0.)
  185. {
  186. vBumpUV = vec2(bumpMatrix * vec4(uv, 1.0, 0.0));
  187. }
  188. else
  189. {
  190. vBumpUV = vec2(bumpMatrix * vec4(uv2, 1.0, 0.0));
  191. }
  192. #endif
  193. // Clip plane
  194. #ifdef CLIPPLANE
  195. fClipDistance = dot(worldPos, vClipPlane);
  196. #endif
  197. // Fog
  198. #ifdef FOG
  199. fFogDistance = (view * worldPos).z;
  200. #endif
  201. // Shadows
  202. #ifdef SHADOWS
  203. #ifdef LIGHT0
  204. vPositionFromLight0 = lightMatrix0 * vec4(position, 1.0);
  205. #endif
  206. #ifdef LIGHT1
  207. vPositionFromLight1 = lightMatrix1 * vec4(position, 1.0);
  208. #endif
  209. #ifdef LIGHT2
  210. vPositionFromLight2 = lightMatrix2 * vec4(position, 1.0);
  211. #endif
  212. #ifdef LIGHT3
  213. vPositionFromLight3 = lightMatrix3 * vec4(position, 1.0);
  214. #endif
  215. #endif
  216. }