mittsu 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-workflow.yml +71 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +0 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +6 -8
  7. data/Rakefile +1 -0
  8. data/install-glfw.ps1 +13 -0
  9. data/lib/mittsu/cameras/camera.rb +0 -2
  10. data/lib/mittsu/cameras/cube_camera.rb +0 -2
  11. data/lib/mittsu/cameras/orthographic_camera.rb +2 -4
  12. data/lib/mittsu/cameras/perspective_camera.rb +4 -5
  13. data/lib/mittsu/core/buffer_attribute.rb +12 -0
  14. data/lib/mittsu/core/buffer_geometry.rb +3 -3
  15. data/lib/mittsu/core/geometry.rb +2 -4
  16. data/lib/mittsu/core/object_3d.rb +9 -7
  17. data/lib/mittsu/core/raycaster.rb +0 -2
  18. data/lib/mittsu/extras/geometries/circle_geometry.rb +3 -3
  19. data/lib/mittsu/extras/geometries/cylinder_geometry.rb +5 -5
  20. data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +2 -2
  21. data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +2 -2
  22. data/lib/mittsu/extras/geometries/lathe_geometry.rb +3 -3
  23. data/lib/mittsu/extras/geometries/parametric_geometry.rb +19 -19
  24. data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +6 -7
  25. data/lib/mittsu/extras/geometries/ring_geometry.rb +4 -4
  26. data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
  27. data/lib/mittsu/extras/geometries/torus_geometry.rb +7 -7
  28. data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +9 -9
  29. data/lib/mittsu/extras/helpers/camera_helper.rb +38 -38
  30. data/lib/mittsu/extras/image_utils.rb +1 -1
  31. data/lib/mittsu/lights/directional_light.rb +9 -5
  32. data/lib/mittsu/lights/spot_light.rb +1 -1
  33. data/lib/mittsu/loaders/loader.rb +2 -2
  34. data/lib/mittsu/loaders/obj_loader.rb +4 -0
  35. data/lib/mittsu/materials/material.rb +6 -3
  36. data/lib/mittsu/math/box2.rb +0 -2
  37. data/lib/mittsu/math/box3.rb +0 -2
  38. data/lib/mittsu/math/color.rb +3 -4
  39. data/lib/mittsu/math/euler.rb +25 -26
  40. data/lib/mittsu/math/frustum.rb +0 -2
  41. data/lib/mittsu/math/line3.rb +0 -2
  42. data/lib/mittsu/math/matrix3.rb +0 -2
  43. data/lib/mittsu/math/matrix4.rb +10 -12
  44. data/lib/mittsu/math/plane.rb +0 -2
  45. data/lib/mittsu/math/quaternion.rb +18 -20
  46. data/lib/mittsu/math/ray.rb +1 -3
  47. data/lib/mittsu/math/sphere.rb +1 -3
  48. data/lib/mittsu/math/spline.rb +0 -2
  49. data/lib/mittsu/math/triangle.rb +1 -3
  50. data/lib/mittsu/math/vector.rb +3 -3
  51. data/lib/mittsu/math/vector2.rb +0 -1
  52. data/lib/mittsu/math/vector3.rb +108 -1
  53. data/lib/mittsu/math/vector4.rb +8 -9
  54. data/lib/mittsu/math.rb +0 -5
  55. data/lib/mittsu/objects/line.rb +0 -1
  56. data/lib/mittsu/renderers/glfw_lib.rb +24 -3
  57. data/lib/mittsu/renderers/glfw_window.rb +6 -2
  58. data/lib/mittsu/renderers/opengl/core/object_3d.rb +1 -1
  59. data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
  60. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +1 -0
  61. data/lib/mittsu/renderers/opengl/opengl_program.rb +1 -2
  62. data/lib/mittsu/renderers/opengl/textures/texture.rb +2 -2
  63. data/lib/mittsu/renderers/opengl_renderer.rb +9 -14
  64. data/lib/mittsu/scenes/scene.rb +0 -2
  65. data/lib/mittsu/textures/texture.rb +4 -2
  66. data/lib/mittsu/utils.rb +15 -0
  67. data/lib/mittsu/version.rb +1 -2
  68. data/lib/mittsu.rb +1 -16
  69. data/mittsu.gemspec +14 -13
  70. metadata +60 -47
  71. data/.circleci/config.yml +0 -87
  72. data/.circleci/images/primary/Dockerfile +0 -10
  73. data/appveyor.yml +0 -23
  74. data/install_glfw.ps1 +0 -11
