mittsu 0.1.1 → 0.1.2
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/Gemfile +2 -1
- data/README.md +1 -1
- data/lib/mittsu/cameras/orthographic_camera.rb +13 -0
- data/lib/mittsu/cameras/perspective_camera.rb +11 -0
- data/lib/mittsu/core/geometry.rb +12 -9
- data/lib/mittsu/core/object_3d.rb +33 -66
- data/lib/mittsu/lights/ambient_light.rb +8 -0
- data/lib/mittsu/lights/directional_light.rb +9 -0
- data/lib/mittsu/lights/hemisphere_light.rb +9 -0
- data/lib/mittsu/lights/point_light.rb +11 -0
- data/lib/mittsu/lights/spot_light.rb +13 -0
- data/lib/mittsu/loaders.rb +1 -0
- data/lib/mittsu/loaders/mtl_loader.rb +5 -12
- data/lib/mittsu/loaders/obj_loader.rb +212 -0
- data/lib/mittsu/loaders/obj_mtl_loader.rb +11 -207
- data/lib/mittsu/materials/material.rb +5 -2
- data/lib/mittsu/materials/mesh_basic_material.rb +0 -9
- data/lib/mittsu/math/color.rb +44 -104
- data/lib/mittsu/math/matrix3.rb +8 -1
- data/lib/mittsu/math/matrix4.rb +6 -0
- data/lib/mittsu/math/vector.rb +251 -0
- data/lib/mittsu/math/vector2.rb +14 -213
- data/lib/mittsu/math/vector3.rb +61 -351
- data/lib/mittsu/math/vector4.rb +45 -295
- data/lib/mittsu/objects/line.rb +12 -2
- data/lib/mittsu/objects/mesh.rb +18 -9
- data/lib/mittsu/renderers/glfw_window.rb +15 -13
- data/lib/mittsu/renderers/opengl/core/opengl_geometry.rb +253 -0
- data/lib/mittsu/renderers/opengl/core/opengl_object_3d.rb +131 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_ambient_light.rb +26 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_directional_light.rb +35 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_hemisphere_light.rb +42 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +52 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_point_light.rb +36 -0
- data/lib/mittsu/renderers/opengl/lights/opengl_spot_light.rb +47 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_line_basic_material.rb +16 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_material.rb +275 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +69 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_mesh_lambert_material.rb +29 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_mesh_phong_material.rb +40 -0
- data/lib/mittsu/renderers/opengl/materials/opengl_shader_material.rb +11 -0
- data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +8 -0
- data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +54 -0
- data/lib/mittsu/renderers/opengl/objects/opengl_mesh.rb +77 -0
- data/lib/mittsu/renderers/opengl/opengl_buffer.rb +5 -0
- data/lib/mittsu/renderers/opengl/opengl_debug.rb +49 -7
- data/lib/mittsu/renderers/opengl/opengl_default_target.rb +54 -0
- data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +763 -0
- data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +130 -0
- data/lib/mittsu/renderers/opengl/opengl_helper.rb +161 -0
- data/lib/mittsu/renderers/opengl/opengl_implementations.rb +61 -0
- data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +43 -0
- data/lib/mittsu/renderers/opengl/opengl_mittsu_params.rb +53 -0
- data/lib/mittsu/renderers/opengl/opengl_program.rb +147 -296
- data/lib/mittsu/renderers/opengl/opengl_state.rb +3 -5
- data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +12 -10
- data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +8 -0
- data/lib/mittsu/renderers/opengl/textures/opengl_compressed_texture.rb +21 -0
- data/lib/mittsu/renderers/opengl/textures/opengl_cube_texture.rb +75 -0
- data/lib/mittsu/renderers/opengl/textures/opengl_data_texture.rb +23 -0
- data/lib/mittsu/renderers/opengl/textures/opengl_texture.rb +111 -0
- data/lib/mittsu/renderers/opengl_render_target.rb +117 -2
- data/lib/mittsu/renderers/opengl_renderer.rb +653 -2978
- data/lib/mittsu/renderers/shaders/rbsl_loader.rb +166 -0
- data/lib/mittsu/renderers/shaders/shader_chunk.rb +6 -9
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +36 -37
- data/lib/mittsu/renderers/shaders/shader_lib.rb +26 -403
- data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_fragment.rbsl +37 -0
- data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_uniforms.rbslu +3 -0
- data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_vertex.rbsl +33 -0
- data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_fragment.rbsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_uniforms.rbslu +2 -0
- data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_vertex.rbsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_fragment.rbsl +26 -0
- data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_uniforms.rbslu +0 -0
- data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_vertex.rbsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_fragment.rbsl +56 -0
- data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_uniforms.rbslu +7 -0
- data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_vertex.rbsl +37 -0
- data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_fragment.rbsl +45 -0
- data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_uniforms.rbslu +11 -0
- data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_vertex.rbsl +43 -0
- data/lib/mittsu/renderers/shaders/shader_templates/fragment.glsl.erb +105 -0
- data/lib/mittsu/renderers/shaders/shader_templates/vertex.glsl.erb +143 -0
- data/lib/mittsu/renderers/shaders/uniforms_lib.rb +54 -55
- data/lib/mittsu/textures/texture.rb +5 -2
- data/lib/mittsu/version.rb +1 -1
- data/run_all_examples.sh +7 -0
- metadata +77 -28
- data/.ruby-version +0 -1
- data/lib/mittsu/core/hash_object.rb +0 -19
data/lib/mittsu/math/vector4.rb
CHANGED
@@ -1,140 +1,48 @@
|
|
1
1
|
require 'mittsu/math'
|
2
|
+
require 'mittsu/math/vector'
|
2
3
|
|
3
4
|
module Mittsu
|
4
|
-
class Vector4
|
5
|
-
|
6
|
-
|
7
|
-
self.set(x, y, z, w)
|
8
|
-
end
|
9
|
-
|
10
|
-
def set(x, y, z, w)
|
11
|
-
@x, @y, @z, @w = x.to_f, y.to_f, z.to_f, w.to_f
|
12
|
-
self
|
13
|
-
end
|
14
|
-
|
15
|
-
def set_x(x)
|
16
|
-
@x = x.to_f
|
17
|
-
self
|
18
|
-
end
|
19
|
-
|
20
|
-
def set_y(y)
|
21
|
-
@y = y.to_f
|
22
|
-
self
|
23
|
-
end
|
24
|
-
|
25
|
-
def set_z(z)
|
26
|
-
@z = z.to_f
|
27
|
-
self
|
28
|
-
end
|
5
|
+
class Vector4 < Vector
|
6
|
+
ELEMENTS = { x: 0, y: 1, z: 2, w: 3 }
|
7
|
+
DIMENSIONS = ELEMENTS.count
|
29
8
|
|
30
|
-
def
|
31
|
-
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
def set_component(index, value)
|
36
|
-
case index
|
37
|
-
when 0 then @x = value.to_f
|
38
|
-
when 1 then @y = value.to_f
|
39
|
-
when 2 then @z = value.to_f
|
40
|
-
when 3 then @w = value.to_f
|
41
|
-
else raise IndexError.new
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def get_component(index)
|
46
|
-
case index
|
47
|
-
when 0 then return @x
|
48
|
-
when 1 then return @y
|
49
|
-
when 2 then return @z
|
50
|
-
when 3 then return @w
|
51
|
-
else raise IndexError.new
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def copy(v)
|
56
|
-
@x = v.x
|
57
|
-
@y = v.y
|
58
|
-
@z = v.z
|
59
|
-
@w = v.w || 1.0
|
60
|
-
self
|
61
|
-
end
|
62
|
-
|
63
|
-
def add(v)
|
64
|
-
@x += v.x
|
65
|
-
@y += v.y
|
66
|
-
@z += v.z
|
67
|
-
@w += v.w
|
68
|
-
self
|
9
|
+
def initialize(x = 0, y = 0, z = 0, w = 1)
|
10
|
+
super [x.to_f, y.to_f, z.to_f, w.to_f]
|
69
11
|
end
|
70
12
|
|
71
|
-
def
|
72
|
-
|
73
|
-
@y += s
|
74
|
-
@z += s
|
75
|
-
@w += s
|
76
|
-
self
|
77
|
-
end
|
78
|
-
|
79
|
-
def add_vectors(a, b)
|
80
|
-
@x = a.x + b.x
|
81
|
-
@y = a.y + b.y
|
82
|
-
@z = a.z + b.z
|
83
|
-
@w = a.w + b.w
|
84
|
-
self
|
85
|
-
end
|
86
|
-
|
87
|
-
def sub(v)
|
88
|
-
@x -= v.x
|
89
|
-
@y -= v.y
|
90
|
-
@z -= v.z
|
91
|
-
@w -= v.w
|
92
|
-
self
|
93
|
-
end
|
94
|
-
|
95
|
-
def sub_scalar(s)
|
96
|
-
@x -= s
|
97
|
-
@y -= s
|
98
|
-
@z -= s
|
99
|
-
@w -= s
|
100
|
-
self
|
13
|
+
def set(x, y, z, w)
|
14
|
+
super [x.to_f, y.to_f, z.to_f, w.to_f]
|
101
15
|
end
|
102
16
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
@w = a.w - b.w
|
108
|
-
self
|
109
|
-
end
|
17
|
+
def x; @elements[0]; end
|
18
|
+
def y; @elements[1]; end
|
19
|
+
def z; @elements[2]; end
|
20
|
+
def w; @elements[3]; end
|
110
21
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
@w *= scalar
|
116
|
-
self
|
117
|
-
end
|
22
|
+
def x=(value); @elements[0] = value.to_f; end
|
23
|
+
def y=(value); @elements[1] = value.to_f; end
|
24
|
+
def z=(value); @elements[2] = value.to_f; end
|
25
|
+
def w=(value); @elements[3] = value.to_f; end
|
118
26
|
|
119
27
|
def apply_matrix4(m)
|
120
|
-
|
28
|
+
_x, _y, _z, _w = *@elements
|
121
29
|
e = m.elements
|
122
|
-
@
|
123
|
-
@
|
124
|
-
@
|
125
|
-
@
|
30
|
+
@elements[0] = e[0] * _x + e[4] * _y + e[8] * _z + e[12] * _w
|
31
|
+
@elements[1] = e[1] * _x + e[5] * _y + e[9] * _z + e[13] * _w
|
32
|
+
@elements[2] = e[2] * _x + e[6] * _y + e[10] * _z + e[14] * _w
|
33
|
+
@elements[3] = e[3] * _x + e[7] * _y + e[11] * _z + e[15] * _w
|
126
34
|
self
|
127
35
|
end
|
128
36
|
|
129
37
|
def divide_scalar(scalar)
|
130
38
|
if scalar != 0.0
|
131
39
|
inv_scalar = 1.0 / scalar
|
132
|
-
@
|
133
|
-
@
|
134
|
-
@
|
135
|
-
@
|
40
|
+
@elements[0] *= inv_scalar
|
41
|
+
@elements[1] *= inv_scalar
|
42
|
+
@elements[2] *= inv_scalar
|
43
|
+
@elements[3] *= inv_scalar
|
136
44
|
else
|
137
|
-
@
|
45
|
+
@elements = [0.0, 0.0, 0.0, 1.0]
|
138
46
|
end
|
139
47
|
self
|
140
48
|
end
|
@@ -142,16 +50,16 @@ module Mittsu
|
|
142
50
|
def set_axis_angle_from_quaternion(q)
|
143
51
|
# http:#www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
|
144
52
|
# q is assumed to be normalized
|
145
|
-
@
|
53
|
+
@elements[3] = 2.0 * Math.acos(q.w)
|
146
54
|
s = Math.sqrt(1.0 - q.w * q.w)
|
147
55
|
if s < 0.0001
|
148
|
-
@
|
149
|
-
@
|
150
|
-
@
|
56
|
+
@elements[0] = 1.0
|
57
|
+
@elements[1] = 0.0
|
58
|
+
@elements[2] = 0.0
|
151
59
|
else
|
152
|
-
@
|
153
|
-
@
|
154
|
-
@
|
60
|
+
@elements[0] = q.x / s
|
61
|
+
@elements[1] = q.y / s
|
62
|
+
@elements[2] = q.z / s
|
155
63
|
end
|
156
64
|
self
|
157
65
|
end
|
@@ -177,7 +85,7 @@ module Mittsu
|
|
177
85
|
((m23 + m32).abs < epsilon2) &&
|
178
86
|
((m11 + m22 + m33 - 3).abs < epsilon2))
|
179
87
|
# self singularity is identity matrix so angle = 0
|
180
|
-
|
88
|
+
@elements = [1.0, 0.0, 0.0, 0.0]
|
181
89
|
return self # zero angle, arbitrary axis
|
182
90
|
end
|
183
91
|
# otherwise self singularity is angle = 180
|
@@ -219,7 +127,7 @@ module Mittsu
|
|
219
127
|
y1 = yz / z1
|
220
128
|
end
|
221
129
|
end
|
222
|
-
|
130
|
+
@elements = [x1, y1, z1, angle]
|
223
131
|
return self # return 180 deg rotation
|
224
132
|
end
|
225
133
|
# as we have reached here there are no singularities so we can handle normally
|
@@ -229,186 +137,28 @@ module Mittsu
|
|
229
137
|
s = 1.0 if (s.abs < 0.001)
|
230
138
|
# prevent divide by zero, should not happen if matrix is orthogonal and should be
|
231
139
|
# caught by singularity test above, but I've left it in just in case
|
232
|
-
@
|
233
|
-
@
|
234
|
-
@
|
235
|
-
@
|
236
|
-
self
|
237
|
-
end
|
238
|
-
|
239
|
-
def min(v)
|
240
|
-
if @x > v.x
|
241
|
-
@x = v.x
|
242
|
-
end
|
243
|
-
if @y > v.y
|
244
|
-
@y = v.y
|
245
|
-
end
|
246
|
-
if @z > v.z
|
247
|
-
@z = v.z
|
248
|
-
end
|
249
|
-
if @w > v.w
|
250
|
-
@w = v.w
|
251
|
-
end
|
252
|
-
self
|
253
|
-
end
|
254
|
-
|
255
|
-
def max(v)
|
256
|
-
if @x < v.x
|
257
|
-
@x = v.x
|
258
|
-
end
|
259
|
-
if @y < v.y
|
260
|
-
@y = v.y
|
261
|
-
end
|
262
|
-
if @z < v.z
|
263
|
-
@z = v.z
|
264
|
-
end
|
265
|
-
if @w < v.w
|
266
|
-
@w = v.w
|
267
|
-
end
|
268
|
-
self
|
269
|
-
end
|
270
|
-
|
271
|
-
def clamp(min, max)
|
272
|
-
# This function assumes min < max, if self assumption isn't true it will not operate correctly
|
273
|
-
if @x < min.x
|
274
|
-
@x = min.x
|
275
|
-
elsif @x > max.x
|
276
|
-
@x = max.x
|
277
|
-
end
|
278
|
-
if @y < min.y
|
279
|
-
@y = min.y
|
280
|
-
elsif @y > max.y
|
281
|
-
@y = max.y
|
282
|
-
end
|
283
|
-
if @z < min.z
|
284
|
-
@z = min.z
|
285
|
-
elsif @z > max.z
|
286
|
-
@z = max.z
|
287
|
-
end
|
288
|
-
if @w < min.w
|
289
|
-
@w = min.w
|
290
|
-
elsif @w > max.w
|
291
|
-
@w = max.w
|
292
|
-
end
|
293
|
-
self
|
294
|
-
end
|
295
|
-
|
296
|
-
def floor
|
297
|
-
@x = (@x).floor
|
298
|
-
@y = (@y).floor
|
299
|
-
@z = (@z).floor
|
300
|
-
@w = (@w).floor
|
301
|
-
self
|
302
|
-
end
|
303
|
-
|
304
|
-
def ceil
|
305
|
-
@x = (@x).ceil
|
306
|
-
@y = (@y).ceil
|
307
|
-
@z = (@z).ceil
|
308
|
-
@w = (@w).ceil
|
309
|
-
self
|
310
|
-
end
|
311
|
-
|
312
|
-
def round
|
313
|
-
@x = (@x).round
|
314
|
-
@y = (@y).round
|
315
|
-
@z = (@z).round
|
316
|
-
@w = (@w).round
|
317
|
-
self
|
318
|
-
end
|
319
|
-
|
320
|
-
def round_to_zero
|
321
|
-
@x = (@x < 0) ? (@x).ceil : (@x).floor
|
322
|
-
@y = (@y < 0) ? (@y).ceil : (@y).floor
|
323
|
-
@z = (@z < 0) ? (@z).ceil : (@z).floor
|
324
|
-
@w = (@w < 0) ? (@w).ceil : (@w).floor
|
325
|
-
self
|
326
|
-
end
|
327
|
-
|
328
|
-
def negate
|
329
|
-
@x = - @x
|
330
|
-
@y = - @y
|
331
|
-
@z = - @z
|
332
|
-
@w = - @w
|
140
|
+
@elements[0] = (m32 - m23) / s
|
141
|
+
@elements[1] = (m13 - m31) / s
|
142
|
+
@elements[2] = (m21 - m12) / s
|
143
|
+
@elements[3] = Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
|
333
144
|
self
|
334
145
|
end
|
335
146
|
|
336
147
|
def dot(v)
|
337
|
-
|
338
|
-
end
|
339
|
-
|
340
|
-
def length_sq
|
341
|
-
@x * @x + @y * @y + @z * @z + @w * @w
|
342
|
-
end
|
343
|
-
|
344
|
-
def length
|
345
|
-
Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
|
148
|
+
x * v.x + y * v.y + z * v.z + w * v.w
|
346
149
|
end
|
347
150
|
|
348
151
|
def length_manhattan
|
349
|
-
|
350
|
-
end
|
351
|
-
|
352
|
-
def normalize
|
353
|
-
self.divide_scalar(self.length)
|
354
|
-
end
|
355
|
-
|
356
|
-
def set_length(l)
|
357
|
-
old_length = self.length
|
358
|
-
if old_length != 0 && l != old_length
|
359
|
-
self.multiply_scalar(l / old_length)
|
360
|
-
end
|
361
|
-
self
|
362
|
-
end
|
363
|
-
|
364
|
-
def lerp(v, alpha)
|
365
|
-
@x += (v.x - @x) * alpha
|
366
|
-
@y += (v.y - @y) * alpha
|
367
|
-
@z += (v.z - @z) * alpha
|
368
|
-
@w += (v.w - @w) * alpha
|
369
|
-
self
|
370
|
-
end
|
371
|
-
|
372
|
-
def lerp_vectors(v1, v2, alpha)
|
373
|
-
self.sub_vectors(v2, v1).multiply_scalar(alpha).add(v1)
|
374
|
-
self
|
375
|
-
end
|
376
|
-
|
377
|
-
def ==(v)
|
378
|
-
((v.x == @x) && (v.y == @y) && (v.z == @z) && (v.w == @w))
|
379
|
-
end
|
380
|
-
|
381
|
-
def from_array(array, offset = 0)
|
382
|
-
@x = array[offset]
|
383
|
-
@y = array[offset + 1]
|
384
|
-
@z = array[offset + 2]
|
385
|
-
@w = array[offset + 3]
|
386
|
-
self
|
387
|
-
end
|
388
|
-
|
389
|
-
def to_array(array = [], offset = 0)
|
390
|
-
array[offset] = @x
|
391
|
-
array[offset + 1] = @y
|
392
|
-
array[offset + 2] = @z
|
393
|
-
array[offset + 3] = @w
|
394
|
-
array
|
152
|
+
x.abs + y.abs + z.abs + w.abs
|
395
153
|
end
|
396
154
|
|
397
155
|
def from_attribute(attribute, index, offset = 0)
|
398
156
|
index = index * attribute.itemSize + offset
|
399
|
-
@
|
400
|
-
@
|
401
|
-
@
|
402
|
-
@
|
157
|
+
@elements[0] = attribute.array[index]
|
158
|
+
@elements[1] = attribute.array[index + 1]
|
159
|
+
@elements[2] = attribute.array[index + 2]
|
160
|
+
@elements[3] = attribute.array[index + 3]
|
403
161
|
self
|
404
162
|
end
|
405
|
-
|
406
|
-
def clone
|
407
|
-
Mittsu::Vector4.new @x, @y, @z, @w
|
408
|
-
end
|
409
|
-
|
410
|
-
def to_s
|
411
|
-
"[#{x}, #{y}, #{z}, #{w}]"
|
412
|
-
end
|
413
163
|
end
|
414
164
|
end
|
data/lib/mittsu/objects/line.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Mittsu
|
2
2
|
class Line < Object3D
|
3
|
-
attr_accessor :geometry, :material, :mode, :type
|
3
|
+
attr_accessor :geometry, :material, :mode, :type, :morph_target_base
|
4
4
|
|
5
5
|
def initialize(geometry = nil, material = nil, mode = nil)
|
6
6
|
super()
|
@@ -8,7 +8,7 @@ module Mittsu
|
|
8
8
|
@type = 'Line'
|
9
9
|
|
10
10
|
@geometry = geometry || Geometry.new
|
11
|
-
@material = material || LineBasicMaterial.new(color: rand * 0xffffff)
|
11
|
+
@material = material || LineBasicMaterial.new(color: (rand * 0xffffff).to_i)
|
12
12
|
|
13
13
|
@mode = mode || LineStrip
|
14
14
|
|
@@ -139,5 +139,15 @@ module Mittsu
|
|
139
139
|
super(object)
|
140
140
|
object
|
141
141
|
end
|
142
|
+
|
143
|
+
protected
|
144
|
+
|
145
|
+
def jsonify
|
146
|
+
data = super
|
147
|
+
data[:geometry] = jsonify_geometry(self.geometry)
|
148
|
+
data[:material] = jsonify_material(self.material)
|
149
|
+
data[:mode] = self.mode
|
150
|
+
data
|
151
|
+
end
|
142
152
|
end
|
143
153
|
end
|
data/lib/mittsu/objects/mesh.rb
CHANGED
@@ -5,7 +5,7 @@ module Mittsu
|
|
5
5
|
class Mesh < Object3D
|
6
6
|
attr_accessor :material, :morph_target_base
|
7
7
|
|
8
|
-
def initialize(geometry = Geometry.new, material = MeshBasicMaterial.new(color: rand * 0xffffff))
|
8
|
+
def initialize(geometry = Geometry.new, material = MeshBasicMaterial.new(color: (rand * 0xffffff).to_i))
|
9
9
|
super()
|
10
10
|
|
11
11
|
@type = 'Mesh'
|
@@ -16,7 +16,7 @@ module Mittsu
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def update_morph_targets
|
19
|
-
if !@morph_targets.nil? && !@morph_targets.empty?
|
19
|
+
if !@geometry.morph_targets.nil? && !@geometry.morph_targets.empty?
|
20
20
|
@morph_targets_base = -1
|
21
21
|
@morph_target_forced_order = []
|
22
22
|
@morph_targets_influences = []
|
@@ -38,13 +38,13 @@ module Mittsu
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def raycast(raycaster, intersects)
|
41
|
-
@_inverse_matrix
|
42
|
-
@_ray
|
43
|
-
@_sphere
|
41
|
+
@_inverse_matrix ||= Matrix4.new
|
42
|
+
@_ray ||= Ray.new
|
43
|
+
@_sphere ||= Sphere.new
|
44
44
|
|
45
|
-
@_v_a
|
46
|
-
@_v_b
|
47
|
-
@_v_c
|
45
|
+
@_v_a ||= Vector3.new
|
46
|
+
@_v_b ||= Vector3.new
|
47
|
+
@_v_c ||= Vector3.new
|
48
48
|
|
49
49
|
# Checking bounding_sphere distance to ray
|
50
50
|
|
@@ -60,7 +60,7 @@ module Mittsu
|
|
60
60
|
inverse_matrix.inverse(@matrix_world)
|
61
61
|
ray.copy(raycaster.ray).apply_matrix4(inverse_matrix)
|
62
62
|
|
63
|
-
if !geometry.bounding_bounding_box
|
63
|
+
if !geometry.bounding_bounding_box.nil?
|
64
64
|
return unless ray.intersection_box?(geometry.bounding_box)
|
65
65
|
end
|
66
66
|
|
@@ -239,5 +239,14 @@ module Mittsu
|
|
239
239
|
super(object, recursive)
|
240
240
|
return object
|
241
241
|
end
|
242
|
+
|
243
|
+
protected
|
244
|
+
|
245
|
+
def jsonify
|
246
|
+
data = super
|
247
|
+
data[:geometry] = jsonify_geometry(@geometry)
|
248
|
+
data[:material] = jsonify_material(@material)
|
249
|
+
data
|
250
|
+
end
|
242
251
|
end
|
243
252
|
end
|