mittsu 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/README.md +1 -1
  4. data/lib/mittsu/cameras/orthographic_camera.rb +13 -0
  5. data/lib/mittsu/cameras/perspective_camera.rb +11 -0
  6. data/lib/mittsu/core/geometry.rb +12 -9
  7. data/lib/mittsu/core/object_3d.rb +33 -66
  8. data/lib/mittsu/lights/ambient_light.rb +8 -0
  9. data/lib/mittsu/lights/directional_light.rb +9 -0
  10. data/lib/mittsu/lights/hemisphere_light.rb +9 -0
  11. data/lib/mittsu/lights/point_light.rb +11 -0
  12. data/lib/mittsu/lights/spot_light.rb +13 -0
  13. data/lib/mittsu/loaders.rb +1 -0
  14. data/lib/mittsu/loaders/mtl_loader.rb +5 -12
  15. data/lib/mittsu/loaders/obj_loader.rb +212 -0
  16. data/lib/mittsu/loaders/obj_mtl_loader.rb +11 -207
  17. data/lib/mittsu/materials/material.rb +5 -2
  18. data/lib/mittsu/materials/mesh_basic_material.rb +0 -9
  19. data/lib/mittsu/math/color.rb +44 -104
  20. data/lib/mittsu/math/matrix3.rb +8 -1
  21. data/lib/mittsu/math/matrix4.rb +6 -0
  22. data/lib/mittsu/math/vector.rb +251 -0
  23. data/lib/mittsu/math/vector2.rb +14 -213
  24. data/lib/mittsu/math/vector3.rb +61 -351
  25. data/lib/mittsu/math/vector4.rb +45 -295
  26. data/lib/mittsu/objects/line.rb +12 -2
  27. data/lib/mittsu/objects/mesh.rb +18 -9
  28. data/lib/mittsu/renderers/glfw_window.rb +15 -13
  29. data/lib/mittsu/renderers/opengl/core/opengl_geometry.rb +253 -0
  30. data/lib/mittsu/renderers/opengl/core/opengl_object_3d.rb +131 -0
  31. data/lib/mittsu/renderers/opengl/lights/opengl_ambient_light.rb +26 -0
  32. data/lib/mittsu/renderers/opengl/lights/opengl_directional_light.rb +35 -0
  33. data/lib/mittsu/renderers/opengl/lights/opengl_hemisphere_light.rb +42 -0
  34. data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +52 -0
  35. data/lib/mittsu/renderers/opengl/lights/opengl_point_light.rb +36 -0
  36. data/lib/mittsu/renderers/opengl/lights/opengl_spot_light.rb +47 -0
  37. data/lib/mittsu/renderers/opengl/materials/opengl_line_basic_material.rb +16 -0
  38. data/lib/mittsu/renderers/opengl/materials/opengl_material.rb +275 -0
  39. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +69 -0
  40. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_lambert_material.rb +29 -0
  41. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_phong_material.rb +40 -0
  42. data/lib/mittsu/renderers/opengl/materials/opengl_shader_material.rb +11 -0
  43. data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +8 -0
  44. data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +54 -0
  45. data/lib/mittsu/renderers/opengl/objects/opengl_mesh.rb +77 -0
  46. data/lib/mittsu/renderers/opengl/opengl_buffer.rb +5 -0
  47. data/lib/mittsu/renderers/opengl/opengl_debug.rb +49 -7
  48. data/lib/mittsu/renderers/opengl/opengl_default_target.rb +54 -0
  49. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +763 -0
  50. data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +130 -0
  51. data/lib/mittsu/renderers/opengl/opengl_helper.rb +161 -0
  52. data/lib/mittsu/renderers/opengl/opengl_implementations.rb +61 -0
  53. data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +43 -0
  54. data/lib/mittsu/renderers/opengl/opengl_mittsu_params.rb +53 -0
  55. data/lib/mittsu/renderers/opengl/opengl_program.rb +147 -296
  56. data/lib/mittsu/renderers/opengl/opengl_state.rb +3 -5
  57. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +12 -10
  58. data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +8 -0
  59. data/lib/mittsu/renderers/opengl/textures/opengl_compressed_texture.rb +21 -0
  60. data/lib/mittsu/renderers/opengl/textures/opengl_cube_texture.rb +75 -0
  61. data/lib/mittsu/renderers/opengl/textures/opengl_data_texture.rb +23 -0
  62. data/lib/mittsu/renderers/opengl/textures/opengl_texture.rb +111 -0
  63. data/lib/mittsu/renderers/opengl_render_target.rb +117 -2
  64. data/lib/mittsu/renderers/opengl_renderer.rb +653 -2978
  65. data/lib/mittsu/renderers/shaders/rbsl_loader.rb +166 -0
  66. data/lib/mittsu/renderers/shaders/shader_chunk.rb +6 -9
  67. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +36 -37
  68. data/lib/mittsu/renderers/shaders/shader_lib.rb +26 -403
  69. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_fragment.rbsl +37 -0
  70. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_uniforms.rbslu +3 -0
  71. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_vertex.rbsl +33 -0
  72. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_fragment.rbsl +12 -0
  73. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_uniforms.rbslu +2 -0
  74. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_vertex.rbsl +12 -0
  75. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_fragment.rbsl +26 -0
  76. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_uniforms.rbslu +0 -0
  77. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_vertex.rbsl +12 -0
  78. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_fragment.rbsl +56 -0
  79. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_uniforms.rbslu +7 -0
  80. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_vertex.rbsl +37 -0
  81. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_fragment.rbsl +45 -0
  82. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_uniforms.rbslu +11 -0
  83. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_vertex.rbsl +43 -0
  84. data/lib/mittsu/renderers/shaders/shader_templates/fragment.glsl.erb +105 -0
  85. data/lib/mittsu/renderers/shaders/shader_templates/vertex.glsl.erb +143 -0
  86. data/lib/mittsu/renderers/shaders/uniforms_lib.rb +54 -55
  87. data/lib/mittsu/textures/texture.rb +5 -2
  88. data/lib/mittsu/version.rb +1 -1
  89. data/run_all_examples.sh +7 -0
  90. metadata +77 -28
  91. data/.ruby-version +0 -1
  92. data/lib/mittsu/core/hash_object.rb +0 -19