@@ -3,7 +3,7 @@ require 'mittsu/math'
3
3
 
4
4
  module Mittsu
5
5
  class TorusGeometry < Geometry
6
- def initialize(radius = 100.0, tube = 40.0, radial_segments = 8, tubular_segments = 6, arc = (Math::PI * 2.0))
6
+ def initialize(radius = 100.0, tube = 40.0, radial_segments = 8, tubular_segments = 6, arc = (::Math::PI * 2.0))
7
7
  super()
8
8
 
9
9
  @type = 'TorusGeometry'
@@ -23,15 +23,15 @@ module Mittsu
23
23
  for j in 0..radial_segments do
24
24
  for i in 0..tubular_segments do
25
25
  u = i.to_f / tubular_segments * arc
26
- v = j.to_f / radial_segments * Math::PI * 2.0
26
+ v = j.to_f / radial_segments * ::Math::PI * 2.0
27
27
 
28
- center.x = radius * Math.cos(u)
29
- center.y = radius * Math.sin(u)
28
+ center.x = radius * ::Math.cos(u)
29
+ center.y = radius * ::Math.sin(u)
30
30
 
31
31
  vertex = Vector3.new
32
- vertex.x = (radius + tube * Math.cos(v)) * Math.cos(u)
33
- vertex.y = (radius + tube * Math.cos(v)) * Math.sin(u)
34
- vertex.z = tube * Math.sin(v)
32
+ vertex.x = (radius + tube * ::Math.cos(v)) * ::Math.cos(u)
33
+ vertex.y = (radius + tube * ::Math.cos(v)) * ::Math.sin(u)
34
+ vertex.z = tube * ::Math.sin(v)
35
35
 
36
36
  @vertices << vertex
37
37
 
@@ -37,7 +37,7 @@ module Mittsu
37
37
 
38
38
  for i in 0..tubular_segments do
39
39
  # the radian "u" is used to calculate the position on the torus curve of the current tubular segement
40
- u = i.to_f / tubular_segments.to_f * p_val.to_f * Math::PI * 2.0
40
+ u = i.to_f / tubular_segments.to_f * p_val.to_f * ::Math::PI * 2.0
41
41
 
42
42
  # now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.
43
43
  # these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions
@@ -57,9 +57,9 @@ module Mittsu
57
57
  for j in 0..radial_segments do
58
58
  # now calculate the vertices. they are nothing more than an extrusion of the torus curve.
59
59
  # because we extrude a shape in the xy-plane, there is no need to calculate a z-value.
60
- v = j.to_f / radial_segments.to_f * Math::PI * 2.0
61
- cx = -tube * Math.cos(v)
62
- cy = tube * Math.sin(v)
60
+ v = j.to_f / radial_segments.to_f * ::Math::PI * 2.0
61
+ cx = -tube * ::Math.cos(v)
62
+ cy = tube * ::Math.sin(v)
63
63
 
64
64
  # now calculate the final vertex position.
65
65
  # first we orient the extrusion with our basis vectos, then we add it to the current position on the curve
@@ -107,14 +107,14 @@ module Mittsu
107
107
  private
108
108
 
109
109
  def calculate_position_on_curve(u, p_val, q_val, radius, position)
110
- cu = Math.cos(u)
111
- su = Math.sin(u)
110
+ cu = ::Math.cos(u)
111
+ su = ::Math.sin(u)
112
112
  qu_over_p = q_val.to_f / p_val.to_f * u
113
- cs = Math.cos(qu_over_p)
113
+ cs = ::Math.cos(qu_over_p)
114
114
 
115
115
  position.x = radius * (2.0 + cs) * 0.5 * cu
116
116
  position.y = radius * (2.0 + cs) * su * 0.5
117
- position.z = radius * Math.sin(qu_over_p) * 0.5
117
+ position.z = radius * ::Math.sin(qu_over_p) * 0.5
118
118
  end
119
119
  end
120
- end
120
+ end
@@ -15,58 +15,58 @@ module Mittsu
15
15
 
16
16
  # colors
17
17
 
