mittsu 0.1.2 → 0.1.3
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 +4 -4
- data/README.md +1 -1
- data/lib/mittsu.rb +8 -0
- data/lib/mittsu/core/face3.rb +1 -1
- data/lib/mittsu/core/geometry.rb +0 -4
- data/lib/mittsu/core/object_3d.rb +7 -6
- data/lib/mittsu/extras/helpers/camera_helper.rb +2 -2
- data/lib/mittsu/materials/material.rb +0 -4
- data/lib/mittsu/renderers/opengl/core/{opengl_geometry.rb → geometry.rb} +23 -32
- data/lib/mittsu/renderers/opengl/core/{opengl_object_3d.rb → object_3d.rb} +20 -24
- data/lib/mittsu/renderers/opengl/lights/{opengl_ambient_light.rb → ambient_light.rb} +4 -4
- data/lib/mittsu/renderers/opengl/lights/{opengl_directional_light.rb → directional_light.rb} +4 -4
- data/lib/mittsu/renderers/opengl/lights/{opengl_hemisphere_light.rb → hemisphere_light.rb} +4 -7
- data/lib/mittsu/renderers/opengl/lights/light.rb +55 -0
- data/lib/mittsu/renderers/opengl/lights/{opengl_point_light.rb → point_light.rb} +5 -5
- data/lib/mittsu/renderers/opengl/lights/{opengl_spot_light.rb → spot_light.rb} +8 -8
- data/lib/mittsu/renderers/opengl/materials/{opengl_line_basic_material.rb → line_basic_material.rb} +3 -3
- data/lib/mittsu/renderers/opengl/materials/{opengl_material.rb → material.rb} +55 -56
- data/lib/mittsu/renderers/opengl/materials/mesh_basic_material.rb +21 -0
- data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_lambert_material.rb → mesh_lambert_material.rb} +9 -5
- data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_phong_material.rb → mesh_phong_material.rb} +11 -7
- data/lib/mittsu/renderers/opengl/materials/opengl_material_basics.rb +57 -0
- data/lib/mittsu/renderers/opengl/materials/{opengl_shader_material.rb → shader_material.rb} +1 -1
- data/lib/mittsu/renderers/opengl/objects/group.rb +9 -0
- data/lib/mittsu/renderers/opengl/objects/line.rb +45 -0
- data/lib/mittsu/renderers/opengl/objects/{opengl_mesh.rb → mesh.rb} +15 -22
- data/lib/mittsu/renderers/opengl/opengl_buffer.rb +4 -0
- data/lib/mittsu/renderers/opengl/opengl_debug.rb +5 -4
- data/lib/mittsu/renderers/opengl/opengl_default_target.rb +0 -4
- data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +2 -8
- data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +2 -1
- data/lib/mittsu/renderers/opengl/opengl_implementations.rb +24 -53
- data/lib/mittsu/renderers/opengl/opengl_lib.rb +62 -0
- data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +6 -6
- data/lib/mittsu/renderers/opengl/opengl_program.rb +3 -5
- data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +11 -12
- data/lib/mittsu/renderers/opengl/scenes/scene.rb +9 -0
- data/lib/mittsu/renderers/opengl/textures/{opengl_compressed_texture.rb → compressed_texture.rb} +5 -6
- data/lib/mittsu/renderers/opengl/textures/{opengl_cube_texture.rb → cube_texture.rb} +23 -21
- data/lib/mittsu/renderers/opengl/textures/{opengl_data_texture.rb → data_texture.rb} +3 -5
- data/lib/mittsu/renderers/opengl/textures/{opengl_texture.rb → texture.rb} +29 -33
- data/lib/mittsu/renderers/opengl_render_target.rb +5 -6
- data/lib/mittsu/renderers/opengl_renderer.rb +35 -44
- data/lib/mittsu/textures/texture.rb +0 -4
- data/lib/mittsu/version.rb +1 -1
- metadata +26 -24
- data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +0 -52
- data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +0 -69
- data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +0 -8
- data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +0 -54
- data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +0 -8
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class PointLight
|
3
3
|
TYPE = :point
|
4
4
|
|
5
5
|
class Cache < Struct.new(:length, :count, :colors, :distances, :positions, :decays)
|
@@ -15,9 +15,9 @@ module Mittsu
|
|
15
15
|
def setup_specific(index)
|
16
16
|
offset = index * 3;
|
17
17
|
|
18
|
-
OpenGLHelper.set_color_linear(@cache.colors, offset,
|
18
|
+
OpenGLHelper.set_color_linear(@cache.colors, offset, color, intensity)
|
19
19
|
|
20
|
-
@_vector3.set_from_matrix_position(
|
20
|
+
@_vector3.set_from_matrix_position(matrix_world)
|
21
21
|
|
22
22
|
positions = @cache.positions
|
23
23
|
positions[offset] = @_vector3.x
|
@@ -25,8 +25,8 @@ module Mittsu
|
|
25
25
|
positions[offset + 2] = @_vector3.z
|
26
26
|
|
27
27
|
# distance is 0 if decay is 0, because there is no attenuation at all.
|
28
|
-
@cache.distances[index] =
|
29
|
-
@cache.decays[index] =
|
28
|
+
@cache.distances[index] = distance
|
29
|
+
@cache.decays[index] = distance.zero? ? 0.0 : decay
|
30
30
|
end
|
31
31
|
|
32
32
|
def to_sym
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class SpotLight
|
3
3
|
TYPE = :spot
|
4
4
|
|
5
5
|
class Cache < Struct.new(:length, :count, :colors, :directions, :distances, :positions, :exponents, :angles_cos, :decays)
|
@@ -15,18 +15,18 @@ module Mittsu
|
|
15
15
|
def setup_specific(index)
|
16
16
|
offset = index * 3
|
17
17
|
|
18
|
-
OpenGLHelper.set_color_linear(@cache.colors, offset,
|
18
|
+
OpenGLHelper.set_color_linear(@cache.colors, offset, color, intensity)
|
19
19
|
|
20
|
-
@_direction.set_from_matrix_position(
|
20
|
+
@_direction.set_from_matrix_position(matrix_world)
|
21
21
|
|
22
22
|
positions = @cache.positions
|
23
23
|
positions[offset] = @_direction.x
|
24
24
|
positions[offset + 1] = @_direction.y
|
25
25
|
positions[offset + 2] = @_direction.z
|
26
26
|
|
27
|
-
@cache.distances[index] =
|
27
|
+
@cache.distances[index] = distance
|
28
28
|
|
29
|
-
@_vector3.set_from_matrix_position(
|
29
|
+
@_vector3.set_from_matrix_position(target.matrix_world)
|
30
30
|
@_direction.sub(@_vector3)
|
31
31
|
@_direction.normalize
|
32
32
|
|
@@ -35,9 +35,9 @@ module Mittsu
|
|
35
35
|
directions[offset + 1] = @_direction.y
|
36
36
|
directions[offset + 2] = @_direction.z
|
37
37
|
|
38
|
-
@cache.angles_cos[index] = Math.cos(
|
39
|
-
@cache.exponents[index] =
|
40
|
-
@cache.decays[index] =
|
38
|
+
@cache.angles_cos[index] = Math.cos(angle)
|
39
|
+
@cache.exponents[index] = exponent;
|
40
|
+
@cache.decays[index] = distance.zero? ? 0.0 : decay
|
41
41
|
end
|
42
42
|
|
43
43
|
def to_sym
|
data/lib/mittsu/renderers/opengl/materials/{opengl_line_basic_material.rb → line_basic_material.rb}
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class LineBasicMaterial
|
3
3
|
def refresh_uniforms(uniforms)
|
4
|
-
uniforms['diffuse'].value =
|
5
|
-
uniforms['opacity'].value =
|
4
|
+
uniforms['diffuse'].value = color
|
5
|
+
uniforms['opacity'].value = opacity
|
6
6
|
end
|
7
7
|
|
8
8
|
def init_shader
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class Material
|
3
3
|
# TODO: init_shader for these material-types
|
4
4
|
# MeshDepthMaterial => :depth, # TODO...
|
5
5
|
# MeshNormalMaterial => :normal, # TODO...
|
@@ -9,48 +9,47 @@ module Mittsu
|
|
9
9
|
attr_accessor :shadow_pass
|
10
10
|
attr_reader :shader, :uniforms_list
|
11
11
|
|
12
|
-
def
|
13
|
-
@material = material
|
12
|
+
def init(lights, fog, object, renderer)
|
14
13
|
@renderer = renderer
|
15
|
-
end
|
16
14
|
|
17
|
-
|
18
|
-
@material.add_event_listener(:dispose, @renderer.method(:on_material_dispose))
|
15
|
+
add_event_listener(:dispose, @renderer.method(:on_material_dispose))
|
19
16
|
|
20
17
|
init_shader
|
21
18
|
|
22
|
-
|
19
|
+
self.program = find_or_create_program(lights, fog, object)
|
23
20
|
|
24
|
-
count_supported_morph_attributes(
|
21
|
+
count_supported_morph_attributes(program.attributes)
|
25
22
|
|
26
23
|
@uniforms_list = get_uniforms_list
|
27
24
|
end
|
28
25
|
|
29
|
-
def set
|
30
|
-
|
31
|
-
|
26
|
+
def set(renderer)
|
27
|
+
@renderer = renderer
|
28
|
+
|
29
|
+
if transparent
|
30
|
+
@renderer.state.set_blending(blending, blend_equation, blend_src, blend_dst, blend_equation_alpha, blend_src_alpha, blend_dst_alpha)
|
32
31
|
else
|
33
32
|
@renderer.state.set_blending(NoBlending)
|
34
33
|
end
|
35
34
|
|
36
|
-
@renderer.state.set_depth_test(
|
37
|
-
@renderer.state.set_depth_write(
|
38
|
-
@renderer.state.set_color_write(
|
39
|
-
@renderer.state.set_polygon_offset(
|
35
|
+
@renderer.state.set_depth_test(depth_test)
|
36
|
+
@renderer.state.set_depth_write(depth_write)
|
37
|
+
@renderer.state.set_color_write(color_write)
|
38
|
+
@renderer.state.set_polygon_offset(polygon_offset, polygon_offset_factor, polygon_offset_units)
|
40
39
|
end
|
41
40
|
|
42
41
|
def needs_face_normals?
|
43
|
-
|
42
|
+
shading == FlatShading
|
44
43
|
end
|
45
44
|
|
46
45
|
def clear_custom_attributes
|
47
|
-
|
46
|
+
attributes.each do |attribute|
|
48
47
|
attribute.needs_update = false
|
49
48
|
end
|
50
49
|
end
|
51
50
|
|
52
51
|
def custom_attributes_dirty?
|
53
|
-
|
52
|
+
attributes.each do |attribute|
|
54
53
|
return true if attribute.needs_update
|
55
54
|
end
|
56
55
|
false
|
@@ -61,24 +60,24 @@ module Mittsu
|
|
61
60
|
end
|
62
61
|
|
63
62
|
def needs_camera_position_uniform?
|
64
|
-
|
63
|
+
env_map
|
65
64
|
end
|
66
65
|
|
67
66
|
def needs_view_matrix_uniform?
|
68
|
-
|
67
|
+
skinning
|
69
68
|
end
|
70
69
|
|
71
70
|
def needs_lights?
|
72
|
-
|
71
|
+
lights
|
73
72
|
end
|
74
73
|
|
75
74
|
protected
|
76
75
|
|
77
76
|
def init_shader
|
78
77
|
@shader = {
|
79
|
-
uniforms:
|
80
|
-
vertex_shader:
|
81
|
-
fragment_shader:
|
78
|
+
uniforms: uniforms,
|
79
|
+
vertex_shader: vertex_shader,
|
80
|
+
fragment_shader: fragment_shader
|
82
81
|
}
|
83
82
|
end
|
84
83
|
|
@@ -94,7 +93,7 @@ module Mittsu
|
|
94
93
|
}.each_with_object({
|
95
94
|
directional: 0, point: 0, spot: 0, hemi: 0, other: 0
|
96
95
|
}) { |light, counts|
|
97
|
-
counts[light.
|
96
|
+
counts[light.to_sym] += 1
|
98
97
|
}
|
99
98
|
end
|
100
99
|
|
@@ -142,11 +141,11 @@ module Mittsu
|
|
142
141
|
end
|
143
142
|
|
144
143
|
def count_supported_morph_attributes(attributes)
|
145
|
-
if
|
146
|
-
|
144
|
+
if morph_targets
|
145
|
+
self.num_supported_morph_normals = count_supported_morph_attribute(attributes, 'morphTarget', @renderer.max_morph_normals)
|
147
146
|
end
|
148
|
-
if
|
149
|
-
|
147
|
+
if morph_normals
|
148
|
+
self.num_supported_morph_normals = count_supported_morph_attribute(attributes, 'morphNormal', @renderer.max_morph_normals)
|
150
149
|
end
|
151
150
|
end
|
152
151
|
|
@@ -159,7 +158,7 @@ module Mittsu
|
|
159
158
|
|
160
159
|
def get_uniforms_list
|
161
160
|
@shader[:uniforms].map { |(key, uniform)|
|
162
|
-
location =
|
161
|
+
location = program.uniforms[key]
|
163
162
|
if location
|
164
163
|
[uniform, location]
|
165
164
|
end
|
@@ -177,34 +176,34 @@ module Mittsu
|
|
177
176
|
{
|
178
177
|
supports_vertex_textures: @renderer.supports_vertex_textures?,
|
179
178
|
|
180
|
-
map:
|
181
|
-
env_map:
|
182
|
-
env_map_mode:
|
183
|
-
light_map:
|
184
|
-
bump_map:
|
185
|
-
normal_map:
|
186
|
-
specular_map:
|
187
|
-
alpha_map:
|
179
|
+
map: !!map,
|
180
|
+
env_map: !!env_map,
|
181
|
+
env_map_mode: env_map && env_map.mapping,
|
182
|
+
light_map: !!light_map,
|
183
|
+
bump_map: !!light_map,
|
184
|
+
normal_map: !!normal_map,
|
185
|
+
specular_map: !!specular_map,
|
186
|
+
alpha_map: !!alpha_map,
|
188
187
|
|
189
|
-
combine:
|
188
|
+
combine: combine,
|
190
189
|
|
191
|
-
vertex_colors:
|
190
|
+
vertex_colors: vertex_colors,
|
192
191
|
|
193
192
|
fog: fog,
|
194
|
-
use_fog:
|
193
|
+
use_fog: fog,
|
195
194
|
# fog_exp: fog.is_a?(FogExp2), # TODO: when FogExp2 exists
|
196
195
|
|
197
|
-
flat_shading:
|
196
|
+
flat_shading: shading == FlatShading,
|
198
197
|
|
199
|
-
size_attenuation:
|
198
|
+
size_attenuation: size_attenuation,
|
200
199
|
logarithmic_depth_buffer: @renderer.logarithmic_depth_buffer,
|
201
200
|
|
202
|
-
skinning:
|
201
|
+
skinning: skinning,
|
203
202
|
max_bones: max_bones,
|
204
203
|
use_vertex_texture: @renderer.supports_bone_textures?,
|
205
204
|
|
206
|
-
morph_targets:
|
207
|
-
morph_normals:
|
205
|
+
morph_targets: morph_targets,
|
206
|
+
morph_normals: morph_normals,
|
208
207
|
max_morph_targets: @renderer.max_morph_targets,
|
209
208
|
max_morph_normals: @renderer.max_morph_normals,
|
210
209
|
|
@@ -219,11 +218,11 @@ module Mittsu
|
|
219
218
|
shadow_map_debug: @renderer.shadow_map_debug,
|
220
219
|
shadow_map_cascade: @renderer.shadow_map_cascade,
|
221
220
|
|
222
|
-
alpha_test:
|
223
|
-
metal:
|
224
|
-
wrap_around:
|
225
|
-
double_sided:
|
226
|
-
flip_sided:
|
221
|
+
alpha_test: alpha_test,
|
222
|
+
metal: metal,
|
223
|
+
wrap_around: wrap_around,
|
224
|
+
double_sided: side == DoubleSide,
|
225
|
+
flip_sided: side == BackSide
|
227
226
|
}
|
228
227
|
end
|
229
228
|
|
@@ -233,12 +232,12 @@ module Mittsu
|
|
233
232
|
if shader_id
|
234
233
|
chunks << shader_id
|
235
234
|
else
|
236
|
-
chunks <<
|
237
|
-
chunks <<
|
235
|
+
chunks << fragment_shader
|
236
|
+
chunks << vertex_shader
|
238
237
|
end
|
239
238
|
|
240
|
-
if
|
241
|
-
|
239
|
+
if !defines.nil?
|
240
|
+
defines.each do |(name, define)|
|
242
241
|
chunks << name
|
243
242
|
chunks << define
|
244
243
|
end
|
@@ -261,7 +260,7 @@ module Mittsu
|
|
261
260
|
end
|
262
261
|
|
263
262
|
if program.nil?
|
264
|
-
program = OpenGLProgram.new(@renderer, code,
|
263
|
+
program = OpenGLProgram.new(@renderer, code, self, parameters)
|
265
264
|
@renderer.programs.push(program)
|
266
265
|
|
267
266
|
@renderer.info[:memory][:programs] = @renderer.programs.length
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mittsu/renderers/opengl/materials/opengl_material_basics'
|
2
|
+
|
3
|
+
module Mittsu
|
4
|
+
class MeshBasicMaterial
|
5
|
+
include OpenGLMaterialBasics
|
6
|
+
|
7
|
+
def refresh_uniforms(uniforms)
|
8
|
+
refresh_uniforms_basic(uniforms)
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def init_shader
|
14
|
+
@shader = ShaderLib.create_shader(shader_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def shader_id
|
18
|
+
:basic
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,12 +1,16 @@
|
|
1
|
+
require 'mittsu/renderers/opengl/materials/opengl_material_basics'
|
2
|
+
|
1
3
|
module Mittsu
|
2
|
-
class
|
4
|
+
class MeshLambertMaterial
|
5
|
+
include OpenGLMaterialBasics
|
6
|
+
|
3
7
|
def refresh_uniforms(uniforms)
|
4
|
-
|
8
|
+
refresh_uniforms_basic(uniforms)
|
5
9
|
|
6
|
-
uniforms['emissive'].value =
|
10
|
+
uniforms['emissive'].value = emissive
|
7
11
|
|
8
|
-
if
|
9
|
-
uniforms['wrapRGB'].value.copy(
|
12
|
+
if wrap_around
|
13
|
+
uniforms['wrapRGB'].value.copy(wrap_rgb)
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_phong_material.rb → mesh_phong_material.rb}
RENAMED
@@ -1,19 +1,23 @@
|
|
1
|
+
require 'mittsu/renderers/opengl/materials/opengl_material_basics'
|
2
|
+
|
1
3
|
module Mittsu
|
2
|
-
class
|
4
|
+
class MeshPhongMaterial
|
5
|
+
include OpenGLMaterialBasics
|
6
|
+
|
3
7
|
def needs_face_normals?
|
4
8
|
false
|
5
9
|
end
|
6
10
|
|
7
11
|
def refresh_uniforms(uniforms)
|
8
|
-
|
12
|
+
refresh_uniforms_basic(uniforms)
|
9
13
|
|
10
|
-
uniforms['shininess'].value =
|
14
|
+
uniforms['shininess'].value = shininess
|
11
15
|
|
12
|
-
uniforms['emissive'].value =
|
13
|
-
uniforms['specular'].value =
|
16
|
+
uniforms['emissive'].value = emissive
|
17
|
+
uniforms['specular'].value = specular
|
14
18
|
|
15
|
-
if
|
16
|
-
uniforms['wrapRGB'].value.copy(
|
19
|
+
if wrap_around
|
20
|
+
uniforms['wrapRGB'].value.copy(wrap_rgb)
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Mittsu
|
2
|
+
module OpenGLMaterialBasics
|
3
|
+
def refresh_uniforms_basic(uniforms)
|
4
|
+
refresh_map_uniforms(uniforms)
|
5
|
+
refresh_env_map_uniforms(uniforms)
|
6
|
+
refresh_other_uniforms(uniforms)
|
7
|
+
end
|
8
|
+
|
9
|
+
def refresh_map_uniforms(uniforms)
|
10
|
+
uniforms['map'].value = map
|
11
|
+
uniforms['lightMap'].value = light_map
|
12
|
+
uniforms['specularMap'].value = specular_map
|
13
|
+
uniforms['alphaMap'].value = alpha_map
|
14
|
+
|
15
|
+
if bump_map
|
16
|
+
uniforms['bumpMap'].value = bump_map
|
17
|
+
uniforms['bumpScale'].value = bump_scale
|
18
|
+
end
|
19
|
+
|
20
|
+
if normal_map
|
21
|
+
uniforms['normalMap'].value = normal_map
|
22
|
+
uniforms['normalScale'].value.copy(normal_scale)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def refresh_env_map_uniforms(uniforms)
|
27
|
+
uv_scale_map = get_uv_scale_map
|
28
|
+
|
29
|
+
if uv_scale_map
|
30
|
+
offset = uv_scale_map.offset
|
31
|
+
repeat = uv_scale_map.repeat
|
32
|
+
|
33
|
+
uniforms['offsetRepeat'].value.set(offset.x, offset.y, repeat.x, repeat.y)
|
34
|
+
end
|
35
|
+
|
36
|
+
uniforms['envMap'].value = env_map
|
37
|
+
# TODO: when OpenGLRenderTargetCube exists
|
38
|
+
# uniforms['flipEnvMap'].value = envMap.is_a?(OpenGLRenderTargetCube) ? 1 : - 1
|
39
|
+
end
|
40
|
+
|
41
|
+
def refresh_other_uniforms(uniforms)
|
42
|
+
uniforms['opacity'].value = opacity
|
43
|
+
uniforms['diffuse'].value = color
|
44
|
+
|
45
|
+
uniforms['reflectivity'].value = reflectivity
|
46
|
+
uniforms['refractionRatio'].value = refraction_ratio
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_uv_scale_map
|
50
|
+
map ||
|
51
|
+
specular_map ||
|
52
|
+
normal_map ||
|
53
|
+
bump_map ||
|
54
|
+
alpha_map
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|