@@ -6,220 +6,24 @@ module Mittsu
6
6
  @manager = manager
7
7
  end
8
8
 
9
- def load(url, mtlurl)
10
- mtl_loader = MTLLoader.new(File.dirname(url))
11
- # mtl_loader.cross_origin = @cross_origin # TODO: not needed?
12
- materials_creator = mtl_loader.load(mtlurl)
9
+ def load(url, mtlurl = nil)
10
+ object = OBJLoader.new(@manager).load(url)
13
11
 
14
- materials_creator.preload
12
+ if !mtlurl.nil?
13
+ mtl_loader = MTLLoader.new(File.dirname(url))
14
+ materials_creator = mtl_loader.load(mtlurl)
15
15
 
16
- loader = FileLoader.new(@manager)
17
- # loader.cross_origin = @cross_origin # TODO: not needed?
16
+ materials_creator.preload
18
17
 
19
- text = loader.load(url)
20
- object = parse(text)
21
-
22
- object.traverse do |child_object|
23
- if child_object.is_a?(Mesh) && child_object.material.name && !child_object.material.name.empty?
24
- material = materials_creator.create(child_object.material.name)
25
- child_object.material = material if material
18
+ object.traverse do |child_object|
19
+ if child_object.is_a?(Mesh) && child_object.material.name && !child_object.material.name.empty?
20
+ material = materials_creator.create(child_object.material.name)
21
+ child_object.material = material if material
22
+ end
26
23
  end
27
24
  end
28
25
 
29
26
  object
30
27
  end