18
- @hex_frustrum = 0xffaa00
19
- @hex_cone = 0xff0000
20
- @hex_up = 0x00aaff
21
- @hex_target = 0xffffff
22
- @hex_cross = 0x333333
18
+ hex_frustrum = 0xffaa00
19
+ hex_cone = 0xff0000
20
+ hex_up = 0x00aaff
21
+ hex_target = 0xffffff
22
+ hex_cross = 0x333333
23
23
 
24
24
  # near
25
25
 
26
- add_line(:n1, :n2, @hex_frustrum)
27
- add_line(:n2, :n4, @hex_frustrum)
28
- add_line(:n4, :n3, @hex_frustrum)
29
- add_line(:n3, :n1, @hex_frustrum)
26
+ add_line(:n1, :n2, hex_frustrum)
27
+ add_line(:n2, :n4, hex_frustrum)
28
+ add_line(:n4, :n3, hex_frustrum)
29
+ add_line(:n3, :n1, hex_frustrum)
30
30
 
31
31
  # far
32
32
 
33
- add_line(:f1, :f2, @hex_frustrum)
34
- add_line(:f2, :f4, @hex_frustrum)
35
- add_line(:f4, :f3, @hex_frustrum)
36
- add_line(:f3, :f1, @hex_frustrum)
33
+ add_line(:f1, :f2, hex_frustrum)
34
+ add_line(:f2, :f4, hex_frustrum)
35
+ add_line(:f4, :f3, hex_frustrum)
36
+ add_line(:f3, :f1, hex_frustrum)
37
37
 
38
38
  # sides
39
39
 
40
- add_line(:n1, :f1, @hex_frustrum)
41
- add_line(:n2, :f2, @hex_frustrum)
42
- add_line(:n3, :f3, @hex_frustrum)
43
- add_line(:n4, :f4, @hex_frustrum)
40
+ add_line(:n1, :f1, hex_frustrum)
41
+ add_line(:n2, :f2, hex_frustrum)
42
+ add_line(:n3, :f3, hex_frustrum)
43
+ add_line(:n4, :f4, hex_frustrum)
44
44
 
45
45
  # cone
46
46
 
47
- add_line(:p, :n1, @hex_frustrum)
48
- add_line(:p, :n2, @hex_frustrum)
49
- add_line(:p, :n3, @hex_frustrum)
50
- add_line(:p, :n4, @hex_frustrum)
47
+ add_line(:p, :n1, hex_cone)
48
+ add_line(:p, :n2, hex_cone)
49
+ add_line(:p, :n3, hex_cone)
50
+ add_line(:p, :n4, hex_cone)
51
51
 
52
52
  # up
53
53
 
54
- add_line(:u1, :u2, @hex_frustrum)
55
- add_line(:u2, :u3, @hex_frustrum)
56
- add_line(:u3, :u1, @hex_frustrum)
54
+ add_line(:u1, :u2, hex_up)
55
+ add_line(:u2, :u3, hex_up)
56
+ add_line(:u3, :u1, hex_up)
57
57
 
58
58
  # target
59
59
 
60
- add_line(:c, :t, @hex_frustrum)
61
- add_line(:p, :c, @hex_frustrum)
60
+ add_line(:c, :t, hex_target)
61
+ add_line(:p, :c, hex_cross)
62
62
 
63
63
  # cross
64
64
 
65
- add_line(:cn1, :cn2, @hex_frustrum)
66
- add_line(:cn3, :cn4, @hex_frustrum)
65
+ add_line(:cn1, :cn2, hex_cross)
66
+ add_line(:cn3, :cn4, hex_cross)
67
67
 
68
- add_line(:cf1, :cf2, @hex_frustrum)
69
- add_line(:cf3, :cf4, @hex_frustrum)
68
+ add_line(:cf1, :cf2, hex_cross)
69
+ add_line(:cf3, :cf4, hex_cross)
70
70
 
71
71
  super(@geometry, @material, LinePieces)
72
72
 
@@ -101,10 +101,10 @@ module Mittsu
101
101
 
102
102
  # far
103
103
 
104
- set_point(:f1, -w, -h, -1.0)
105
- set_point(:f2, w, -h, -1.0)
106
- set_point(:f3, -w, h, -1.0)
107
- set_point(:f4, w, h, -1.0)
104
+ set_point(:f1, -w, -h, 1.0)
105
+ set_point(:f2, w, -h, 1.0)
106
+ set_point(:f3, -w, h, 1.0)
107
+ set_point(:f4, w, h, 1.0)
108
108
 
