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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7b8204b98ee764f5d16b7f05080fdfef61e40d9
|
4
|
+
data.tar.gz: f0414817f8f8d34396c8e2db3fc78940e1e9da5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 794ce9888d5bec3b342cdce1b06111f2d194467ad8b8964f81eb9f84d09540bf62b10dfe1b24aa241a402b31e5c0bfb76cc64e9eb35146e4407be4d8781cd8e6
|
7
|
+
data.tar.gz: f193740db7fd18fb93c31e7daaae4c1ccbab6b6de93a6eb03e806da99dd3eb88e8069b365546b14ec3ce4ba35dcdc2bab2bc08799c969fe6e3c43bc8139a1d06
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Mittsu
|
2
2
|
|
3
|
-
[](https://badge.fury.io/rb/mittsu) [](https://gemnasium.com/jellymann/mittsu) [](https://circleci.com/gh/jellymann/mittsu/tree/master) [](https://badge.fury.io/rb/mittsu) [](https://gemnasium.com/jellymann/mittsu) [](https://circleci.com/gh/jellymann/mittsu/tree/master) [](https://codeclimate.com/github/jellymann/mittsu/coverage) [](https://codeclimate.com/github/jellymann/mittsu)
|
4
4
|
|
5
5
|
3D Graphics Library for Ruby
|
6
6
|
|
data/lib/mittsu.rb
CHANGED
data/lib/mittsu/core/face3.rb
CHANGED
data/lib/mittsu/core/geometry.rb
CHANGED
@@ -5,7 +5,9 @@ module Mittsu
|
|
5
5
|
class Object3D
|
6
6
|
include EventDispatcher
|
7
7
|
|
8
|
-
attr_accessor
|
8
|
+
attr_accessor :children, :up, :position, :rotation, :quaternion, :scale, :rotation_auto_update, :matrix, :matrix_world, :matrix_auto_update, :matrix_world_needs_update, :visible, :cast_shadow, :receive_shadow, :frustum_culled, :render_order, :user_data, :parent, :geometry
|
9
|
+
|
10
|
+
attr_writer :name
|
9
11
|
|
10
12
|
attr_reader :id, :uuid, :type
|
11
13
|
|
@@ -17,7 +19,6 @@ module Mittsu
|
|
17
19
|
|
18
20
|
@uuid = SecureRandom.uuid
|
19
21
|
|
20
|
-
@name = ''
|
21
22
|
@type = 'Object3D'
|
22
23
|
|
23
24
|
@children = []
|
@@ -56,6 +57,10 @@ module Mittsu
|
|
56
57
|
@user_data = {}
|
57
58
|
end
|
58
59
|
|
60
|
+
def name
|
61
|
+
@name || "<#{@type} ##{@id}>"
|
62
|
+
end
|
63
|
+
|
59
64
|
def apply_matrix(matrix)
|
60
65
|
@matrix.multiply_matrices(matrix, @matrix)
|
61
66
|
@matrix.decompose(@position, @quaternion, @scale)
|
@@ -336,10 +341,6 @@ module Mittsu
|
|
336
341
|
object
|
337
342
|
end
|
338
343
|
|
339
|
-
def implementation(renderer)
|
340
|
-
@_implementation ||= renderer.create_implementation(self)
|
341
|
-
end
|
342
|
-
|
343
344
|
protected
|
344
345
|
|
345
346
|
def jsonify
|
@@ -1,30 +1,21 @@
|
|
1
1
|
require 'mittsu/renderers/opengl/opengl_geometry_like'
|
2
2
|
|
3
3
|
module Mittsu
|
4
|
-
class
|
4
|
+
class Geometry
|
5
5
|
include OpenGLGeometryLike
|
6
6
|
|
7
7
|
attr_accessor :groups, :initted
|
8
|
-
attr_reader :id
|
9
|
-
|
10
|
-
def initialize(geometry, renderer)
|
11
|
-
@id = (@@id ||= 1).tap { @@id += 1 }
|
12
|
-
|
13
|
-
@geometry = geometry
|
14
|
-
@renderer = renderer
|
15
|
-
end
|
16
8
|
|
17
9
|
def init_geometry_groups(object)
|
18
|
-
object_impl = object.implementation(@renderer)
|
19
10
|
material = object.material
|
20
11
|
add_buffers = false
|
21
12
|
|
22
|
-
if @groups.nil? || @
|
13
|
+
if @groups.nil? || @groups_need_update
|
23
14
|
@renderer.remove_opengl_object(object)
|
24
15
|
|
25
16
|
@groups = make_groups(material.is_a?(MeshFaceMaterial))
|
26
17
|
|
27
|
-
@
|
18
|
+
@groups_need_update = false
|
28
19
|
end
|
29
20
|
|
30
21
|
# create separate VBOs per geometry chunk
|
@@ -35,29 +26,29 @@ module Mittsu
|
|
35
26
|
geometry_group.create_mesh_buffers
|
36
27
|
geometry_group.init_mesh_buffers(object)
|
37
28
|
|
38
|
-
@
|
39
|
-
@
|
40
|
-
@
|
41
|
-
@
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@
|
29
|
+
@vertices_need_update = true
|
30
|
+
@morph_targets_need_update = true
|
31
|
+
@elements_need_update = true
|
32
|
+
@uvs_need_update = true
|
33
|
+
@normals_need_update = true
|
34
|
+
@tangents_need_update = true
|
35
|
+
@colors_need_update = true
|
45
36
|
|
46
37
|
add_buffers = true
|
47
38
|
else
|
48
39
|
add_buffers = false
|
49
40
|
end
|
50
41
|
|
51
|
-
if add_buffers || !
|
42
|
+
if add_buffers || !object.active?
|
52
43
|
@renderer.add_opengl_object(geometry_group, object)
|
53
44
|
end
|
54
45
|
end
|
55
46
|
|
56
|
-
|
47
|
+
object.active = true
|
57
48
|
end
|
58
49
|
|
59
50
|
def init_line_buffers(object)
|
60
|
-
nvertices = @
|
51
|
+
nvertices = @vertices.length
|
61
52
|
|
62
53
|
@vertex_array = Array.new(nvertices * 3, 0.0) # Float32Array
|
63
54
|
@color_array = Array.new(nvertices * 3, 0.0) # Float32Array
|
@@ -79,8 +70,8 @@ module Mittsu
|
|
79
70
|
end
|
80
71
|
|
81
72
|
def set_line_buffers(hint)
|
82
|
-
if @
|
83
|
-
@
|
73
|
+
if @vertices_need_update
|
74
|
+
@vertices.each_with_index do |vertex, v|
|
84
75
|
offset = v * 3
|
85
76
|
|
86
77
|
@vertex_array[offset] = vertex.x
|
@@ -92,8 +83,8 @@ module Mittsu
|
|
92
83
|
glBufferData_easy(GL_ARRAY_BUFFER, @vertex_array, hint)
|
93
84
|
end
|
94
85
|
|
95
|
-
if @
|
96
|
-
@
|
86
|
+
if @colors_need_update
|
87
|
+
@colors.each_with_index do |color, c|
|
97
88
|
offset = c * 3
|
98
89
|
|
99
90
|
@color_array[offset] = color.r
|
@@ -105,8 +96,8 @@ module Mittsu
|
|
105
96
|
glBufferData_easy(GL_ARRAY_BUFFER, @color_array, hint)
|
106
97
|
end
|
107
98
|
|
108
|
-
if @
|
109
|
-
@
|
99
|
+
if @line_distances_need_update
|
100
|
+
@line_distances.each_with_index do |l, d|
|
110
101
|
@line_distance_array[d] = l
|
111
102
|
end
|
112
103
|
|
@@ -176,13 +167,13 @@ module Mittsu
|
|
176
167
|
|
177
168
|
hash_map = {}
|
178
169
|
|
179
|
-
num_morph_targets = @
|
180
|
-
num_morph_normals = @
|
170
|
+
num_morph_targets = @morph_targets.length
|
171
|
+
num_morph_normals = @morph_normals.length
|
181
172
|
|
182
173
|
groups = {}
|
183
174
|
groups_list = []
|
184
175
|
|
185
|
-
@
|
176
|
+
@faces.each_with_index do |face, f|
|
186
177
|
material_index = uses_face_material ? face.material_index : 0
|
187
178
|
|
188
179
|
if !hash_map.include? material_index
|
@@ -218,7 +209,7 @@ module Mittsu
|
|
218
209
|
def init_custom_attributes(object)
|
219
210
|
material = object.material
|
220
211
|
|
221
|
-
nvertices = @
|
212
|
+
nvertices = @vertices.length
|
222
213
|
|
223
214
|
if material.attributes
|
224
215
|
@custom_attributes_list ||= []
|
@@ -1,36 +1,29 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
3
|
-
attr_accessor :morph_target_influences
|
2
|
+
class Object3D
|
3
|
+
attr_accessor :morph_target_influences, :renderer
|
4
4
|
attr_reader :model_view_matrix
|
5
5
|
attr_writer :active
|
6
6
|
|
7
|
-
def initialize(object, renderer)
|
8
|
-
@object = object
|
9
|
-
@renderer = renderer
|
10
|
-
@_vector3 = Vector3.new
|
11
|
-
end
|
12
|
-
|
13
7
|
def active?
|
14
8
|
@active
|
15
9
|
end
|
16
10
|
|
17
11
|
def init
|
18
12
|
if !@initted
|
13
|
+
puts " --- INIT #{self.name}" if DEBUG
|
14
|
+
|
19
15
|
@initted = true
|
20
16
|
@model_view_matrix = Matrix4.new
|
21
17
|
@normal_matrix = Matrix3.new
|
22
18
|
|
23
|
-
|
19
|
+
add_event_listener(:removed, @renderer.method(:on_object_removed))
|
24
20
|
end
|
25
21
|
|
26
|
-
geometry = @object.geometry
|
27
|
-
|
28
22
|
if geometry.nil?
|
29
23
|
# ImmediateRenderObject
|
30
24
|
else
|
31
|
-
|
32
|
-
|
33
|
-
geometry_impl.initted = true
|
25
|
+
if !geometry.initted
|
26
|
+
geometry.initted = true
|
34
27
|
geometry.add_event_listener(:dispose, @renderer.method(:on_geometry_dispose))
|
35
28
|
if geometry.is_a?(BufferGeometry)
|
36
29
|
@renderer.info[:memory][:geometries] += 1
|
@@ -55,26 +48,30 @@ module Mittsu
|
|
55
48
|
add_opengl_object
|
56
49
|
# TODO: when ImmediateRenderObject exists
|
57
50
|
# if object.is_a? ImmediateRenderObject || object.immediate_render_callback
|
58
|
-
# add_buffer_immediate(@renderer.instance_variable_get(:@_opengl_objects_immediate),
|
51
|
+
# add_buffer_immediate(@renderer.instance_variable_get(:@_opengl_objects_immediate), self)
|
59
52
|
# end
|
60
53
|
end
|
61
54
|
end
|
62
55
|
|
63
|
-
def project
|
64
|
-
|
56
|
+
def project(renderer)
|
57
|
+
puts " --- PROJECT #{self.name}" if DEBUG
|
58
|
+
@renderer = renderer
|
59
|
+
return unless visible
|
65
60
|
init
|
66
61
|
|
67
62
|
# TODO!!! FIXME!!!
|
68
|
-
opengl_objects = @renderer.instance_variable_get(:@_opengl_objects)[
|
63
|
+
opengl_objects = @renderer.instance_variable_get(:@_opengl_objects)[id]
|
69
64
|
|
70
|
-
if opengl_objects && (
|
65
|
+
if opengl_objects && (!frustum_culled || @renderer.object_in_frustum?(self))
|
71
66
|
opengl_objects.each do |opengl_object|
|
72
67
|
# TODO!!! FIXME!!!
|
73
68
|
@renderer.send(:unroll_buffer_material, opengl_object)
|
74
69
|
|
75
70
|
opengl_object.render = true
|
76
71
|
if @renderer.sort_objects?
|
77
|
-
@_vector3.
|
72
|
+
@_vector3 ||= Vector3.new
|
73
|
+
|
74
|
+
@_vector3.set_from_matrix_position(matrix_world)
|
78
75
|
@_vector3.apply_projection(@renderer.proj_screen_matrix)
|
79
76
|
|
80
77
|
opengl_object[:z] = @_vector3.z
|
@@ -86,7 +83,7 @@ module Mittsu
|
|
86
83
|
end
|
87
84
|
|
88
85
|
def setup_matrices(camera)
|
89
|
-
@model_view_matrix.multiply_matrices(camera.matrix_world_inverse,
|
86
|
+
@model_view_matrix.multiply_matrices(camera.matrix_world_inverse, matrix_world)
|
90
87
|
@normal_matrix.normal_matrix(@model_view_matrix)
|
91
88
|
@model_view_matrix
|
92
89
|
end
|
@@ -104,7 +101,6 @@ module Mittsu
|
|
104
101
|
end
|
105
102
|
|
106
103
|
def buffer_material(geometry_group)
|
107
|
-
material = @object.material
|
108
104
|
if material.is_a?(MeshFaceMaterial)
|
109
105
|
material.materials[geometry_group.material_index]
|
110
106
|
else
|
@@ -123,8 +119,8 @@ module Mittsu
|
|
123
119
|
protected
|
124
120
|
|
125
121
|
def project_children
|
126
|
-
|
127
|
-
child.
|
122
|
+
children.each do |child|
|
123
|
+
child.project(@renderer)
|
128
124
|
end
|
129
125
|
end
|
130
126
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class AmbientLight
|
3
3
|
TYPE = :ambient
|
4
4
|
|
5
5
|
class Cache < Struct.new(:length, :count, :value)
|
@@ -16,9 +16,9 @@ module Mittsu
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def setup_specific(_)
|
19
|
-
@cache.value[0] +=
|
20
|
-
@cache.value[1] +=
|
21
|
-
@cache.value[2] +=
|
19
|
+
@cache.value[0] += color.r
|
20
|
+
@cache.value[1] += color.g
|
21
|
+
@cache.value[2] += color.b
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.null_remaining_lights(_); end
|
data/lib/mittsu/renderers/opengl/lights/{opengl_directional_light.rb → directional_light.rb}
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class DirectionalLight
|
3
3
|
TYPE = :directional
|
4
4
|
|
5
5
|
class Cache < Struct.new(:length, :count, :colors, :positions)
|
@@ -15,8 +15,8 @@ module Mittsu
|
|
15
15
|
def setup_specific(index)
|
16
16
|
offset = index * 3
|
17
17
|
|
18
|
-
@_direction.set_from_matrix_position(
|
19
|
-
@_vector3.set_from_matrix_position(
|
18
|
+
@_direction.set_from_matrix_position(matrix_world)
|
19
|
+
@_vector3.set_from_matrix_position(target.matrix_world)
|
20
20
|
@_direction.sub(@_vector3)
|
21
21
|
@_direction.normalize
|
22
22
|
|
@@ -25,7 +25,7 @@ module Mittsu
|
|
25
25
|
positions[offset + 1] = @_direction.y
|
26
26
|
positions[offset + 2] = @_direction.z
|
27
27
|
|
28
|
-
OpenGLHelper.set_color_linear(@cache.colors, offset,
|
28
|
+
OpenGLHelper.set_color_linear(@cache.colors, offset, color, intensity)
|
29
29
|
end
|
30
30
|
|
31
31
|
def to_sym
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Mittsu
|
2
|
-
class
|
2
|
+
class HemisphereLight
|
3
3
|
TYPE = :hemi
|
4
4
|
|
5
5
|
class Cache < Struct.new(:length, :count, :sky_colors, :ground_colors, :positions)
|
@@ -15,7 +15,7 @@ module Mittsu
|
|
15
15
|
def setup_specific(index)
|
16
16
|
offset = index * 3
|
17
17
|
|
18
|
-
@_direction.set_from_matrix_position(
|
18
|
+
@_direction.set_from_matrix_position(matrix_world)
|
19
19
|
@_direction.normalize
|
20
20
|
|
21
21
|
positions = @cache.positions
|
@@ -23,11 +23,8 @@ module Mittsu
|
|
23
23
|
positions[offset + 1] = @_direction.y
|
24
24
|
positions[offset + 2] = @_direction.z
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
OpenGLHelper.set_color_linear(@cache.sky_colors, offset, sky_color, @light.intensity )
|
30
|
-
OpenGLHelper.set_color_linear(@cache.ground_colors, offset, ground_color, @light.intensity)
|
26
|
+
OpenGLHelper.set_color_linear(@cache.sky_colors, offset, color, intensity)
|
27
|
+
OpenGLHelper.set_color_linear(@cache.ground_colors, offset, ground_color, intensity)
|
31
28
|
end
|
32
29
|
|
33
30
|
def self.null_remaining_lights(cache)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Mittsu
|
2
|
+
class Light
|
3
|
+
attr_accessor :camera_helper
|
4
|
+
|
5
|
+
# def initialize(light, renderer)
|
6
|
+
# super
|
7
|
+
# @light = light
|
8
|
+
# @light_renderer = renderer.light_renderer
|
9
|
+
#
|
10
|
+
#
|
11
|
+
# @_direction = Vector3.new
|
12
|
+
# @_vector3 = Vector3.new
|
13
|
+
# end
|
14
|
+
|
15
|
+
def type
|
16
|
+
self.class::TYPE
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup(light_renderer)
|
20
|
+
@light_renderer = light_renderer
|
21
|
+
@cache ||= @light_renderer.cache[type]
|
22
|
+
@cache.count += 1
|
23
|
+
|
24
|
+
return unless visible
|
25
|
+
|
26
|
+
@_direction ||= Vector3.new
|
27
|
+
@_vector3 ||= Vector3.new
|
28
|
+
|
29
|
+
setup_specific(@cache.length)
|
30
|
+
|
31
|
+
@cache.length += 1
|
32
|
+
end
|
33
|
+
|
34
|
+
def project(renderer)
|
35
|
+
@renderer = renderer
|
36
|
+
return unless visible
|
37
|
+
init
|
38
|
+
# TODO!!! FIXME!!!
|
39
|
+
@renderer.instance_variable_get(:@lights) << self
|
40
|
+
project_children
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.null_remaining_lights(cache, colors = nil)
|
44
|
+
colors ||= cache.colors
|
45
|
+
count = [colors.length, cache.count * 3].max
|
46
|
+
(cache.length * 3).upto(count - 1).each { |i|
|
47
|
+
colors[i] = 0.0
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_sym
|
52
|
+
:other
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|