31
-
32
- def parse(data)
33
- @face_offset = 0
34
- @group = Group.new
35
- @object = @group
36
-
37
- @geometry = Geometry.new
38
- @material = MeshLambertMaterial.new
39
- @mesh = Mesh.new(@geometry, @material)
40
-
41
- @vertices = []
42
- @normals = []
43
- @uvs = []
44
-
45
- # v float float float
46
- vertex_pattern = /v( +[\d|.|+|\-|e]+)( +[\d|.|+|\-|e]+)( +[\d|.|+|\-|e]+)/
47
-
48
- # vn float float float
49
- normal_pattern = /vn( +[\d|.|+|\-|e]+)( +[\d|.|+|\-|e]+)( +[\d|.|+|\-|e]+)/
50
-
51
- # vt float flot
52
- uv_pattern = /vt( +[\d|.|+|\-|e]+)( +[\d|.|+|\-|e]+)/
53
-
54
- # f vertex vertex vertex
55
- face_pattern1 = /f( +\d+)( +\d+)( +\d+)?/
56
-
57
- # f vertex/uv vertex/uv vertex/uv
58
- face_pattern2 = /f( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))( +(\d+)\/(\d+))?/
59
-
60
- # f vertex/uv/normal vertex/uv/normal vertex/uv/normal ...
61
- face_pattern3 = /f( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))( +(\d+)\/(\d+)\/(\d+))?/
62
-
63
- # f vertex//normal vertex//normal vertex//normal ...
64
- face_pattern4 = /f( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))( +(\d+)\/\/(\d+))?/
65
-
66
- lines = data.split("\n")
67
-
68
- lines.each do |line|
69
- line = line.strip
70
-
71
- next if line.empty? || line.start_with?('#')
72
-
73
- if vertex_pattern =~ line
74
- # ["v 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
75
- @vertices << vector($1.to_f, $2.to_f, $3.to_f)
76
- elsif normal_pattern =~ line
77
- # ["vn 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
78
- @normals << vector($1.to_f, $2.to_f, $3.to_f)
79
- elsif uv_pattern =~ line
80
- # ["vt 0.1 0.2", "0.1", "0.2"]
81
- @uvs << uv($1.to_f, $2.to_f)
82
- elsif face_pattern1 =~ line
83
- # ["f 1 2 3", "1", "2", "3", undefined]
84
- handle_face_line([ $1, $2, $3, $4 ])
85
- elsif face_pattern2 =~ line
86
- # ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
87
- handle_face_line(
88
- [ $2, $5, $8, $11 ], #faces
89
- [ $3, $6, $9, $12 ] #uv
90
- )
91
- elsif face_pattern3 =~ line
92
- # ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
93
- handle_face_line(
94
- [ $2, $6, $10, $14 ], #faces
95
- [ $3, $7, $11, $15 ], #uv
96
- [ $4, $8, $12, $16 ] #normal
97
- )
98
- elsif face_pattern4 =~ line
99
- # ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
100
- handle_face_line(
101
- [ $2, $5, $8, $11 ], #faces
102
- [ ], #uv
103
- [ $3, $6, $9, $12 ] #normal
104
- )
105
- elsif /^o / =~ line
106
- # object
107
- mesh_n
108
- @face_offset = @face_offset + @vertices.length
109
- @vertices = []
110
- object = Object3D.new
111
- object.name = line[2..-1].strip
112
- @group.add(object)
113
- elsif /^g / =~ line
114
- # group
115
- mesh_n(line[2..-1].strip, nil)
116
- elsif /^usemtl / =~ line
117
- # material
118
- mesh_n(nil, line[7..-1].strip)
119
- elsif /^mtllib / =~ line
120
- # mtl file
121
-
122
- # TODO: ???
123
- # if mtllib_callback
124
- # mtlfile = line[7..-1].strip
125
- # mtllib_callback.(mtlfile)
126
- # end
127
- elsif /^s / =~ line
128
- # Smooth shading
129
- else
130
- puts "Mittsu::OBJMTLLoader: Unhandled line #{line}"
131
- end
132
- end
133
-
134
- mesh_n(nil, nil)
135
-
136
- @group
137
- end
138
-
139
- private
140
-
141
- def vector(x, y, z)
142
- Vector3.new(x, y, z)
143
- end
144
-
145
- def uv(u, v)
146
- Vector2.new(u, v)
147
- end
148
-
149
- def face3(a, b, c, normals = nil)
150
- Face3.new(a, b, c, normals)
151
- end
152
-
153
- def mesh_n(mesh_name = nil, material_name = nil)
154
- if !@vertices.empty?
155
- @geometry.vertices = @vertices
156
-
157
- @geometry.merge_vertices
158
- @geometry.compute_face_normals
159
- @geometry.compute_bounding_sphere
160
-
161
- @object.add(@mesh)
162
-
163
- @geometry = Geometry.new
164
- @mesh = Mesh.new(@geometry, @material)
165
- end
166
-
167
- @mesh.name = mesh_name unless mesh_name.nil?
168
-
169
- if !material_name.nil?
170
- @material = MeshLambertMaterial.new
171
- @material.name = material_name
172
-
173
- @mesh.material = @material
174
- end
175
- end
176
-
177
- def add_face(a, b, c, normal_inds = nil)
178
- if normal_inds.nil?
179
- @geometry.faces << face3(
180
- a.to_i - (@face_offset + 1),
181
- b.to_i - (@face_offset + 1),
182
- c.to_i - (@face_offset + 1)
183
- )
184
- else
185
- @geometry.faces << face3(
186
- a.to_i - (@face_offset + 1),
187
- b.to_i - (@face_offset + 1),
188
- c.to_i - (@face_offset + 1),
189
- normal_inds.take(3).map { |i| @normals[i.to_i - 1].clone }
190
- )
191
- end
192
- end
193
-
194
- def add_uvs(a, b, c)
195
- @geometry.face_vertex_uvs[0] << [
196
- @uvs[a.to_i - 1].clone,
197
- @uvs[b.to_i - 1].clone,
198
- @uvs[c.to_i - 1].clone
199
- ]
200
- end
201
-
202
- def handle_face_line(faces, uvs = nil, normal_inds = nil)
203
- if faces[3].nil?
204
- add_face(faces[0], faces[1], faces[2], normal_inds)
205
-
206
- if !uvs.nil? && !uvs.empty?
207
- add_uvs(uvs[0], uvs[1], uvs[2])
208
- end
209
- else
210
- if !normal_inds.nil? && !normal_inds.empty?
211
- add_face(faces[0], faces[1], fances[3], [normal_inds[0], normal_inds[1], normal_inds[3]])
212
- add_face(faces[1], faces[2], fances[3], [normal_inds[1], normal_inds[2], normal_inds[3]])
213
- else
214
- add_face(faces[0], faces[1], faces[3])
215
- add_face(faces[1], faces[2], faces[3])
216
- end
217
-
218
- if !uvs.nil? && !uvs.empty?
219
- add_uvs(uvs[0], uvs[1], uvs[2])
220
- add_uvs(uvs[1], uvs[2], uvs[2])
221
- end
222
- end
223
- end
224
28
  end
