mittsu 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +3 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +39 -0
  8. data/Rakefile +7 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/examples/01_-_Default1noCulling.png +0 -0
  12. data/examples/01_scene_example.rb +14 -0
  13. data/examples/02_box_mesh_example.rb +30 -0
  14. data/examples/02_sphere_mesh_example.rb +30 -0
  15. data/examples/03_complex_object_example.rb +52 -0
  16. data/examples/04_ambient_light_example.rb +33 -0
  17. data/examples/04_dir_light_example.rb +36 -0
  18. data/examples/04_hemi_light_example.rb +30 -0
  19. data/examples/04_point_light_example.rb +50 -0
  20. data/examples/04_spot_light_example.rb +44 -0
  21. data/examples/05_earth_example.rb +42 -0
  22. data/examples/05_earth_moon_example.rb +46 -0
  23. data/examples/05_texture_example.rb +32 -0
  24. data/examples/06_cube_texture_example.rb +36 -0
  25. data/examples/06_skybox_example.rb +60 -0
  26. data/examples/07_earth_normal_example.rb +36 -0
  27. data/examples/08_shadow_example.rb +87 -0
  28. data/examples/09_line_example.rb +52 -0
  29. data/examples/10_obj_loader_example.rb +68 -0
  30. data/examples/11_character_input_example.rb +18 -0
  31. data/examples/11_continuous_keyboard_input_example.rb +35 -0
  32. data/examples/11_keyboard_input_example.rb +43 -0
  33. data/examples/12_mouse_click_example.rb +38 -0
  34. data/examples/12_mouse_motion_example.rb +35 -0
  35. data/examples/12_mouse_scroll_example.rb +36 -0
  36. data/examples/12_orbit_zoom_example.rb +68 -0
  37. data/examples/13_joystick_example.rb +80 -0
  38. data/examples/cubemap/tron_bk.png +0 -0
  39. data/examples/cubemap/tron_dn.png +0 -0
  40. data/examples/cubemap/tron_ft.png +0 -0
  41. data/examples/cubemap/tron_lf.png +0 -0
  42. data/examples/cubemap/tron_rt.png +0 -0
  43. data/examples/cubemap/tron_up.png +0 -0
  44. data/examples/earth.png +0 -0
  45. data/examples/earth_normal.png +0 -0
  46. data/examples/example_helper.rb +2 -0
  47. data/examples/male-02-1noCulling.png +0 -0
  48. data/examples/male02.mtl +54 -0
  49. data/examples/male02.obj +13888 -0
  50. data/examples/moon.png +0 -0
  51. data/examples/orig_02_-_Defaul1noCulling.png +0 -0
  52. data/examples/texture.png +0 -0
  53. data/lib/mittsu.rb +15 -0
  54. data/lib/mittsu/cameras.rb +4 -0
  55. data/lib/mittsu/cameras/camera.rb +34 -0
  56. data/lib/mittsu/cameras/cube_camera.rb +74 -0
  57. data/lib/mittsu/cameras/orthographic_camera.rb +53 -0
  58. data/lib/mittsu/cameras/perspective_camera.rb +115 -0
  59. data/lib/mittsu/constants.rb +160 -0
  60. data/lib/mittsu/core.rb +10 -0
  61. data/lib/mittsu/core/buffer_attribute.rb +87 -0
  62. data/lib/mittsu/core/buffer_geometry.rb +694 -0
  63. data/lib/mittsu/core/clock.rb +44 -0
  64. data/lib/mittsu/core/dynamic_buffer_attribute.rb +16 -0
  65. data/lib/mittsu/core/event_dispatcher.rb +39 -0
  66. data/lib/mittsu/core/face3.rb +30 -0
  67. data/lib/mittsu/core/geometry.rb +596 -0
  68. data/lib/mittsu/core/hash_array.rb +36 -0
  69. data/lib/mittsu/core/hash_object.rb +19 -0
  70. data/lib/mittsu/core/object_3d.rb +421 -0
  71. data/lib/mittsu/core/raycaster.rb +78 -0
  72. data/lib/mittsu/extras.rb +3 -0
  73. data/lib/mittsu/extras/geometries.rb +2 -0
  74. data/lib/mittsu/extras/geometries/box_geometry.rb +108 -0
  75. data/lib/mittsu/extras/geometries/sphere_geometry.rb +88 -0
  76. data/lib/mittsu/extras/helpers.rb +1 -0
  77. data/lib/mittsu/extras/helpers/camera_helper.rb +155 -0
  78. data/lib/mittsu/extras/image.rb +3 -0
  79. data/lib/mittsu/extras/image_utils.rb +80 -0
  80. data/lib/mittsu/lights.rb +7 -0
  81. data/lib/mittsu/lights/ambient_light.rb +16 -0
  82. data/lib/mittsu/lights/area_light.rb +24 -0
  83. data/lib/mittsu/lights/directional_light.rb +131 -0
  84. data/lib/mittsu/lights/hemisphere_light.rb +29 -0
  85. data/lib/mittsu/lights/light.rb +21 -0
  86. data/lib/mittsu/lights/point_light.rb +27 -0
  87. data/lib/mittsu/lights/spot_light.rb +104 -0
  88. data/lib/mittsu/loaders.rb +7 -0
  89. data/lib/mittsu/loaders/cache.rb +53 -0
  90. data/lib/mittsu/loaders/file_loader.rb +22 -0
  91. data/lib/mittsu/loaders/image_loader.rb +32 -0
  92. data/lib/mittsu/loaders/loader.rb +212 -0
  93. data/lib/mittsu/loaders/loading_manager.rb +17 -0
  94. data/lib/mittsu/loaders/mtl_loader.rb +242 -0
  95. data/lib/mittsu/loaders/obj_mtl_loader.rb +225 -0
  96. data/lib/mittsu/materials.rb +7 -0
  97. data/lib/mittsu/materials/line_basic_material.rb +39 -0
  98. data/lib/mittsu/materials/material.rb +156 -0
  99. data/lib/mittsu/materials/mesh_basic_material.rb +122 -0
  100. data/lib/mittsu/materials/mesh_face_material.rb +30 -0
  101. data/lib/mittsu/materials/mesh_lambert_material.rb +126 -0
  102. data/lib/mittsu/materials/mesh_phong_material.rb +152 -0
  103. data/lib/mittsu/materials/shader_material.rb +108 -0
  104. data/lib/mittsu/math.rb +105 -0
  105. data/lib/mittsu/math/box2.rb +135 -0
  106. data/lib/mittsu/math/box3.rb +194 -0
  107. data/lib/mittsu/math/color.rb +252 -0
  108. data/lib/mittsu/math/color_keywords.rb +151 -0
  109. data/lib/mittsu/math/euler.rb +182 -0
  110. data/lib/mittsu/math/frustum.rb +106 -0
  111. data/lib/mittsu/math/line3.rb +76 -0
  112. data/lib/mittsu/math/matrix3.rb +163 -0
  113. data/lib/mittsu/math/matrix4.rb +581 -0
  114. data/lib/mittsu/math/plane.rb +128 -0
  115. data/lib/mittsu/math/quaternion.rb +309 -0
  116. data/lib/mittsu/math/ray.rb +292 -0
  117. data/lib/mittsu/math/sphere.rb +91 -0
  118. data/lib/mittsu/math/spline.rb +128 -0
  119. data/lib/mittsu/math/triangle.rb +121 -0
  120. data/lib/mittsu/math/vector2.rb +238 -0
  121. data/lib/mittsu/math/vector3.rb +491 -0
  122. data/lib/mittsu/math/vector4.rb +414 -0
  123. data/lib/mittsu/objects.rb +3 -0
  124. data/lib/mittsu/objects/group.rb +8 -0
  125. data/lib/mittsu/objects/line.rb +143 -0
  126. data/lib/mittsu/objects/mesh.rb +243 -0
  127. data/lib/mittsu/renderers.rb +1 -0
  128. data/lib/mittsu/renderers/glfw_window.rb +216 -0
  129. data/lib/mittsu/renderers/opengl/opengl_debug.rb +38 -0
  130. data/lib/mittsu/renderers/opengl/opengl_program.rb +402 -0
  131. data/lib/mittsu/renderers/opengl/opengl_shader.rb +58 -0
  132. data/lib/mittsu/renderers/opengl/opengl_state.rb +207 -0
  133. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +416 -0
  134. data/lib/mittsu/renderers/opengl_render_target.rb +87 -0
  135. data/lib/mittsu/renderers/opengl_renderer.rb +3376 -0
  136. data/lib/mittsu/renderers/shaders/shader_chunk.rb +12 -0
  137. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_fragment.glsl +5 -0
  138. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_pars_fragment.glsl +5 -0
  139. data/lib/mittsu/renderers/shaders/shader_chunk/alphatest_fragment.glsl +5 -0
  140. data/lib/mittsu/renderers/shaders/shader_chunk/bumpmap_pars_fragment.glsl +40 -0
  141. data/lib/mittsu/renderers/shaders/shader_chunk/color_fragment.glsl +5 -0
  142. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_fragment.glsl +5 -0
  143. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_vertex.glsl +5 -0
  144. data/lib/mittsu/renderers/shaders/shader_chunk/color_vertex.glsl +5 -0
  145. data/lib/mittsu/renderers/shaders/shader_chunk/common.glsl +60 -0
  146. data/lib/mittsu/renderers/shaders/shader_chunk/default_vertex.glsl +15 -0
  147. data/lib/mittsu/renderers/shaders/shader_chunk/defaultnormal_vertex.glsl +21 -0
  148. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_fragment.glsl +62 -0
  149. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_fragment.glsl +21 -0
  150. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_vertex.glsl +7 -0
  151. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_vertex.glsl +17 -0
  152. data/lib/mittsu/renderers/shaders/shader_chunk/fog_fragment.glsl +26 -0
  153. data/lib/mittsu/renderers/shaders/shader_chunk/fog_pars_fragment.glsl +15 -0
  154. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_fragment.glsl +5 -0
  155. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_fragment.glsl +6 -0
  156. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_vertex.glsl +5 -0
  157. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_vertex.glsl +5 -0
  158. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_pars_vertex.glsl +43 -0
  159. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_vertex.glsl +196 -0
  160. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_fragment.glsl +243 -0
  161. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_fragment.glsl +58 -0
  162. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_vertex.glsl +5 -0
  163. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_vertex.glsl +5 -0
  164. data/lib/mittsu/renderers/shaders/shader_chunk/linear_to_gamma_fragment.glsl +2 -0
  165. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_fragment.glsl +5 -0
  166. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_fragment.glsl +12 -0
  167. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_vertex.glsl +11 -0
  168. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_vertex.glsl +15 -0
  169. data/lib/mittsu/renderers/shaders/shader_chunk/map_fragment.glsl +9 -0
  170. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_fragment.glsl +11 -0
  171. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_vertex.glsl +6 -0
  172. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_fragment.glsl +5 -0
  173. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_pars_fragment.glsl +6 -0
  174. data/lib/mittsu/renderers/shaders/shader_chunk/map_vertex.glsl +5 -0
  175. data/lib/mittsu/renderers/shaders/shader_chunk/morphnormal_vertex.glsl +12 -0
  176. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_pars_vertex.glsl +13 -0
  177. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_vertex.glsl +20 -0
  178. data/lib/mittsu/renderers/shaders/shader_chunk/normalmap_pars_fragment.glsl +27 -0
  179. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +217 -0
  180. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_fragment.glsl +19 -0
  181. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_vertex.glsl +6 -0
  182. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_vertex.glsl +9 -0
  183. data/lib/mittsu/renderers/shaders/shader_chunk/skinbase_vertex.glsl +8 -0
  184. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_pars_vertex.glsl +47 -0
  185. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_vertex.glsl +20 -0
  186. data/lib/mittsu/renderers/shaders/shader_chunk/skinnormal_vertex.glsl +20 -0
  187. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_fragment.glsl +12 -0
  188. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_pars_fragment.glsl +5 -0
  189. data/lib/mittsu/renderers/shaders/shader_chunk/worldpos_vertex.glsl +17 -0
  190. data/lib/mittsu/renderers/shaders/shader_lib.rb +420 -0
  191. data/lib/mittsu/renderers/shaders/uniforms_lib.rb +107 -0
  192. data/lib/mittsu/renderers/shaders/uniforms_utils.rb +31 -0
  193. data/lib/mittsu/scenes.rb +1 -0
  194. data/lib/mittsu/scenes/scene.rb +27 -0
  195. data/lib/mittsu/textures.rb +5 -0
  196. data/lib/mittsu/textures/compressed_texture.rb +30 -0
  197. data/lib/mittsu/textures/cube_texture.rb +19 -0
  198. data/lib/mittsu/textures/data_texture.rb +17 -0
  199. data/lib/mittsu/textures/texture.rb +92 -0
  200. data/lib/mittsu/textures/video_texture.rb +17 -0
  201. data/lib/mittsu/version.rb +4 -0
  202. data/mittsu.gemspec +31 -0
  203. metadata +357 -0