109
109
  # up
110
110
 
@@ -119,10 +119,10 @@ module Mittsu
119
119
  set_point(:cf3, 0.0, -h, 1.0)
120
120
  set_point(:cf4, 0.0, h, 1.0)
121
121
 
122
- set_point(:cn1, -w, 0.0, 1.0)
123
- set_point(:cn2, w, 0.0, 1.0)
124
- set_point(:cn3, 0.0, -h, 1.0)
125
- set_point(:cn4, 0.0, h, 1.0)
122
+ set_point(:cn1, -w, 0.0, -1.0)
123
+ set_point(:cn2, w, 0.0, -1.0)
124
+ set_point(:cn3, 0.0, -h, -1.0)
125
+ set_point(:cn4, 0.0, h, -1.0)
126
126
 
127
127
  @geometry.vertices_need_update = true
128
128
  end
@@ -76,7 +76,7 @@ module Mittsu
76
76
  end
77
77
 
78
78
  def normalize(a)
79
- l = Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2])
79
+ l = ::Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2])
80
80
  [a[0] / l, a[1] / l, a[2] / l]
81
81
  end
82
82
  end
@@ -120,12 +120,16 @@ module Mittsu
120
120
  light.shadow_cascade_offset.copy(@shadow_cascade_offset)
121
121
  light.shadow_cascade_count = @shadow_cascade_count
122
122
 
123
- light.shadow_cascade_bias = @shadow_cascade_bias.dup
124
- light.shadow_cascade_width = @shadow_cascade_width.dup
125
- light.shadow_cascade_height = @shadow_cascade_height.dup
123
+ light.shadow_cascade_bias = @shadow_cascade_bias.dup
124
+ light.shadow_cascade_width = @shadow_cascade_width.dup
125
+ light.shadow_cascade_height = @shadow_cascade_height.dup
126
126
 
127
- light.shadow_cascade_near_z = @shadow_cascade_near_z.dup
128
- light.shadow_cascade_far_z = @shadow_cascade_far_z.dup
127
+ light.shadow_cascade_near_z = @shadow_cascade_near_z.dup
128
+ light.shadow_cascade_far_z = @shadow_cascade_far_z.dup
129
+ end
130
+
131
+ def virtual?
132
+ false
129
133
  end
130
134
 
131
135
  protected
@@ -20,7 +20,7 @@ module Mittsu
20
20
  :shadow_camera,
21
21
  :shadow_matrix
22
22
 
23
- def initialize(color = nil, intensity = 1.0, distance = 0.0, angle = (Math::PI / 3.0), exponent = 10.0, decay = 1.0)
23
+ def initialize(color = nil, intensity = 1.0, distance = 0.0, angle = (::Math::PI / 3.0), exponent = 10.0, decay = 1.0)
24
24
  super(color)
25
25
 
26
26
  @type = 'SpotLight'
@@ -151,8 +151,8 @@ module Mittsu
151
151
  private
152
152
 
153
153
  def nearest_pow2(n)
154
- l = Math.log(n) / Math::LN2
155
- Math.pow(2, Math.round(l))
154
+ l = ::Math.log(n) / Math::LN2
155
+ ::Math.pow(2, ::Math.round(l))
156
156
  end
157
157
 
158
158
  def create_texture(where, name, source_file, repeat, offset, wrap, anisotropy)
@@ -23,6 +23,10 @@ module Mittsu
23
23
 
24
24
  def initialize(manager = DefaultLoadingManager)
25
25
  @manager = manager
26
+ @object = nil
27
+ @mesh = nil
28
+ @material = nil
29
+ @_listeners = {}
26
30
  end
27
31
 
28
32
  def load(url)
@@ -1,5 +1,4 @@
1
1
  require 'securerandom'
2
- require 'mittsu'
3
2
 
4
3
  module Mittsu
5
4
  class Material
@@ -7,9 +6,13 @@ module Mittsu
7
6
 
8
7
  attr_reader :id, :uuid, :type
9
8
 