225
29
  end
@@ -1,9 +1,8 @@
1
1
  require 'securerandom'
2
2
  require 'mittsu'
3
- require 'mittsu/core/hash_object'
4
3
 
5
4
  module Mittsu
6
- class Material < HashObject
5
+ class Material
7
6
  include EventDispatcher
8
7
 
9
8
  attr_reader :id, :uuid, :type
@@ -136,6 +135,10 @@ module Mittsu
136
135
  dispatch_event type: :dispose
137
136
  end
138
137
 
138
+ def implementation(renderer)
139
+ @_implementation ||= renderer.create_implementation(self)
140
+ end
141
+
139
142
  private
140
143
 
141
144
  def has_property?(key)
@@ -109,14 +109,5 @@ module Mittsu
109
109
 
110
110
  material
111
111
  end
112
-
113
- def to_json
114
- output = super
115
- output[:color] = @color.hex
116
- output[:vertex_colors] = @vertex_colors unless @vertex_colors == NoColors
117
- output[:blending] = @blending unless @blending == NormalBlending
118
- output[:side] = @side unless @side == FrontSide
119
- output
120
- end
121
112
  end
122
113
  end
@@ -1,10 +1,13 @@
1
1
  require 'mittsu/math'
2
+ require 'mittsu/math/vector3'
2
3
 
3
4
  module Mittsu
4
- class Color
5
- attr_accessor :r, :g, :b
5
+ class Color < Vector3
6
+ ELEMENTS = { r: 0, g: 1, b: 2 }
7
+ DIMENSIONS = ELEMENTS.count
6
8
 
7
9
  def initialize(*args)
10
+ super(0, 0, 0)
8
11
  case args.length
