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,30 @@
1
+ require 'securerandom'
2
+
3
+ module Mittsu
4
+ class MeshFaceMaterial
5
+ def initialize(materials = [])
6
+ @uuid = SecureRandom.uuid
7
+ @type = 'MeshFaceMaterial'
8
+ @materials = materials
9
+ end
10
+
11
+ def to_json
12
+ {
13
+ metadata: {
14
+ version: 4.2,
15
+ type: 'material',
16
+ generator: 'MaterialExporter'
17
+ },
18
+ uuid: @uuid,
19
+ type: @type,
20
+ materials: @materials.map(&:to_json)
21
+ }
22
+ end
23
+
24
+ def clone
25
+ MeshFaceMaterial.new.tap do |mateiral|
26
+ material.materials = @materials.map(&:clone)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,126 @@
1
+ require 'mittsu/materials/material'
2
+
3
+ module Mittsu
4
+ # parameters: {
5
+ # color: <hex>,
6
+ # emissive: <hex>,
7
+ # opacity: <float>,
8
+ #
9
+ # map: Texture.new( <Image> ),
10
+ #
11
+ # light_map: Texture.( <Image> ),
12
+ #
13
+ # specular_map: Texture.new( <Image> ),
14
+ #
15
+ # alpha_map: Texture.new( <Image> ),
16
+ #
17
+ # env_map: TextureCube.new( [posx, negx, posy, negy, posz, negz]),
18
+ # combine: Multiply,
19
+ # reflectivity: <float>,
20
+ # refraction_ratio: <float>,
21
+ #
22
+ # shading: SmoothShading,
23
+ # blending: NormalBlending,
24
+ # depth_test: <bool>,
25
+ # depth_write: <bool>,
26
+ #
27
+ # wireframe: <boolean>,
28
+ # wireframe_linewidth: <float>,
29
+ #
30
+ # vertex_colors: NoColors / VertexColors / FaceColors,
31
+ #
32
+ # skinning: <bool>,
33
+ # morph_targets: <bool>,
34
+ # morph_normals: <bool>,
35
+ #
36
+ # fog: <bool>
37
+ # }
38
+
39
+ class MeshLambertMaterial < Material
40
+ attr_accessor :emissive, :shading, :wireframe_linewidth, :wireframe_linecap, :wireframe_linejoin
41
+
42
+ def initialize(parameters = {})
43
+ super()
44
+
45
+ @type = 'MeshLambertMaterial'
46
+
47
+ @color = Color.new(0xffffff) # diffuse
48
+ @emissive = Color.new(0x000000)
49
+
50
+ @wrap_around = false
51
+ @wrap_rbg = Vector3.new(1.0, 1.0, 1.0)
52
+
53
+ @map = nil
54
+
55
+ @light_map = nil
56
+
57
+ @specular_map = nil
58
+
59
+ @alpha_map = nil
60
+
61
+ @env_map = nil
62
+ @combine = MultiplyOperation
63
+ @reflectivity = 1.0
64
+ @refraction_ratio = 0.98
65
+
66
+ @fog = true
67
+
68
+ @shading = SmoothShading
69
+
70
+ @wireframe = false
71
+ @wireframe_linewidth = 1.0
72
+ @wireframe_linecap = :round
73
+ @wireframe_linejoin = :round
74
+
75
+ @vertex_colors = NoColors
76
+
77
+ @skinning = false
78
+ @morph_targets = false
79
+ @morph_normals = false
80
+
81
+ self.set_values(parameters)
82
+ end
83
+
84
+ def clone
85
+ material = MeshLambertMaterial.new
86
+
87
+ super(material)
88
+
89
+ material.color.copy(@color)
90
+ material.emissive.copy(@color)
91
+
92
+ material.wrap_around = @wrap_around
93
+ material.wrap_rgb.copy(@wrap_rbg)
94
+
95
+ material.map = @map
96
+
97
+ material.light_map = @light_map
98
+
99
+ material.specular_map = @specular_map
100
+
101
+ material.alpha_map = @alpha_map
102
+
103
+ material.env_map = @env_map
104
+ material.combine = @combine
105
+ material.reflectivity = @reflectivity
106
+ material.refraction_ratio = @refraction_ratio
107
+
108
+ material.fog = @fog
109
+
110
+ material.shading = @shading
111
+
112
+ material.wireframe = @wireframe
113
+ material.wireframe_linewidth = @wireframe_linewidth
114
+ material.wireframe_linecap = @wireframe_linecap
115
+ material.wireframe_linejoin = @wireframe_linejoin
116
+
117
+ material.vertex_colors = @vertex_colors
118
+
119
+ material.skinning = @skinning
120
+ material.morph_targets = @morph_targets
121
+ material.morph_normals = @morph_normals
122
+
123
+ material
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,152 @@
1
+ # parameters = {
2
+ # color: <hex>,
3
+ # emissive: <hex>,
4
+ # specular: <hex>,
5
+ # shininess: <float>,
6
+ # opacity: <float>,
7
+ #
8
+ # map: Texture.new(<Image>),
9
+ #
10
+ # lightMap: Texture.new(<Image>),
11
+ #
12
+ # bumpMap: Texture.new(<Image>),
13
+ # bumpScale: <float>,
14
+ #
15
+ # normalMap: Texture.new(<Image>),
16
+ # normalScale: <Vector2>,
17
+ #
18
+ # specularMap: Texture.new(<Image>),
19
+ #
20
+ # alphaMap: Texture.new(<Image>),
21
+ #
22
+ # envMap: TextureCube.new([posx, negx, posy, negy, posz, negz]),
23
+ # combine: Multiply,
24
+ # reflectivity: <float>,
25
+ # refractionRatio: <float>,
26
+ #
27
+ # shading: SmoothShading,
28
+ # blending: NormalBlending,
29
+ # depthTest: <bool>,
30
+ # depthWrite: <bool>,
31
+ #
32
+ # wireframe: <boolean>,
33
+ # wireframeLinewidth: <float>,
34
+ #
35
+ # vertexColors: NoColors / VertexColors / FaceColors,
36
+ #
37
+ # skinning: <bool>,
38
+ # morphTargets: <bool>,
39
+ # morphNormals: <bool>,
40
+ #
41
+ # fog: <bool>
42
+ # }
43
+
44
+ module Mittsu
45
+ class MeshPhongMaterial < Material
46
+ attr_accessor :normal_scale, :shininess, :emissive, :specular
47
+
48
+ def initialize(parameters = {})
49
+ super()
50
+
51
+ @type = 'MeshPhongMaterial'
52
+
53
+ @color = Color.new(0xffffff) # diffuse
54
+ @emissive = Color.new(0x000000)
55
+ @specular = Color.new(0x111111)
56
+ @shininess = 30.0
57
+
58
+ @metal = false
59
+
60
+ @wrap_around = false
61
+ @wrap_rgb = Vector3.new(1.0, 1.0, 1.0)
62
+
63
+ @map = nil
64
+
65
+ @light_map = nil
66
+
67
+ @bump_map = nil
68
+ @bump_scale = 1.0
69
+
70
+ @normal_map = nil
71
+ @normal_scale = Vector2.new(1.0, 1.0)
72
+
73
+ @specular_map = nil
74
+
75
+ @alpha_map = nil
76
+
77
+ @env_map = nil
78
+ @combine = MultiplyOperation
79
+ @reflectivity = 1.0
80
+ @refraction_ratio = 0.98
81
+
82
+ @fog = true
83
+
84
+ @shading = SmoothShading
85
+
86
+ @wireframe = false
87
+ @wireframe_linewidth = 1.0
88
+ @wireframe_linecap = 'round'
89
+ @wireframe_linejoin = 'round'
90
+
91
+ @vertex_colors = NoColors
92
+
93
+ @skinning = false
94
+ @morph_targets = false
95
+ @morph_normals = false
96
+
97
+ self.set_values(parameters)
98
+ end
99
+
100
+ def clone
101
+ material = MeshPhongMaterial.new
102
+
103
+ super(material)
104
+
105
+ material.color.copy(@color)
106
+ material.emissive.copy(@emissive)
107
+ material.specular.copy(@specular)
108
+ material.shininess = @shininess
109
+
110
+ material.metal = @metal
111
+
112
+ material.wrap_around = @wrap_around
113
+ material.wrap_rgb.copy(@wrap_rgb)
114
+
115
+ material.map = @map
116
+
117
+ material.light_map = @light_map
118
+
119
+ material.bump_map = @bump_map
120
+ material.bump_scale = @bump_scale
121
+
122
+ material.normal_map = @normal_map
123
+ material.normal_scale.copy(@normal_scale)
124
+
125
+ material.specular_map = @specular_map
126
+
127
+ material.alpha_map = @alpha_map
128
+
129
+ material.env_map = @env_map
130
+ material.combine = @combine
131
+ material.reflectivity = @reflectivity
132
+ material.refraction_ratio = @refraction_ratio
133
+
134
+ material.fog = @fog
135
+
136
+ material.shading = @shading
137
+
138
+ material.wireframe = @wireframe
139
+ material.wireframe_linewidth = @wireframe_linewidth
140
+ material.wireframe_linecap = @wireframe_linecap
141
+ material.wireframe_linejoin = @wireframe_linejoin
142
+
143
+ material.vertex_colors = @vertex_colors
144
+
145
+ material.skinning = @skinning
146
+ material.morph_targets = @morph_targets
147
+ material.morph_normals = @morph_normals
148
+
149
+ material
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,108 @@
1
+ # @author alteredq / http://alteredqualia.com/
2
+ #
3
+ # parameters = {
4
+ # defines: { "label" : "value" },
5
+ # uniforms: { "parameter1": { type: "f", value: 1.0 }, "parameter2": { type: "i" value2: 2 } },
6
+ #
7
+ # fragmentShader: <string>,
8
+ # vertexShader: <string>,
9
+ #
10
+ # shading: THREE.SmoothShading,
11
+ # blending: THREE.NormalBlending,
12
+ # depthTest: <bool>,
13
+ # depthWrite: <bool>,
14
+ #
15
+ # wireframe: <boolean>,
16
+ # wireframeLinewidth: <float>,
17
+ #
18
+ # lights: <bool>,
19
+ #
20
+ # vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,
21
+ #
22
+ # skinning: <bool>,
23
+ # morphTargets: <bool>,
24
+ # morphNormals: <bool>,
25
+ #
26
+ # fog: <bool>
27
+ # }
28
+
29
+ module Mittsu
30
+ class ShaderMaterial < Material
31
+ attr_accessor :fragment_shader, :vertex_shader, :attributes, :defines, :shading, :wireframe, :wireframe_linewidth, :fog, :lights, :vertex_colors, :skinning, :morph_targets, :morph_normals
32
+
33
+ def initialize(parameters = {})
34
+ super()
35
+
36
+ @type = 'ShaderMaterial'
37
+ @defines = {}
38
+ @uniforms = {}
39
+ @attributes = nil
40
+
41
+ @vertex_shader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'
42
+ @fragment_shader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'
43
+
44
+ @shading = SmoothShading
45
+
46
+ @line_width = 1
47
+
48
+ @wireframe = false
49
+ @wireframe_linewidth = 1
50
+
51
+ @fog = false # set to use scene fog
52
+
53
+ @lights = false # set to use scene lights
54
+
55
+ @vertex_colors = NoColors # set to use "color" attribute stream
56
+
57
+ @skinning = false # set to use skinning attribute streams
58
+
59
+ @morph_targets = false # set to use morph targets
60
+ @morph_normals = false # set to use morph normals
61
+
62
+ # When rendered geometry doesn't include these attributes but the material does,
63
+ # use these default values in WebGL. This avoids errors when buffer data is missing.
64
+ @default_attributes_values = {
65
+ 'color' => [1.0, 1.0, 1.0],
66
+ 'uv' => [0, 0],
67
+ 'uv2' => [0, 0]
68
+ }
69
+
70
+ # TODO: necessary?
71
+ # this.index0AttributeName = undefined;
72
+
73
+ self.set_values(parameters)
74
+ end
75
+
76
+ def clone
77
+ material = ShaderMaterial.new
78
+
79
+ super.clone(material)
80
+
81
+ material.fragment_shader = @fragment_shader
82
+ material.vertex_shader = @vertex_shader
83
+
84
+ material.uniforms = UniformsUtils.clone(@uniforms)
85
+
86
+ material.attributes = @attributes
87
+ material.defines = @defines
88
+
89
+ material.shading = @shading
90
+
91
+ material.wireframe = @wireframe
92
+ material.wireframe_linewidth = @wireframe_linewidth
93
+
94
+ material.fog = @fog
95
+
96
+ material.lights = @lights
97
+
98
+ material.vertex_colors = @vertex_colors
99
+
100
+ material.skinning = @skinning
101
+
102
+ material.morph_targets = @morph_targets
103
+ material.morph_normals = @morph_normals
104
+
105
+ material
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,105 @@
1
+ require 'mittsu/math/box2'
2
+ require 'mittsu/math/box3'
3
+ require 'mittsu/math/color'
4
+ require 'mittsu/math/color_keywords'
5
+ require 'mittsu/math/euler'
6
+ require 'mittsu/math/frustum'
7
+ require 'mittsu/math/line3'
8
+ require 'mittsu/math/matrix3'
9
+ require 'mittsu/math/matrix4'
10
+ require 'mittsu/math/plane'
11
+ require 'mittsu/math/quaternion'
12
+ require 'mittsu/math/ray'
13
+ require 'mittsu/math/sphere'
14
+ require 'mittsu/math/spline'
15
+ require 'mittsu/math/triangle'
16
+ require 'mittsu/math/vector2'
17
+ require 'mittsu/math/vector3'
18
+ require 'mittsu/math/vector4'
19
+
20
+ BuiltInMath = Math
21
+
22
+ module Mittsu
23
+ module Math
24
+ extend BuiltInMath
25
+ include BuiltInMath
26
+ BuiltInMath.methods.each { |m| public_class_method m }
27
+
28
+ def self.sign(x)
29
+ return Float::NAN unless x.is_a? Numeric
30
+ return Float::NAN if x.to_f.nan?
31
+ return x.to_f if x.zero?
32
+ return (x < 0) ? -1.0 : (x > 0) ? 1.0 : +x
33
+ end
34
+
35
+ def self.clamp(x, a, b)
36
+ ( x < a ) ? a : ( ( x > b ) ? b : x )
37
+ end
38
+
39
+ def self.clamp_bottom(x, a)
40
+ x < a ? a : x
41
+ end
42
+
43
+ def self.map_linear(x, a1, a2, b1, b2)
44
+ b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 )
45
+ end
46
+
47
+ def self.smooth_step(x, min, max)
48
+ return 0.0 if x <= min
49
+ return 1.0 if x >= max
50
+
51
+ x = ( x - min ) / ( max - min )
52
+
53
+ x * x * ( 3.0 - 2.0 * x )
54
+ end
55
+
56
+ def self.smoother_step(x, min, max)
57
+ return 0.0 if x <= min
58
+ return 1.0 if x >= max
59
+
60
+ x = ( x - min ) / ( max - min )
61
+
62
+ x * x * x * ( x * ( x * 6.0 - 15.0 ) + 10.0 )
63
+ end
64
+
65
+ def self.random16
66
+ ( 65280 * rand + 255 * rand ) / 65535
67
+ end
68
+
69
+ def self.rand_int(low, high)
70
+ self.rand_float( low, high ).floor
71
+ end
72
+
73
+ def self.rand_float(low, high)
74
+ low + rand * ( high - low )
75
+ end
76
+
77
+ def self.rand_float_spread(range)
78
+ range * ( 0.5 - rand )
79
+ end
80
+
81
+ DEGREE_TO_RADIANS_FACTOR = ::Math::PI / 180
82
+ def self.deg_to_rad(degrees)
83
+ degrees * DEGREE_TO_RADIANS_FACTOR
84
+ end
85
+
86
+ RADIANS_TO_DEGREES_FACTOR = 180 / ::Math::PI
87
+ def self.rad_to_deg(radians)
88
+ radians * RADIANS_TO_DEGREES_FACTOR
89
+ end
90
+
91
+ def self.power_of_two?(value)
92
+ ( value & ( value - 1 ) ) == 0 && value != 0
93
+ end
94
+
95
+ def self.next_power_of_two(value)
96
+ value -= 1
97
+ value |= value >> 1
98
+ value |= value >> 2
99
+ value |= value >> 4
100
+ value |= value >> 8
101
+ value |= value >> 16
102
+ value += 1
103
+ end
104
+ end
105
+ end