@@ -0,0 +1,12 @@
1
+ module Mittsu
2
+ ShaderChunk = {}.tap do |chunks|
3
+ Dir.new(File.join(__dir__, 'shader_chunk')).each do |file_name|
4
+ next unless file_name.end_with? '.glsl'
5
+ file_path = File.join(__dir__, 'shader_chunk', file_name)
6
+ chunk_name = File.basename(file_name, '.glsl')
7
+ chunk = File.read(file_path)
8
+ # chunk = "// #{chunk_name}\n#{chunk}"
9
+ chunks[chunk_name.to_sym] = chunk
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ #ifdef USE_ALPHAMAP
2
+
3
+ diffuseColor.a *= texture( alphaMap, vUv ).g;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_ALPHAMAP
2
+
3
+ uniform sampler2D alphaMap;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef ALPHATEST
2
+
3
+ if ( diffuseColor.a < ALPHATEST ) discard;
4
+
5
+ #endif
@@ -0,0 +1,40 @@
1
+ #ifdef USE_BUMPMAP
2
+
3
+ uniform sampler2D bumpMap;
4
+ uniform float bumpScale;
5
+
6
+ // Derivative maps - bump mapping unparametrized surfaces by Morten Mikkelsen
7
+ // http://mmikkelsen3d.blogspot.sk/2011/07/derivative-maps.html
8
+
9
+ // Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
10
+
11
+ vec2 dHdxy_fwd() {
12
+
13
+ vec2 dSTdx = dFdx( vUv );
14
+ vec2 dSTdy = dFdy( vUv );
15
+
16
+ float Hll = bumpScale * texture( bumpMap, vUv ).x;
17
+ float dBx = bumpScale * texture( bumpMap, vUv + dSTdx ).x - Hll;
18
+ float dBy = bumpScale * texture( bumpMap, vUv + dSTdy ).x - Hll;
19
+
20
+ return vec2( dBx, dBy );
21
+
22
+ }
23
+
24
+ vec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {
25
+
26
+ vec3 vSigmaX = dFdx( surf_pos );
27
+ vec3 vSigmaY = dFdy( surf_pos );
28
+ vec3 vN = surf_norm; // normalized
29
+
30
+ vec3 R1 = cross( vSigmaY, vN );
31
+ vec3 R2 = cross( vN, vSigmaX );
32
+
33
+ float fDet = dot( vSigmaX, R1 );
34
+
35
+ vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );
36
+ return normalize( abs( fDet ) * surf_norm - vGrad );
37
+
38
+ }
39
+
40
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_COLOR
2
+
3
+ diffuseColor.rgb *= vColor;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_COLOR
2
+
3
+ in vec3 vColor;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_COLOR
2
+
3
+ out vec3 vColor;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_COLOR
2
+
3
+ vColor.xyz = inputToLinear( color.xyz );
4
+
5
+ #endif
@@ -0,0 +1,60 @@
1
+ #define PI 3.14159
2
+ #define PI2 6.28318
3
+ #define RECIPROCAL_PI2 0.15915494
4
+ #define LOG2 1.442695
5
+ #define EPSILON 1e-6
6
+
7
+ float square( in float a ) { return a*a; }
8
+ vec2 square( in vec2 a ) { return vec2( a.x*a.x, a.y*a.y ); }
9
+ vec3 square( in vec3 a ) { return vec3( a.x*a.x, a.y*a.y, a.z*a.z ); }
10
+ vec4 square( in vec4 a ) { return vec4( a.x*a.x, a.y*a.y, a.z*a.z, a.w*a.w ); }
11
+ float saturate( in float a ) { return clamp( a, 0.0, 1.0 ); }
12
+ vec2 saturate( in vec2 a ) { return clamp( a, 0.0, 1.0 ); }
13
+ vec3 saturate( in vec3 a ) { return clamp( a, 0.0, 1.0 ); }
14
+ vec4 saturate( in vec4 a ) { return clamp( a, 0.0, 1.0 ); }
15
+ float average( in float a ) { return a; }
16
+ float average( in vec2 a ) { return ( a.x + a.y) * 0.5; }
17
+ float average( in vec3 a ) { return ( a.x + a.y + a.z) / 3.0; }
18
+ float average( in vec4 a ) { return ( a.x + a.y + a.z + a.w) * 0.25; }
19
+ float whiteCompliment( in float a ) { return saturate( 1.0 - a ); }
20
+ vec2 whiteCompliment( in vec2 a ) { return saturate( vec2(1.0) - a ); }
21
+ vec3 whiteCompliment( in vec3 a ) { return saturate( vec3(1.0) - a ); }
22
+ vec4 whiteCompliment( in vec4 a ) { return saturate( vec4(1.0) - a ); }
23
+ vec3 transformDirection( in vec3 normal, in mat4 matrix ) {
24
+ return normalize( ( matrix * vec4( normal, 0.0 ) ).xyz );
25
+ }
26
+ // http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations
27
+ vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {
28
+ return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );
29
+ }
30
+ vec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal) {
31
+ float distance = dot( planeNormal, point-pointOnPlane );
32
+ return point - distance * planeNormal;
33
+ }
34
+ float sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {
35
+ return sign( dot( point - pointOnPlane, planeNormal ) );
36
+ }
37
+ vec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {
38
+ return pointOnLine + lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) );
39
+ }
40
+ float calcLightAttenuation( float lightDistance, float cutoffDistance, float decayExponent ) {
41
+ if ( decayExponent > 0.0 ) {
42
+ return pow( saturate( 1.0 - lightDistance / cutoffDistance ), decayExponent );
43
+ }
44
+ return 1.0;
45
+ }
46
+
47
+ vec3 inputToLinear( in vec3 a ) {
48
+ #ifdef GAMMA_INPUT
49
+ return pow( a, vec3( float( GAMMA_FACTOR ) ) );
50
+ #else
51
+ return a;
52
+ #endif
53
+ }
54
+ vec3 linearToOutput( in vec3 a ) {
55
+ #ifdef GAMMA_OUTPUT
56
+ return pow( a, vec3( 1.0 / float( GAMMA_FACTOR ) ) );
57
+ #else
58
+ return a;
59
+ #endif
60
+ }
@@ -0,0 +1,15 @@
1
+ #ifdef USE_SKINNING
2
+
3
+ vec4 mvPosition = modelViewMatrix * skinned;
4
+
5
+ #elif defined( USE_MORPHTARGETS )
6
+
7
+ vec4 mvPosition = modelViewMatrix * vec4( morphed, 1.0 );
8
+
9
+ #else
10
+
11
+ vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
12
+
13
+ #endif
14
+
15
+ gl_Position = projectionMatrix * mvPosition;
@@ -0,0 +1,21 @@
1
+ #ifdef USE_SKINNING
2
+
3
+ vec3 objectNormal = skinnedNormal.xyz;
4
+
5
+ #elif defined( USE_MORPHNORMALS )
6
+
7
+ vec3 objectNormal = morphedNormal;
8
+
9
+ #else
10
+
11
+ vec3 objectNormal = normal;
12
+
13
+ #endif
14
+
15
+ #ifdef FLIP_SIDED
16
+
17
+ objectNormal = -objectNormal;
18
+
19
+ #endif
20
+
21
+ vec3 transformedNormal = normalMatrix * objectNormal;
@@ -0,0 +1,62 @@
1
+ #ifdef USE_ENVMAP
2
+
3
+ #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
4
+
5
+ vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );
6
+
7
+ // Transforming Normal Vectors with the Inverse Transformation
8
+ vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
9
+
10
+ #ifdef ENVMAP_MODE_REFLECTION
11
+
12
+ vec3 reflectVec = reflect( cameraToVertex, worldNormal );
13
+
14
+ #else
15
+
16
+ vec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );
17
+
18
+ #endif
19
+
20
+ #else
21
+
22
+ vec3 reflectVec = vReflect;
23
+
24
+ #endif
25
+
26
+ #ifdef DOUBLE_SIDED
27
+ float flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );
28
+ #else
29
+ float flipNormal = 1.0;
30
+ #endif
31
+
32
+ #ifdef ENVMAP_TYPE_CUBE
33
+ vec4 envColor = texture( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );
34
+
35
+ #elif defined( ENVMAP_TYPE_EQUIREC )
36
+ vec2 sampleUV;
37
+ sampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );
38
+ sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;
39
+ vec4 envColor = texture( envMap, sampleUV );
40
+
41
+ #elif defined( ENVMAP_TYPE_SPHERE )
42
+ vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));
43
+ vec4 envColor = texture( envMap, reflectView.xy * 0.5 + 0.5 );
44
+ #endif
45
+
46
+ envColor.xyz = inputToLinear( envColor.xyz );
47
+
48
+ #ifdef ENVMAP_BLENDING_MULTIPLY
49
+
50
+ outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );
51
+
52
+ #elif defined( ENVMAP_BLENDING_MIX )
53
+
54
+ outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );
55
+
56
+ #elif defined( ENVMAP_BLENDING_ADD )
57
+
58
+ outgoingLight += envColor.xyz * specularStrength * reflectivity;
59
+
60
+ #endif
61
+
62
+ #endif
@@ -0,0 +1,21 @@
1
+ #ifdef USE_ENVMAP
2
+
3
+ uniform float reflectivity;
4
+ #ifdef ENVMAP_TYPE_CUBE
5
+ uniform samplerCube envMap;
6
+ #else
7
+ uniform sampler2D envMap;
8
+ #endif
9
+ uniform float flipEnvMap;
10
+
11
+ #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
12
+
13
+ uniform float refractionRatio;
14
+
15
+ #else
16
+
17
+ in vec3 vReflect;
18
+
19
+ #endif
20
+
21
+ #endif
@@ -0,0 +1,7 @@
1
+ #if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )
2
+
3
+ out vec3 vReflect;
4
+
5
+ uniform float refractionRatio;
6
+
7
+ #endif
@@ -0,0 +1,17 @@
1
+ #if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP ) && ! defined( PHONG )
2
+
3
+ vec3 worldNormal = transformDirection( objectNormal, modelMatrix );
4
+
5
+ vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
6
+
7
+ #ifdef ENVMAP_MODE_REFLECTION
8
+
9
+ vReflect = reflect( cameraToVertex, worldNormal );
10
+
11
+ #else
12
+
13
+ vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
14
+
15
+ #endif
16
+
17
+ #endif
@@ -0,0 +1,26 @@
1
+ #ifdef USE_FOG
2
+
3
+ #ifdef USE_LOGDEPTHBUF_EXT
4
+
5
+ float depth = gl_FragDepthEXT / gl_FragCoord.w;
6
+
7
+ #else
8
+
9
+ float depth = gl_FragCoord.z / gl_FragCoord.w;
10
+
11
+ #endif
12
+
13
+ #ifdef FOG_EXP2
14
+
15
+ float fogFactor = exp2( - square( fogDensity ) * square( depth ) * LOG2 );
16
+ fogFactor = whiteCompliment( fogFactor );
17
+
18
+ #else
19
+
20
+ float fogFactor = smoothstep( fogNear, fogFar, depth );
21
+
22
+ #endif
23
+
24
+ outgoingLight = mix( outgoingLight, fogColor, fogFactor );
25
+
26
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifdef USE_FOG
2
+
3
+ uniform vec3 fogColor;
4
+
5
+ #ifdef FOG_EXP2
6
+
7
+ uniform float fogDensity;
8
+
9
+ #else
10
+
11
+ uniform float fogNear;
12
+ uniform float fogFar;
13
+ #endif
14
+
15
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_LIGHTMAP
2
+
3
+ outgoingLight *= diffuseColor.xyz * texture( lightMap, vUv2 ).xyz;
4
+
5
+ #endif
@@ -0,0 +1,6 @@
1
+ #ifdef USE_LIGHTMAP
2
+
3
+ in vec2 vUv2;
4
+ uniform sampler2D lightMap;
5
+
6
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_LIGHTMAP
2
+
3
+ out vec2 vUv2;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_LIGHTMAP
2
+
3
+ vUv2 = uv2;
4
+
5
+ #endif
@@ -0,0 +1,43 @@
1
+ uniform vec3 ambientLightColor;
2
+
3
+ #if MAX_DIR_LIGHTS > 0
4
+
5
+ uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];
6
+ uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];
7
+
8
+ #endif
9
+
10
+ #if MAX_HEMI_LIGHTS > 0
11
+
12
+ uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];
13
+ uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];
14
+ uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];
15
+
16
+ #endif
17
+
18
+ #if MAX_POINT_LIGHTS > 0
19
+
20
+ uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];
21
+ uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];
22
+ uniform float pointLightDistance[ MAX_POINT_LIGHTS ];
23
+ uniform float pointLightDecay[ MAX_POINT_LIGHTS ];
24
+
25
+ #endif
26
+
27
+ #if MAX_SPOT_LIGHTS > 0
28
+
29
+ uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];
30
+ uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];
31
+ uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];
32
+ uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];
33
+ uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];
34
+ uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];
35
+ uniform float spotLightDecay[ MAX_SPOT_LIGHTS ];
36
+
37
+ #endif
38
+
39
+ #ifdef WRAP_AROUND
40
+
41
+ uniform vec3 wrapRGB;
42
+
43
+ #endif
@@ -0,0 +1,196 @@
1
+ vLightFront = vec3( 0.0 );
2
+
3
+ #ifdef DOUBLE_SIDED
4
+
5
+ vLightBack = vec3( 0.0 );
6
+
7
+ #endif
8
+
9
+ transformedNormal = normalize( transformedNormal );
10
+
11
+ #if MAX_DIR_LIGHTS > 0
12
+
13
+ for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
14
+
15
+ vec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );
16
+
17
+ float dotProduct = dot( transformedNormal, dirVector );
18
+ vec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );
19
+
20
+ #ifdef DOUBLE_SIDED
21
+
22
+ vec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );
23
+
24
+ #ifdef WRAP_AROUND
25
+
26
+ vec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );
27
+
28
+ #endif
29
+
30
+ #endif
31
+
32
+ #ifdef WRAP_AROUND
33
+
34
+ vec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );
35
+ directionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );
36
+
37
+ #ifdef DOUBLE_SIDED
38
+
39
+ directionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );
40
+
41
+ #endif
42
+
43
+ #endif
44
+
45
+ vLightFront += directionalLightColor[ i ] * directionalLightWeighting;
46
+
47
+ #ifdef DOUBLE_SIDED
48
+
49
+ vLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;
50
+
51
+ #endif
52
+
53
+ }
54
+
55
+ #endif
56
+
57
+ #if MAX_POINT_LIGHTS > 0
58
+
59
+ for( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
60
+
61
+ vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );
62
+ vec3 lVector = lPosition.xyz - mvPosition.xyz;
63
+
64
+ float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );
65
+
66
+ lVector = normalize( lVector );
67
+ float dotProduct = dot( transformedNormal, lVector );
68
+
69
+ vec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );
70
+
71
+ #ifdef DOUBLE_SIDED
72
+
73
+ vec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );
74
+
75
+ #ifdef WRAP_AROUND
76
+
77
+ vec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );
78
+
79
+ #endif
80
+
81
+ #endif
82
+
83
+ #ifdef WRAP_AROUND
84
+
85
+ vec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );
86
+ pointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );
87
+
88
+ #ifdef DOUBLE_SIDED
89
+
90
+ pointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );
91
+
92
+ #endif
93
+
94
+ #endif
95
+
96
+ vLightFront += pointLightColor[ i ] * pointLightWeighting * attenuation;
97
+
98
+ #ifdef DOUBLE_SIDED
99
+
100
+ vLightBack += pointLightColor[ i ] * pointLightWeightingBack * attenuation;
101
+
102
+ #endif
103
+
104
+ }
105
+
106
+ #endif
107
+
108
+ #if MAX_SPOT_LIGHTS > 0
109
+
110
+ for( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
111
+
112
+ vec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );
113
+ vec3 lVector = lPosition.xyz - mvPosition.xyz;
114
+
115
+ float spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );
116
+
117
+ if ( spotEffect > spotLightAngleCos[ i ] ) {
118
+
119
+ spotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );
120
+
121
+ float attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );
122
+
123
+ lVector = normalize( lVector );
124
+
125
+ float dotProduct = dot( transformedNormal, lVector );
126
+ vec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );
127
+
128
+ #ifdef DOUBLE_SIDED
129
+
130
+ vec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );
131
+
132
+ #ifdef WRAP_AROUND
133
+
134
+ vec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );
135
+
136
+ #endif
137
+
138
+ #endif
139
+
140
+ #ifdef WRAP_AROUND
141
+
142
+ vec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );
143
+ spotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );
144
+
145
+ #ifdef DOUBLE_SIDED
146
+
147
+ spotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );
148
+
149
+ #endif
150
+
151
+ #endif
152
+
153
+ vLightFront += spotLightColor[ i ] * spotLightWeighting * attenuation * spotEffect;
154
+
155
+ #ifdef DOUBLE_SIDED
156
+
157
+ vLightBack += spotLightColor[ i ] * spotLightWeightingBack * attenuation * spotEffect;
158
+
159
+ #endif
160
+
161
+ }
162
+
163
+ }
164
+
165
+ #endif
166
+
167
+ #if MAX_HEMI_LIGHTS > 0
168
+
169
+ for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
170
+
171
+ vec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );
172
+
173
+ float dotProduct = dot( transformedNormal, lVector );
174
+
175
+ float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;
176
+ float hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;
177
+
178
+ vLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );
179
+
180
+ #ifdef DOUBLE_SIDED
181
+
182
+ vLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );
183
+
184
+ #endif
185
+
186
+ }
187
+
188
+ #endif
189
+
190
+ vLightFront += ambientLightColor;
191
+
192
+ #ifdef DOUBLE_SIDED
193
+
194
+ vLightBack += ambientLightColor;
195
+
196
+ #endif