10
- attr_accessor :name, :side, :opacity, :transparent, :blending, :blend_src, :blend_dst, :blend_equation, :blend_src_alpha, :blend_dst_alpha, :blend_equation_alpha, :depth_test, :depth_write, :color_write, :polygon_offset, :polygon_offset_factor, :polygon_offset_units, :alpha_test, :overdraw, :visible, :attributes, :shading, :program
9
+ attr_accessor :name, :side, :opacity, :transparent, :blending, :blend_src, :blend_dst, :blend_equation, :blend_src_alpha,
10
+ :blend_dst_alpha, :blend_equation_alpha, :depth_test, :depth_write, :color_write, :polygon_offset, :polygon_offset_factor,
11
+ :polygon_offset_units, :alpha_test, :overdraw, :visible, :attributes, :shading, :program
11
12
 
12
- attr_accessor :map, :env_map, :light_map, :light_map, :normal_map, :specular_map, :alpha_map, :combine, :vertex_colors, :fog, :size_attenuation, :skinning, :morph_targets, :morph_normals, :metal, :wrap_around, :defines, :lights, :color, :bump_map, :reflectivity, :refraction_ratio, :wireframe, :default_attribute_values, :uniforms, :vertex_shader, :fragment_shader
13
+ attr_accessor :map, :env_map, :light_map, :normal_map, :specular_map, :alpha_map, :combine, :vertex_colors, :fog,
14
+ :size_attenuation, :skinning, :morph_targets, :morph_normals, :metal, :wrap_around, :defines, :lights, :color, :bump_map,
15
+ :reflectivity, :refraction_ratio, :wireframe, :default_attribute_values, :uniforms, :vertex_shader, :fragment_shader
13
16
 
14
17
  def initialize
15
18
  super
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Box2
5
3
  attr_accessor :min, :max
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Box3
5
3
  attr_accessor :min, :max
@@ -1,4 +1,3 @@
1
- require 'mittsu/math'
2
1
  require 'mittsu/math/vector3'
3
2
 
4
3
  module Mittsu
@@ -121,9 +120,9 @@ module Mittsu
121
120
  end
122
121
 
123
122
  def convert_linear_to_gamma
124
- self.r = Math.sqrt(self.r)
125
- self.g = Math.sqrt(self.g)
126
- self.b = Math.sqrt(self.b)
123
+ self.r = ::Math.sqrt(self.r)
124
+ self.g = ::Math.sqrt(self.g)
125
+ self.b = ::Math.sqrt(self.b)
127
126
  self
128
127
  end
129
128
 
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Euler
5
3
  RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]
@@ -9,6 +7,7 @@ module Mittsu
9
7
 
10
8
  def initialize(x = 0.0, y = 0.0, z = 0.0, order = DefaultOrder)
11
9
  @x, @y, @z, @order = x.to_f, y.to_f, z.to_f, order
10
+ @on_change_callback = nil
12
11
  end
13
12
 
14
13
  def set(x, y, z, order = nil)
@@ -57,57 +56,57 @@ module Mittsu
57
56
  m31 = te[2]; m32 = te[6]; m33 = te[10]
58
57
  order = order || @order
59
58
  if order == 'XYZ'
60
- @y = Math.asin(Math.clamp(m13, -1.0, 1.0))
59
+ @y = ::Math.asin(Math.clamp(m13, -1.0, 1.0))
61
60
  if m13.abs < 0.99999
62
- @x = Math.atan2(- m23, m33)
63
- @z = Math.atan2(- m12, m11)
61
+ @x = ::Math.atan2(- m23, m33)
62
+ @z = ::Math.atan2(- m12, m11)
64
63
  else
65
- @x = Math.atan2(m32, m22)
64
+ @x = ::Math.atan2(m32, m22)
66
65
  @z = 0.0
67
66
  end
68
67
  elsif order == 'YXZ'
69
- @x = Math.asin(- Math.clamp(m23, -1.0, 1.0))
68
+ @x = ::Math.asin(- Math.clamp(m23, -1.0, 1.0))
70
69
  if m23.abs < 0.99999
71
- @y = Math.atan2(m13, m33)
72
- @z = Math.atan2(m21, m22)
70
+ @y = ::Math.atan2(m13, m33)
71
+ @z = ::Math.atan2(m21, m22)
73
72
  else
74
- @y = Math.atan2(- m31, m11)
73
+ @y = ::Math.atan2(- m31, m11)
75
74
  @z = 0.0