9
12
  when 3 then self.set_rgb(*args)
10
13
  when 1 then self.set(args.first)
@@ -13,6 +16,14 @@ module Mittsu
13
16
  end
14
17
  end
15
18
 
19
+ alias :r :x
20
+ alias :g :y
21
+ alias :b :z
22
+
23
+ alias :r= :x=
24
+ alias :g= :y=
25
+ alias :b= :z=
26
+
16
27
  def set(value)
17
28
  case value
18
29
  when Color
@@ -29,29 +40,27 @@ module Mittsu
29
40
 
30
41
  def set_hex(hex)
31
42
  hex = hex.floor
32
- @r = (hex >> 16 & 255) / 255.0
33
- @g = (hex >> 8 & 255) / 255.0
34
- @b = (hex & 255) / 255.0
43
+ self.r = (hex >> 16 & 255) / 255.0
44
+ self.g = (hex >> 8 & 255) / 255.0
45
+ self.b = (hex & 255) / 255.0
35
46
  self
36
47
  end
37
48
 
38
49
  def set_rgb(r, g, b)
39
- @r = r.to_f
40
- @g = g.to_f
41
- @b = b.to_f
50
+ @elements = [r.to_f, g.to_f, b.to_f]
42
51
  self
43
52
  end
44
53
 
45
54
  def set_hsl(h, s, l)
46
55
  # h,s,l ranges are in 0.0 - 1.0
47
56
  if s.zero?
48
- @r = @g = @b = l
57
+ self.r = self.g = self.b = l
49
58
  else
50
59
  p = l <= 0.5 ? l * (1.0 + s) : l + s - (l * s)
51
60
  q = (2.0 * l) - p
52
- @r = hue2rgb(q, p, h + 1.0 / 3.0)
53
- @g = hue2rgb(q, p, h)
54
- @b = hue2rgb(q, p, h - 1.0 / 3.0)
61
+ self.r = hue2rgb(q, p, h + 1.0 / 3.0)
62
+ self.g = hue2rgb(q, p, h)
63
+ self.b = hue2rgb(q, p, h - 1.0 / 3.0)
55
64
  end
56
65
  self
57
66
  end
@@ -59,16 +68,16 @@ module Mittsu
59
68
  def set_style(style)
60
69
  # rgb(255,0,0)
61
70
  if /^rgb\((\d+), ?(\d+), ?(\d+)\)$/i =~ style
62
- @r = [255.0, $1.to_f].min / 255.0
63
- @g = [255.0, $2.to_f].min / 255.0
64
- @b = [255.0, $3.to_f].min / 255.0
71
+ self.r = [255.0, $1.to_f].min / 255.0
72
+ self.g = [255.0, $2.to_f].min / 255.0
73
+ self.b = [255.0, $3.to_f].min / 255.0
65
74
  return self
66
75
  end
67
76
  # rgb(100%,0%,0%)
68
77
  if /^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i =~ style
69
- @r = [100.0, $1.to_f].min / 100.0
70
- @g = [100.0, $2.to_f].min / 100.0
71
- @b = [100.0, $3.to_f].min / 100.0
78
+ self.r = [100.0, $1.to_f].min / 100.0
79
+ self.g = [100.0, $2.to_f].min / 100.0
80
+ self.b = [100.0, $3.to_f].min / 100.0
72
81
  return self
73
82
  end
74
83
  # #ff0000
@@ -88,45 +97,38 @@ module Mittsu
88
97
  end
89
98
  end
90
99
 
91
- def copy(color)
92
- @r = color.r
93
- @g = color.g
94
- @b = color.b
95
- self
96
- end
97
-
98
100
  def copy_gamma_to_linear(color, gamma_factor = 2.0)
99
- @r = color.r ** gamma_factor
100
- @g = color.g ** gamma_factor
101
- @b = color.b ** gamma_factor
101
+ self.r = color.r ** gamma_factor
102
+ self.g = color.g ** gamma_factor
103
+ self.b = color.b ** gamma_factor
102
104
  self
103
105
  end
104
106
 
105
107
  def copy_linear_to_gamma(color, gamma_factor = 2.0)
106
108
  safe_inverse = (gamma_factor > 0) ? (1.0 / gamma_factor) : 1.0
