mittsu 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|