76
75
  end
77
76
  elsif order == 'ZXY'
78
- @x = Math.asin(Math.clamp(m32, -1.0, 1.0))
77
+ @x = ::Math.asin(Math.clamp(m32, -1.0, 1.0))
79
78
  if m32.abs < 0.99999
80
- @y = Math.atan2(- m31, m33)
81
- @z = Math.atan2(- m12, m22)
79
+ @y = ::Math.atan2(- m31, m33)
80
+ @z = ::Math.atan2(- m12, m22)
82
81
  else
83
82
  @y = 0.0
84
- @z = Math.atan2(m21, m11)
83
+ @z = ::Math.atan2(m21, m11)
85
84
  end
86
85
  elsif order == 'ZYX'
87
- @y = Math.asin(- Math.clamp(m31, -1.0, 1.0))
86
+ @y = ::Math.asin(- Math.clamp(m31, -1.0, 1.0))
88
87
  if m31.abs < 0.99999
89
- @x = Math.atan2(m32, m33)
90
- @z = Math.atan2(m21, m11)
88
+ @x = ::Math.atan2(m32, m33)
89
+ @z = ::Math.atan2(m21, m11)
91
90
  else
92
91
  @x = 0.0
93
- @z = Math.atan2(- m12, m22)
92
+ @z = ::Math.atan2(- m12, m22)
94
93
  end
95
94
  elsif order == 'YZX'
96
- @z = Math.asin(Math.clamp(m21, -1.0, 1.0))
95
+ @z = ::Math.asin(Math.clamp(m21, -1.0, 1.0))
97
96
  if m21.abs < 0.99999
98
- @x = Math.atan2(- m23, m22)
99
- @y = Math.atan2(- m31, m11)
97
+ @x = ::Math.atan2(- m23, m22)
98
+ @y = ::Math.atan2(- m31, m11)
100
99
  else
101
100
  @x = 0.0
102
- @y = Math.atan2(m13, m33)
101
+ @y = ::Math.atan2(m13, m33)
103
102
  end
104
103
  elsif order == 'XZY'
105
- @z = Math.asin(- Math.clamp(m12, -1.0, 1.0))
104
+ @z = ::Math.asin(- Math.clamp(m12, -1.0, 1.0))
106
105
  if m12.abs < 0.99999
107
- @x = Math.atan2(m32, m22)
108
- @y = Math.atan2(m13, m11)
106
+ @x = ::Math.atan2(m32, m22)
107
+ @y = ::Math.atan2(m13, m11)
109
108
  else
110
- @x = Math.atan2(- m23, m33)
109
+ @x = ::Math.atan2(- m23, m33)
111
110
  @y = 0.0
112
111
  end
113
112
  else
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Frustum
5
3
  attr_accessor :planes
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Line3
5
3
  attr_accessor :start_point, :end_point
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Matrix3
5
3
  attr_accessor :elements
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Matrix4
5
3
  attr_accessor :elements
@@ -88,9 +86,9 @@ module Mittsu
88
86
  def make_rotation_from_euler(euler)
89
87
  te = self.elements
90
88
  x, y, z = euler.x, euler.y, euler.z
91
- a, b = Math.cos(x), Math.sin(x)
92
- c, d = Math.cos(y), Math.sin(y)
93
- e, f = Math.cos(z), Math.sin(z)
89
+ a, b = ::Math.cos(x), ::Math.sin(x)
90
+ c, d = ::Math.cos(y), ::Math.sin(y)
91
+ e, f = ::Math.cos(z), ::Math.sin(z)
94
92
  if euler.order == 'XYZ'
95
93
  ae = a * e; af = a * f; be = b * e; bf = b * f
96
94
  te[0] = c * e
@@ -401,7 +399,7 @@ module Mittsu
401
399
  scale_x_sq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]
402
400
  scale_y_sq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]
403
401
  scale_z_sq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]
404
- Math.sqrt([scale_x_sq, scale_y_sq, scale_z_sq].max)
402
+ ::Math.sqrt([scale_x_sq, scale_y_sq, scale_z_sq].max)
405
403
  end
406
404
 
407
405
  def make_translation(x, y, z)
@@ -415,7 +413,7 @@ module Mittsu
415
413
  end
416
414
 
417
415
  def make_rotation_x(theta)