107
- @r = color.r ** safe_inverse
108
- @g = color.g ** safe_inverse
109
- @b = color.b ** safe_inverse
109
+ self.r = color.r ** safe_inverse
110
+ self.g = color.g ** safe_inverse
111
+ self.b = color.b ** safe_inverse
110
112
  self
111
113
  end
112
114
 
113
115
  def convert_gamma_to_linear
114
- rr, gg, bb = @r, @g, @b
115
- @r = rr * rr
116
- @g = gg * gg
117
- @b = bb * bb
116
+ rr, gg, bb = self.r, self.g, self.b
117
+ self.r = rr * rr
118
+ self.g = gg * gg
119
+ self.b = bb * bb
118
120
  self
119
121
  end
120
122
 
121
123
  def convert_linear_to_gamma
122
- @r = Math.sqrt(@r)
123
- @g = Math.sqrt(@g)
124
- @b = Math.sqrt(@b)
124
+ self.r = Math.sqrt(self.r)
125
+ self.g = Math.sqrt(self.g)
126
+ self.b = Math.sqrt(self.b)
125
127
  self
126
128
  end
127
129
 
128
130
  def hex
129
- (@r * 255).to_i << 16 ^ (@g * 255).to_i << 8 ^ (@b * 255).to_i << 0
131
+ (self.r * 255).to_i << 16 ^ (self.g * 255).to_i << 8 ^ (self.b * 255).to_i << 0
130
132
  end
131
133
 
132
134
  def hex_string
@@ -136,7 +138,7 @@ module Mittsu
136
138
  def hsl(target = nil)
137
139
  # h,s,l ranges are in 0.0 - 1.0
138
140
  hsl = target || { h: 0.0, s: 0.0, l: 0.0 }
139
- rr, gg, bb = @r, @g, @b
141
+ rr, gg, bb = self.r, self.g, self.b
140
142
  max = [r, g, b].max
141
143
  min = [r, g, b].min
142
144
  hue, saturation = nil, nil
@@ -161,7 +163,7 @@ module Mittsu
161
163
  end
162
164
 
163
165
  def style
164
- "rgb(#{ (@r * 255).to_i },#{ (@g * 255).to_i },#{ (@b * 255).to_i })"
166
+ "rgb(#{ (self.r * 255).to_i },#{ (self.g * 255).to_i },#{ (self.b * 255).to_i })"
165
167
  end
166
168
 
167
169
  def offset_hsl(h, s, l)
@@ -173,69 +175,7 @@ module Mittsu
173
175
  self
174
176
  end
175
177
 
176
- def add(color)
177
- @r += color.r
178
- @g += color.g
179
- @b += color.b
180
- self
181
- end
182
-
183
- def add_colors(color1, color2)
184
- @r = color1.r + color2.r
185
- @g = color1.g + color2.g
186
- @b = color1.b + color2.b
187
- self
188
- end
189
-
190
- def add_scalar(s)
191
- @r += s
192
- @g += s
193
- @b += s
194
- self
195
- end
196
-
197
- def multiply(color)
198
- @r *= color.r
199
- @g *= color.g
200
- @b *= color.b
201
- self
202
- end
203
-
204
- def multiply_scalar(s)
205
- @r *= s
206
- @g *= s
207
- @b *= s
208
- self
209
- end
210
-
211
- def lerp(color, alpha)
212
- @r += (color.r - @r) * alpha
213
- @g += (color.g - @g) * alpha
214
- @b += (color.b - @b) * alpha
215
- self
216
- end
217
-
218
- def equals(c)
219
- (c.r == @r) && (c.g == @g) && (c.b == @b)
220
- end
221
-
222
- def from_array(array)
223
- @r = array[0]
224
- @g = array[1]
225
- @b = array[2]
226
- self
227
- end
228
-
229
- def to_array(array = [], offset = 0)
230
- array[offset] = @r
231
- array[offset + 1] = @g
232
- array[offset + 2] = @b
233
- array
234
- end
235
-
236
- def clone
237
- Mittsu::Color.new(@r, @g, @b)
238
- end
178
+ alias :add_colors :add_vectors
239
179
 
240
180
  private
241
181