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/matrix3.rb
CHANGED
@@ -3,7 +3,10 @@ require 'mittsu/math'
|
|
3
3
|
module Mittsu
|
4
4
|
class Matrix3
|
5
5
|
attr_accessor :elements
|
6
|
-
|
6
|
+
|
7
|
+
DIMENSIONS = 3
|
8
|
+
|
9
|
+
def initialize()
|
7
10
|
@elements = [
|
8
11
|
1.0, 0.0, 0.0,
|
9
12
|
0.0, 1.0, 0.0,
|
@@ -141,6 +144,10 @@ module Mittsu
|
|
141
144
|
self
|
142
145
|
end
|
143
146
|
|
147
|
+
def ==(other)
|
148
|
+
other.elements == @elements
|
149
|
+
end
|
150
|
+
|
144
151
|
def from_array(array)
|
145
152
|
self.elements[0..array.length] = (array)
|
146
153
|
self
|
data/lib/mittsu/math/matrix4.rb
CHANGED
@@ -4,6 +4,8 @@ module Mittsu
|
|
4
4
|
class Matrix4
|
5
5
|
attr_accessor :elements
|
6
6
|
|
7
|
+
DIMENSIONS = 4
|
8
|
+
|
7
9
|
def initialize()
|
8
10
|
@elements = [
|
9
11
|
1.0, 0.0, 0.0, 0.0,
|
@@ -563,6 +565,10 @@ module Mittsu
|
|
563
565
|
self
|
564
566
|
end
|
565
567
|
|
568
|
+
def ==(other)
|
569
|
+
other.elements == @elements
|
570
|
+
end
|
571
|
+
|
566
572
|
def to_a
|
567
573
|
te = self.elements
|
568
574
|
[
|
@@ -0,0 +1,251 @@
|
|
1
|
+
module Mittsu
|
2
|
+
class Vector
|
3
|
+
attr_accessor :elements
|
4
|
+
|
5
|
+
def initialize(elements)
|
6
|
+
@elements = elements
|
7
|
+
end
|
8
|
+
|
9
|
+
def set(elements)
|
10
|
+
@elements = elements
|
11
|
+
self
|
12
|
+
end
|
13
|
+
|
14
|
+
def each_dimension
|
15
|
+
self.class::DIMENSIONS.times do |i|
|
16
|
+
yield i
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def []=(index, value)
|
21
|
+
index = self.class::ELEMENTS[index] if index.is_a?(Symbol)
|
22
|
+
raise IndexError if index.nil? || index < 0 || index >= self.class::DIMENSIONS
|
23
|
+
@elements[index] = value
|
24
|
+
end
|
25
|
+
|
26
|
+
def [](index)
|
27
|
+
index = self.class::ELEMENTS[index] if index.is_a?(Symbol)
|
28
|
+
raise IndexError if index.nil? || index < 0 || index >= self.class::DIMENSIONS
|
29
|
+
@elements[index]
|
30
|
+
end
|
31
|
+
|
32
|
+
def copy(v)
|
33
|
+
@elements = v.elements.dup
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def add(v)
|
38
|
+
each_dimension do |i|
|
39
|
+
@elements[i] = @elements[i] + v.elements[i]
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_scalar(s)
|
45
|
+
@elements.map!{ |e| e + s }
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_vectors(a, b)
|
50
|
+
each_dimension do |i|
|
51
|
+
@elements[i] = a.elements[i] + b.elements[i]
|
52
|
+
end
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def sub(v)
|
57
|
+
each_dimension do |i|
|
58
|
+
@elements[i] = @elements[i] - v.elements[i]
|
59
|
+
end
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
63
|
+
def sub_scalar(s)
|
64
|
+
@elements.map!{ |e| e - s }
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
def sub_vectors(a, b)
|
69
|
+
each_dimension do |i|
|
70
|
+
@elements[i] = a.elements[i] - b.elements[i]
|
71
|
+
end
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
def multiply(v)
|
76
|
+
each_dimension do |i|
|
77
|
+
@elements[i] = @elements[i] * v.elements[i]
|
78
|
+
end
|
79
|
+
self
|
80
|
+
end
|
81
|
+
|
82
|
+
def multiply_scalar(s)
|
83
|
+
@elements.map!{ |e| e * s }
|
84
|
+
self
|
85
|
+
end
|
86
|
+
|
87
|
+
def multiply_vectors(a, b)
|
88
|
+
each_dimension do |i|
|
89
|
+
@elements[i] = a.elements[i] * b.elements[i]
|
90
|
+
end
|
91
|
+
self
|
92
|
+
end
|
93
|
+
|
94
|
+
def divide(v)
|
95
|
+
each_dimension do |i|
|
96
|
+
@elements[i] = @elements[i] / v.elements[i]
|
97
|
+
end
|
98
|
+
self
|
99
|
+
end
|
100
|
+
|
101
|
+
def divide_scalar(s)
|
102
|
+
inv_scalar = s == 0 ? 0 : 1.0 / s
|
103
|
+
@elements.map!{ |e| e * inv_scalar }
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
107
|
+
def min(v)
|
108
|
+
each_dimension do |i|
|
109
|
+
@elements[i] = v.elements[i] if @elements[i] > v.elements[i]
|
110
|
+
end
|
111
|
+
self
|
112
|
+
end
|
113
|
+
|
114
|
+
def max(v)
|
115
|
+
each_dimension do |i|
|
116
|
+
@elements[i] = v.elements[i] if @elements[i] < v.elements[i]
|
117
|
+
end
|
118
|
+
self
|
119
|
+
end
|
120
|
+
|
121
|
+
def clamp(min, max)
|
122
|
+
each_dimension do |i|
|
123
|
+
@elements[i] = Math.clamp(@elements[i], min.elements[i], max.elements[i])
|
124
|
+
end
|
125
|
+
self
|
126
|
+
end
|
127
|
+
|
128
|
+
def clamp_scalar(min, max)
|
129
|
+
@elements.map!{ |e| Math.clamp(e, min, max) }
|
130
|
+
self
|
131
|
+
end
|
132
|
+
|
133
|
+
def floor
|
134
|
+
@elements.map!{ |e| e.floor.to_f }
|
135
|
+
self
|
136
|
+
end
|
137
|
+
|
138
|
+
def ceil
|
139
|
+
@elements.map!{ |e| e.ceil.to_f }
|
140
|
+
self
|
141
|
+
end
|
142
|
+
|
143
|
+
def round
|
144
|
+
@elements.map!{ |e| e.round.to_f }
|
145
|
+
self
|
146
|
+
end
|
147
|
+
|
148
|
+
def round_to_zero
|
149
|
+
@elements.map!{ |e| (e < 0) ? e.ceil.to_f : e.floor.to_f }
|
150
|
+
self
|
151
|
+
end
|
152
|
+
|
153
|
+
def negate
|
154
|
+
@elements.map!{ |e| -e }
|
155
|
+
self
|
156
|
+
end
|
157
|
+
|
158
|
+
def length_sq
|
159
|
+
self.dot(self)
|
160
|
+
end
|
161
|
+
|
162
|
+
def length
|
163
|
+
Math.sqrt(length_sq)
|
164
|
+
end
|
165
|
+
|
166
|
+
def normalize
|
167
|
+
self.divide_scalar(self.length)
|
168
|
+
end
|
169
|
+
|
170
|
+
def set_length(l)
|
171
|
+
old_length = self.length
|
172
|
+
if old_length != 0 && l != old_length
|
173
|
+
self.multiply_scalar(l / old_length)
|
174
|
+
end
|
175
|
+
self
|
176
|
+
end
|
177
|
+
|
178
|
+
def lerp(v, alpha)
|
179
|
+
each_dimension do |i|
|
180
|
+
@elements[i] += (v.elements[i] - @elements[i]) * alpha
|
181
|
+
end
|
182
|
+
self
|
183
|
+
end
|
184
|
+
|
185
|
+
def lerp_vectors(v1, v2, alpha)
|
186
|
+
self.sub_vectors(v2, v1).multiply_scalar(alpha).add(v1)
|
187
|
+
self
|
188
|
+
end
|
189
|
+
|
190
|
+
def project_on_vector(vector)
|
191
|
+
v1 = self.class.new
|
192
|
+
v1.copy(vector).normalize
|
193
|
+
dot = self.dot(v1)
|
194
|
+
self.copy(v1).multiply_scalar(dot)
|
195
|
+
end
|
196
|
+
|
197
|
+
def project_on_plane(plane_normal)
|
198
|
+
v1 = self.class.new
|
199
|
+
v1.copy(self).project_on_vector(plane_normal)
|
200
|
+
self.sub(v1)
|
201
|
+
end
|
202
|
+
|
203
|
+
def reflect(normal)
|
204
|
+
# reflect incident vector off plane orthogonal to normal
|
205
|
+
# normal is assumed to have unit length
|
206
|
+
v1 = self.class.new
|
207
|
+
self.sub(v1.copy(normal).multiply_scalar(2.0 * self.dot(normal)))
|
208
|
+
end
|
209
|
+
|
210
|
+
def angle_to(v)
|
211
|
+
theta = self.dot(v) / (self.length * v.length)
|
212
|
+
|
213
|
+
# clamp, to handle numerical problems
|
214
|
+
Math.acos(Math.clamp(theta, -1.0, 1.0))
|
215
|
+
end
|
216
|
+
|
217
|
+
def distance_to(v)
|
218
|
+
Math.sqrt(self.distance_to_squared(v))
|
219
|
+
end
|
220
|
+
|
221
|
+
def ==(v)
|
222
|
+
each_dimension do |i|
|
223
|
+
return false if @elements[i] != v.elements[i]
|
224
|
+
end
|
225
|
+
true
|
226
|
+
end
|
227
|
+
|
228
|
+
def from_array(array, offset = 0)
|
229
|
+
each_dimension do |i|
|
230
|
+
@elements[i] = array[offset + i]
|
231
|
+
end
|
232
|
+
self
|
233
|
+
end
|
234
|
+
|
235
|
+
def to_array(array = [], offset = 0)
|
236
|
+
each_dimension do |i|
|
237
|
+
array[offset + i] = @elements[i]
|
238
|
+
end
|
239
|
+
array
|
240
|
+
end
|
241
|
+
alias :to_a :to_array
|
242
|
+
|
243
|
+
def clone
|
244
|
+
self.class.new(*@elements)
|
245
|
+
end
|
246
|
+
|
247
|
+
def to_s
|
248
|
+
"[#{@elements.join(', ')}]"
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
data/lib/mittsu/math/vector2.rb
CHANGED
@@ -1,238 +1,39 @@
|
|
1
1
|
require 'mittsu/math'
|
2
|
+
require 'mittsu/math/vector'
|
2
3
|
|
3
4
|
module Mittsu
|
4
|
-
class Vector2
|
5
|
-
|
5
|
+
class Vector2 < Vector
|
6
|
+
ELEMENTS = { x: 0, y: 1 }
|
7
|
+
DIMENSIONS = ELEMENTS.count
|
6
8
|
|
7
9
|
def initialize(x = 0, y = 0)
|
8
|
-
|
9
|
-
@y = y.to_f
|
10
|
-
end
|
11
|
-
|
12
|
-
def x=(value)
|
13
|
-
@x = value.to_f
|
14
|
-
end
|
15
|
-
|
16
|
-
def y=(value)
|
17
|
-
@y = value.to_f
|
10
|
+
super [x.to_f, y.to_f]
|
18
11
|
end
|
19
12
|
|
20
13
|
def set(x, y)
|
21
|
-
|
22
|
-
@y = y.to_f
|
23
|
-
self
|
24
|
-
end
|
25
|
-
|
26
|
-
def []=(index, value)
|
27
|
-
return @x = value.to_f if index == 0
|
28
|
-
return @y = value.to_f if index == 1
|
29
|
-
raise IndexError
|
30
|
-
end
|
31
|
-
|
32
|
-
def [](index)
|
33
|
-
return @x if index == 0
|
34
|
-
return @y if index == 1
|
35
|
-
raise IndexError
|
36
|
-
end
|
37
|
-
|
38
|
-
def copy(v)
|
39
|
-
@x = v.x
|
40
|
-
@y = v.y
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
def add(v)
|
45
|
-
@x += v.x
|
46
|
-
@y += v.y
|
47
|
-
self
|
48
|
-
end
|
49
|
-
|
50
|
-
def add_scalar(s)
|
51
|
-
@x += s
|
52
|
-
@y += s
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
def add_vectors(a, b)
|
57
|
-
@x = a.x + b.x
|
58
|
-
@y = a.y + b.y
|
59
|
-
self
|
60
|
-
end
|
61
|
-
|
62
|
-
def sub(v)
|
63
|
-
@x -= v.x
|
64
|
-
@y -= v.y
|
65
|
-
self
|
66
|
-
end
|
67
|
-
|
68
|
-
def sub_scalar(s)
|
69
|
-
@x -= s
|
70
|
-
@y -= s
|
71
|
-
self
|
72
|
-
end
|
73
|
-
|
74
|
-
def sub_vectors(a, b)
|
75
|
-
@x = a.x - b.x
|
76
|
-
@y = a.y - b.y
|
77
|
-
self
|
78
|
-
end
|
79
|
-
|
80
|
-
def multiply(v)
|
81
|
-
@x *= v.x
|
82
|
-
@y *= v.y
|
83
|
-
self
|
84
|
-
end
|
85
|
-
|
86
|
-
def multiply_scalar(s)
|
87
|
-
@x *= s
|
88
|
-
@y *= s
|
89
|
-
self
|
90
|
-
end
|
91
|
-
|
92
|
-
def divide(v)
|
93
|
-
@x /= v.x
|
94
|
-
@y /= v.y
|
95
|
-
self
|
96
|
-
end
|
97
|
-
|
98
|
-
def divide_scalar(s)
|
99
|
-
@x /= s
|
100
|
-
@y /= s
|
101
|
-
self
|
102
|
-
end
|
103
|
-
|
104
|
-
def min(v)
|
105
|
-
@x = [@x, v.x].min
|
106
|
-
@y = [@y, v.y].min
|
107
|
-
self
|
108
|
-
end
|
109
|
-
|
110
|
-
def max(v)
|
111
|
-
@x = [@x, v.x].max
|
112
|
-
@y = [@y, v.y].max
|
113
|
-
self
|
14
|
+
super [x.to_f, y.to_f]
|
114
15
|
end
|
115
16
|
|
116
|
-
def
|
117
|
-
|
118
|
-
@y = Math.clamp(@y, min.y, max.y)
|
119
|
-
self
|
120
|
-
end
|
121
|
-
|
122
|
-
def clamp_scalar(min, max)
|
123
|
-
min, max = min.to_f, max.to_f
|
124
|
-
@x = Math.clamp(@x, min, max)
|
125
|
-
@y = Math.clamp(@y, min, max)
|
126
|
-
self
|
127
|
-
end
|
128
|
-
|
129
|
-
def floor
|
130
|
-
@x = @x.floor.to_f
|
131
|
-
@y = @y.floor.to_f
|
132
|
-
self
|
133
|
-
end
|
134
|
-
|
135
|
-
def ceil
|
136
|
-
@x = @x.ceil.to_f
|
137
|
-
@y = @y.ceil.to_f
|
138
|
-
self
|
139
|
-
end
|
140
|
-
|
141
|
-
def round
|
142
|
-
@x = @x.round.to_f
|
143
|
-
@y = @y.round.to_f
|
144
|
-
self
|
145
|
-
end
|
146
|
-
|
147
|
-
def round_to_zero
|
148
|
-
@x = ( @x < 0 ) ? @x.ceil.to_f : @x.floor.to_f
|
149
|
-
@y = ( @y < 0 ) ? @y.ceil.to_f : @y.floor.to_f
|
150
|
-
self
|
151
|
-
end
|
17
|
+
def x; @elements[0]; end
|
18
|
+
def y; @elements[1]; end
|
152
19
|
|
153
|
-
def
|
154
|
-
|
155
|
-
@y = -@y
|
156
|
-
self
|
157
|
-
end
|
20
|
+
def x=(value); @elements[0] = value.to_f; end
|
21
|
+
def y=(value); @elements[1] = value.to_f; end
|
158
22
|
|
159
23
|
def dot(v)
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
def length
|
164
|
-
Math.sqrt(length_sq)
|
165
|
-
end
|
166
|
-
|
167
|
-
def length_sq
|
168
|
-
self.dot(self)
|
169
|
-
end
|
170
|
-
|
171
|
-
def normalize
|
172
|
-
self.divide_scalar(self.length)
|
173
|
-
end
|
174
|
-
|
175
|
-
def distance_to(v)
|
176
|
-
Math.sqrt(distance_to_squared(v))
|
24
|
+
x * v.x + y * v.y
|
177
25
|
end
|
178
26
|
|
179
27
|
def distance_to_squared(v)
|
180
|
-
dx, dy =
|
28
|
+
dx, dy = x - v.x, y - v.y
|
181
29
|
dx * dx + dy * dy
|
182
30
|
end
|
183
31
|
|
184
|
-
def set_length(l)
|
185
|
-
old_length = self.length
|
186
|
-
if old_length != 0 && l != old_length
|
187
|
-
self.multiply_scalar(l / old_length)
|
188
|
-
end
|
189
|
-
self
|
190
|
-
end
|
191
|
-
|
192
|
-
def lerp(v, alpha)
|
193
|
-
@x += (v.x - @x) * alpha
|
194
|
-
@y += (v.y - @y) * alpha
|
195
|
-
self
|
196
|
-
end
|
197
|
-
|
198
|
-
def lerp_vectors(v1, v2, alpha)
|
199
|
-
self.sub_vectors(v2, v1).multiply_scalar(alpha).add(v1);
|
200
|
-
end
|
201
|
-
|
202
|
-
def ==(v)
|
203
|
-
v.x == @x && v.y == @y
|
204
|
-
end
|
205
|
-
|
206
|
-
def from_array(array, offset = 0)
|
207
|
-
@x = array[offset]
|
208
|
-
@y = array[offset + 1]
|
209
|
-
self
|
210
|
-
end
|
211
|
-
|
212
|
-
def to_array(array = [], offset = 0)
|
213
|
-
array.tap { |a|
|
214
|
-
a[offset] = @x;
|
215
|
-
a[offset + 1] = @y;
|
216
|
-
}
|
217
|
-
end
|
218
|
-
|
219
|
-
def to_a
|
220
|
-
self.to_array
|
221
|
-
end
|
222
|
-
|
223
32
|
def from_attribute(attribute, index, offset = 0)
|
224
33
|
index = index * attribute.item_size + offset
|
225
|
-
@
|
226
|
-
@
|
34
|
+
@elements[0] = attribute.array[index]
|
35
|
+
@elements[1] = attribute.array[index + 1]
|
227
36
|
self
|
228
37
|
end
|
229
|
-
|
230
|
-
def clone
|
231
|
-
Vector2.new(@x, @y)
|
232
|
-
end
|
233
|
-
|
234
|
-
def to_s
|
235
|
-
"[#{x}, #{y}]"
|
236
|
-
end
|
237
38
|
end
|
238
39
|
end
|