418
- c, s = Math.cos(theta), Math.sin(theta)
416
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
419
417
  self.set(
420
418
  1.0, 0.0, 0.0, 0.0,
421
419
  0.0, c, -s, 0.0,
@@ -426,7 +424,7 @@ module Mittsu
426
424
  end
427
425
 
428
426
  def make_rotation_y(theta)
429
- c, s = Math.cos(theta), Math.sin(theta)
427
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
430
428
  self.set(
431
429
  c, 0.0, s, 0.0,
432
430
  0.0, 1.0, 0.0, 0.0,
@@ -437,7 +435,7 @@ module Mittsu
437
435
  end
438
436
 
439
437
  def make_rotation_z(theta)
440
- c, s = Math.cos(theta), Math.sin(theta)
438
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
441
439
  self.set(
442
440
  c, -s, 0.0, 0.0,
443
441
  s, c, 0.0, 0.0,
@@ -449,8 +447,8 @@ module Mittsu
449
447
 
450
448
  def make_rotation_axis(axis, angle)
451
449
  # Based on http:#www.gamedev.net/reference/articles/article1199.asp
452
- c = Math.cos(angle)
453
- s = Math.sin(angle)
450
+ c = ::Math.cos(angle)
451
+ s = ::Math.sin(angle)
454
452
  t = 1.0 - c
455
453
  x, y, z = axis.x, axis.y, axis.z
456
454
  tx, ty = t * x, t * y
@@ -536,7 +534,7 @@ module Mittsu
536
534
  def make_perspective(fov, aspect, near, far)
537
535
  fov, aspect, near, far =
538
536
  fov.to_f, aspect.to_f, near.to_f, far.to_f
539
- ymax = near * Math.tan(Math.deg_to_rad(fov * 0.5))
537
+ ymax = near * ::Math.tan(Math.deg_to_rad(fov * 0.5))
540
538
  ymin = -ymax
541
539
  xmin = ymin * aspect
542
540
  xmax = ymax * aspect
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Plane
5
3
  attr_accessor :normal, :constant
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Quaternion
5
3
  EPS = 0.000001
@@ -8,6 +6,7 @@ module Mittsu
8
6
 
9
7
  def initialize(x = 0.0, y = 0.0, z = 0.0, w = 1.0)
10
8
  @x, @y, @z, @w = x, y, z, w
9
+ @on_change_callback = nil
11
10
  end
12
11
 
13
12
  def set(x, y, z, w)
@@ -52,12 +51,12 @@ module Mittsu
52
51
  # http:#www.mathworks.com/matlabcentral/fileexchange/
53
52
  # 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
54
53
  # content/SpinCalc.m
55
- c1 = Math.cos(euler.x / 2.0)
56
- c2 = Math.cos(euler.y / 2.0)
57
- c3 = Math.cos(euler.z / 2.0)
58
- s1 = Math.sin(euler.x / 2.0)
59
- s2 = Math.sin(euler.y / 2.0)
60
- s3 = Math.sin(euler.z / 2.0)
54
+ c1 = ::Math.cos(euler.x / 2.0)
55
+ c2 = ::Math.cos(euler.y / 2.0)
56
+ c3 = ::Math.cos(euler.z / 2.0)
57
+ s1 = ::Math.sin(euler.x / 2.0)
58
+ s2 = ::Math.sin(euler.y / 2.0)
59
+ s3 = ::Math.sin(euler.z / 2.0)
61
60
  if euler.order == 'XYZ'
62
61
  @x = s1 * c2 * c3 + c1 * s2 * s3
63
62
  @y = c1 * s2 * c3 - s1 * c2 * s3
@@ -97,11 +96,11 @@ module Mittsu
97
96
  # http:#www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
98
97
  # assumes axis is normalized
99
98
  half_angle = angle / 2.0
100
- s = Math.sin(half_angle)
99
+ s = ::Math.sin(half_angle)
101
100
  @x = axis.x * s
102
101
  @y = axis.y * s
103
102
  @z = axis.z * s
104
- @w = Math.cos(half_angle)
103
+ @w = ::Math.cos(half_angle)
105
104
  self.on_change_callback
106
105
  self
107
106
  end
@@ -115,25 +114,25 @@ module Mittsu
115
114
  m31 = te[2]; m32 = te[6]; m33 = te[10]
116
115
  trace = m11 + m22 + m33
117
116
  if trace > 0
118
- s = 0.5 / Math.sqrt(trace + 1.0)
117
+ s = 0.5 / ::Math.sqrt(trace + 1.0)
119
118
  @w = 0.25 / s
120
119
  @x = (m32 - m23) * s
121
120
  @y = (m13 - m31) * s
122
121
  @z = (m21 - m12) * s
123
122
  elsif m11 > m22 && m11 > m33
124
- s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33)
123
+ s = 2.0 * ::Math.sqrt(1.0 + m11 - m22 - m33)
125
124
  @w = (m32 - m23) / s
126
125
  @x = 0.25 * s
127
126
  @y = (m12 + m21) / s
128
127
  @z = (m13 + m31) / s
129
128
  elsif m22 > m33
130
- s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33)
129
+ s = 2.0 * ::Math.sqrt(1.0 + m22 - m11 - m33)
131
130
  @w = (m13 - m31) / s
132
131
  @x = (m12 + m21) / s
133
132
  @y = 0.25 * s
134
133
  @z = (m23 + m32) / s
135
134
  else
136
- s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22)
135
+ s = 2.0 * ::Math.sqrt(1.0 + m33 - m11 - m22)
137
136
  @w = (m21 - m12) / s
