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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/examples/01_-_Default1noCulling.png +0 -0
- data/examples/01_scene_example.rb +14 -0
- data/examples/02_box_mesh_example.rb +30 -0
- data/examples/02_sphere_mesh_example.rb +30 -0
- data/examples/03_complex_object_example.rb +52 -0
- data/examples/04_ambient_light_example.rb +33 -0
- data/examples/04_dir_light_example.rb +36 -0
- data/examples/04_hemi_light_example.rb +30 -0
- data/examples/04_point_light_example.rb +50 -0
- data/examples/04_spot_light_example.rb +44 -0
- data/examples/05_earth_example.rb +42 -0
- data/examples/05_earth_moon_example.rb +46 -0
- data/examples/05_texture_example.rb +32 -0
- data/examples/06_cube_texture_example.rb +36 -0
- data/examples/06_skybox_example.rb +60 -0
- data/examples/07_earth_normal_example.rb +36 -0
- data/examples/08_shadow_example.rb +87 -0
- data/examples/09_line_example.rb +52 -0
- data/examples/10_obj_loader_example.rb +68 -0
- data/examples/11_character_input_example.rb +18 -0
- data/examples/11_continuous_keyboard_input_example.rb +35 -0
- data/examples/11_keyboard_input_example.rb +43 -0
- data/examples/12_mouse_click_example.rb +38 -0
- data/examples/12_mouse_motion_example.rb +35 -0
- data/examples/12_mouse_scroll_example.rb +36 -0
- data/examples/12_orbit_zoom_example.rb +68 -0
- data/examples/13_joystick_example.rb +80 -0
- data/examples/cubemap/tron_bk.png +0 -0
- data/examples/cubemap/tron_dn.png +0 -0
- data/examples/cubemap/tron_ft.png +0 -0
- data/examples/cubemap/tron_lf.png +0 -0
- data/examples/cubemap/tron_rt.png +0 -0
- data/examples/cubemap/tron_up.png +0 -0
- data/examples/earth.png +0 -0
- data/examples/earth_normal.png +0 -0
- data/examples/example_helper.rb +2 -0
- data/examples/male-02-1noCulling.png +0 -0
- data/examples/male02.mtl +54 -0
- data/examples/male02.obj +13888 -0
- data/examples/moon.png +0 -0
- data/examples/orig_02_-_Defaul1noCulling.png +0 -0
- data/examples/texture.png +0 -0
- data/lib/mittsu.rb +15 -0
- data/lib/mittsu/cameras.rb +4 -0
- data/lib/mittsu/cameras/camera.rb +34 -0
- data/lib/mittsu/cameras/cube_camera.rb +74 -0
- data/lib/mittsu/cameras/orthographic_camera.rb +53 -0
- data/lib/mittsu/cameras/perspective_camera.rb +115 -0
- data/lib/mittsu/constants.rb +160 -0
- data/lib/mittsu/core.rb +10 -0
- data/lib/mittsu/core/buffer_attribute.rb +87 -0
- data/lib/mittsu/core/buffer_geometry.rb +694 -0
- data/lib/mittsu/core/clock.rb +44 -0
- data/lib/mittsu/core/dynamic_buffer_attribute.rb +16 -0
- data/lib/mittsu/core/event_dispatcher.rb +39 -0
- data/lib/mittsu/core/face3.rb +30 -0
- data/lib/mittsu/core/geometry.rb +596 -0
- data/lib/mittsu/core/hash_array.rb +36 -0
- data/lib/mittsu/core/hash_object.rb +19 -0
- data/lib/mittsu/core/object_3d.rb +421 -0
- data/lib/mittsu/core/raycaster.rb +78 -0
- data/lib/mittsu/extras.rb +3 -0
- data/lib/mittsu/extras/geometries.rb +2 -0
- data/lib/mittsu/extras/geometries/box_geometry.rb +108 -0
- data/lib/mittsu/extras/geometries/sphere_geometry.rb +88 -0
- data/lib/mittsu/extras/helpers.rb +1 -0
- data/lib/mittsu/extras/helpers/camera_helper.rb +155 -0
- data/lib/mittsu/extras/image.rb +3 -0
- data/lib/mittsu/extras/image_utils.rb +80 -0
- data/lib/mittsu/lights.rb +7 -0
- data/lib/mittsu/lights/ambient_light.rb +16 -0
- data/lib/mittsu/lights/area_light.rb +24 -0
- data/lib/mittsu/lights/directional_light.rb +131 -0
- data/lib/mittsu/lights/hemisphere_light.rb +29 -0
- data/lib/mittsu/lights/light.rb +21 -0
- data/lib/mittsu/lights/point_light.rb +27 -0
- data/lib/mittsu/lights/spot_light.rb +104 -0
- data/lib/mittsu/loaders.rb +7 -0
- data/lib/mittsu/loaders/cache.rb +53 -0
- data/lib/mittsu/loaders/file_loader.rb +22 -0
- data/lib/mittsu/loaders/image_loader.rb +32 -0
- data/lib/mittsu/loaders/loader.rb +212 -0
- data/lib/mittsu/loaders/loading_manager.rb +17 -0
- data/lib/mittsu/loaders/mtl_loader.rb +242 -0
- data/lib/mittsu/loaders/obj_mtl_loader.rb +225 -0
- data/lib/mittsu/materials.rb +7 -0
- data/lib/mittsu/materials/line_basic_material.rb +39 -0
- data/lib/mittsu/materials/material.rb +156 -0
- data/lib/mittsu/materials/mesh_basic_material.rb +122 -0
- data/lib/mittsu/materials/mesh_face_material.rb +30 -0
- data/lib/mittsu/materials/mesh_lambert_material.rb +126 -0
- data/lib/mittsu/materials/mesh_phong_material.rb +152 -0
- data/lib/mittsu/materials/shader_material.rb +108 -0
- data/lib/mittsu/math.rb +105 -0
- data/lib/mittsu/math/box2.rb +135 -0
- data/lib/mittsu/math/box3.rb +194 -0
- data/lib/mittsu/math/color.rb +252 -0
- data/lib/mittsu/math/color_keywords.rb +151 -0
- data/lib/mittsu/math/euler.rb +182 -0
- data/lib/mittsu/math/frustum.rb +106 -0
- data/lib/mittsu/math/line3.rb +76 -0
- data/lib/mittsu/math/matrix3.rb +163 -0
- data/lib/mittsu/math/matrix4.rb +581 -0
- data/lib/mittsu/math/plane.rb +128 -0
- data/lib/mittsu/math/quaternion.rb +309 -0
- data/lib/mittsu/math/ray.rb +292 -0
- data/lib/mittsu/math/sphere.rb +91 -0
- data/lib/mittsu/math/spline.rb +128 -0
- data/lib/mittsu/math/triangle.rb +121 -0
- data/lib/mittsu/math/vector2.rb +238 -0
- data/lib/mittsu/math/vector3.rb +491 -0
- data/lib/mittsu/math/vector4.rb +414 -0
- data/lib/mittsu/objects.rb +3 -0
- data/lib/mittsu/objects/group.rb +8 -0
- data/lib/mittsu/objects/line.rb +143 -0
- data/lib/mittsu/objects/mesh.rb +243 -0
- data/lib/mittsu/renderers.rb +1 -0
- data/lib/mittsu/renderers/glfw_window.rb +216 -0
- data/lib/mittsu/renderers/opengl/opengl_debug.rb +38 -0
- data/lib/mittsu/renderers/opengl/opengl_program.rb +402 -0
- data/lib/mittsu/renderers/opengl/opengl_shader.rb +58 -0
- data/lib/mittsu/renderers/opengl/opengl_state.rb +207 -0
- data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +416 -0
- data/lib/mittsu/renderers/opengl_render_target.rb +87 -0
- data/lib/mittsu/renderers/opengl_renderer.rb +3376 -0
- data/lib/mittsu/renderers/shaders/shader_chunk.rb +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphatest_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/bumpmap_pars_fragment.glsl +40 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/common.glsl +60 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/default_vertex.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/defaultnormal_vertex.glsl +21 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_fragment.glsl +62 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_fragment.glsl +21 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_vertex.glsl +7 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_vertex.glsl +17 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/fog_fragment.glsl +26 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/fog_pars_fragment.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_fragment.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_pars_vertex.glsl +43 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_vertex.glsl +196 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_fragment.glsl +243 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_fragment.glsl +58 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/linear_to_gamma_fragment.glsl +2 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_fragment.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_vertex.glsl +11 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_vertex.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_fragment.glsl +9 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_fragment.glsl +11 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_vertex.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_pars_fragment.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphnormal_vertex.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_pars_vertex.glsl +13 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/normalmap_pars_fragment.glsl +27 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +217 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_fragment.glsl +19 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_vertex.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_vertex.glsl +9 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinbase_vertex.glsl +8 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinning_pars_vertex.glsl +47 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinning_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinnormal_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_fragment.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/worldpos_vertex.glsl +17 -0
- data/lib/mittsu/renderers/shaders/shader_lib.rb +420 -0
- data/lib/mittsu/renderers/shaders/uniforms_lib.rb +107 -0
- data/lib/mittsu/renderers/shaders/uniforms_utils.rb +31 -0
- data/lib/mittsu/scenes.rb +1 -0
- data/lib/mittsu/scenes/scene.rb +27 -0
- data/lib/mittsu/textures.rb +5 -0
- data/lib/mittsu/textures/compressed_texture.rb +30 -0
- data/lib/mittsu/textures/cube_texture.rb +19 -0
- data/lib/mittsu/textures/data_texture.rb +17 -0
- data/lib/mittsu/textures/texture.rb +92 -0
- data/lib/mittsu/textures/video_texture.rb +17 -0
- data/lib/mittsu/version.rb +4 -0
- data/mittsu.gemspec +31 -0
- 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
|
data/lib/mittsu/math.rb
ADDED
@@ -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
|