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.
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