138
137
  @x = (m13 + m31) / s
139
138
  @y = (m23 + m32) / s
@@ -188,7 +187,7 @@ module Mittsu
188
187
  end
189
188
 
190
189
  def length
191
- Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
190
+ ::Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
192
191
  end
193
192
 
194
193
  def normalize
@@ -247,8 +246,8 @@ module Mittsu
247
246
  @z = _z
248
247
  return self
249
248
  end
250
- half_theta = Math.acos(cos_half_theta)
251
- sin_half_theta = Math.sqrt(1.0 - cos_half_theta * cos_half_theta)
249
+ half_theta = ::Math.acos(cos_half_theta)
250
+ sin_half_theta = ::Math.sqrt(1.0 - cos_half_theta * cos_half_theta)
252
251
  if sin_half_theta.abs < 0.001
253
252
  @w = 0.5 * (_w + @w)
254
253
  @x = 0.5 * (_x + @x)
@@ -256,8 +255,8 @@ module Mittsu
256
255
  @z = 0.5 * (_z + @z)
257
256
  return self
258
257
  end
259
- ratio_a = Math.sin((1.0. - t) * half_theta) / sin_half_theta,
260
- ratio_b = Math.sin(t * half_theta) / sin_half_theta
258
+ ratio_a = ::Math.sin((1.0. - t) * half_theta) / sin_half_theta,
259
+ ratio_b = ::Math.sin(t * half_theta) / sin_half_theta
261
260
  @w = (_w * ratio_a + @w * ratio_b)
262
261
  @x = (_x * ratio_a + @x * ratio_b)
263
262
  @y = (_y * ratio_a + @y * ratio_b)
@@ -304,6 +303,5 @@ module Mittsu
304
303
  def self.slerp(qa, qb, qm, t)
305
304
  qm.copy(qa).slerp(qb, t)
306
305
  end
307
-
308
306
  end
309
307
  end
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Ray
5
3
  attr_accessor :origin, :direction
@@ -140,7 +138,7 @@ module Mittsu
140
138
  d2 = v1.dot(v1) - tca * tca
141
139
  radius2 = sphere.radius * sphere.radius
142
140
  return nil if d2 > radius2
143
- thc = Math.sqrt(radius2 - d2)
141
+ thc = ::Math.sqrt(radius2 - d2)
144
142
  # t0 = first intersect point - entrance on front of sphere
145
143
  t0 = tca - thc
146
144
  # t1 = second intersect point - exit point on back of sphere
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Sphere
5
3
  attr_accessor :center, :radius
@@ -26,7 +24,7 @@ module Mittsu
26
24
  points.each do |point|
27
25
  max_radius_sq = [max_radius_sq, c.distance_to_squared(point)].max
28
26
  end
29
- @radius = Math.sqrt(max_radius_sq)
27
+ @radius = ::Math.sqrt(max_radius_sq)
30
28
  self
31
29
  end
32
30
 
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Spline
5
3
  Point = Struct.new(:x, :y, :z)