mittsu 0.2.3 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-workflow.yml +95 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +3 -2
  5. data/README.md +3 -7
  6. data/Rakefile +1 -0
  7. data/install-glfw.ps1 +13 -0
  8. data/lib/mittsu.rb +1 -16
  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_geometry.rb +3 -3
  14. data/lib/mittsu/core/geometry.rb +10 -9
  15. data/lib/mittsu/core/object_3d.rb +9 -7
  16. data/lib/mittsu/core/raycaster.rb +0 -2
  17. data/lib/mittsu/extras/geometries.rb +13 -0
  18. data/lib/mittsu/extras/geometries/circle_geometry.rb +48 -0
  19. data/lib/mittsu/extras/geometries/cylinder_geometry.rb +145 -0
  20. data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +56 -0
  21. data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +33 -0
  22. data/lib/mittsu/extras/geometries/lathe_geometry.rb +78 -0
  23. data/lib/mittsu/extras/geometries/octahedron_geometry.rb +26 -0
  24. data/lib/mittsu/extras/geometries/parametric_buffer_geometry.rb +92 -0
  25. data/lib/mittsu/extras/geometries/parametric_geometry.rb +93 -0
  26. data/lib/mittsu/extras/geometries/plane_buffer_geometry.rb +81 -0
  27. data/lib/mittsu/extras/geometries/plane_geometry.rb +22 -0
  28. data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +168 -0
  29. data/lib/mittsu/extras/geometries/ring_geometry.rb +80 -0
  30. data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
  31. data/lib/mittsu/extras/geometries/tetrahedron_geometry.rb +26 -0
  32. data/lib/mittsu/extras/geometries/torus_geometry.rb +63 -0
  33. data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +120 -0
  34. data/lib/mittsu/extras/geometries/torus_knot_geometry.rb +25 -0
  35. data/lib/mittsu/extras/helpers/camera_helper.rb +38 -38
  36. data/lib/mittsu/extras/image_utils.rb +1 -1
  37. data/lib/mittsu/lights/directional_light.rb +9 -5
  38. data/lib/mittsu/lights/spot_light.rb +1 -1
  39. data/lib/mittsu/loaders/loader.rb +2 -2
  40. data/lib/mittsu/loaders/obj_loader.rb +4 -0
  41. data/lib/mittsu/materials/material.rb +6 -3
  42. data/lib/mittsu/math.rb +0 -5
  43. data/lib/mittsu/math/box2.rb +0 -2
  44. data/lib/mittsu/math/box3.rb +0 -2
  45. data/lib/mittsu/math/color.rb +3 -4
  46. data/lib/mittsu/math/euler.rb +25 -26
  47. data/lib/mittsu/math/frustum.rb +0 -2
  48. data/lib/mittsu/math/line3.rb +0 -2
  49. data/lib/mittsu/math/matrix3.rb +0 -2
  50. data/lib/mittsu/math/matrix4.rb +10 -12
  51. data/lib/mittsu/math/plane.rb +0 -2
  52. data/lib/mittsu/math/quaternion.rb +18 -20
  53. data/lib/mittsu/math/ray.rb +1 -3
  54. data/lib/mittsu/math/sphere.rb +1 -3
  55. data/lib/mittsu/math/spline.rb +0 -2
  56. data/lib/mittsu/math/triangle.rb +1 -3
  57. data/lib/mittsu/math/vector.rb +4 -4
  58. data/lib/mittsu/math/vector2.rb +0 -1
  59. data/lib/mittsu/math/vector3.rb +0 -1
  60. data/lib/mittsu/math/vector4.rb +8 -9
  61. data/lib/mittsu/objects/line.rb +0 -1
  62. data/lib/mittsu/renderers/glfw_lib.rb +1 -1
  63. data/lib/mittsu/renderers/glfw_window.rb +1 -1
  64. data/lib/mittsu/renderers/opengl/core/object_3d.rb +1 -1
  65. data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
  66. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +1 -0
  67. data/lib/mittsu/renderers/opengl/opengl_program.rb +1 -2
  68. data/lib/mittsu/renderers/opengl/textures/texture.rb +1 -1
  69. data/lib/mittsu/renderers/opengl_renderer.rb +5 -10
  70. data/lib/mittsu/scenes/scene.rb +0 -2
  71. data/lib/mittsu/textures/texture.rb +4 -2
  72. data/lib/mittsu/utils.rb +15 -0
  73. data/lib/mittsu/version.rb +1 -1
  74. data/mittsu.gemspec +10 -9
  75. metadata +75 -47
  76. data/.circleci/config.yml +0 -44
  77. data/.travis.yml +0 -20
  78. data/appveyor.yml +0 -23
  79. data/install_glfw.ps1 +0 -11
@@ -0,0 +1,120 @@
1
+ module Mittsu
2
+ class TorusKnotBufferGeometry < BufferGeometry
3
+ def initialize(radius = 100.0, tube = 40.0, radial_segments = 64, tubular_segments = 8, p_val = 2, q_val = 3)
4
+ super()
5
+
6
+ @type = 'TorusKnotBufferGeometry'
7
+
8
+ @parameters = {
9
+ radius: radius,
10
+ tube: tube,
11
+ radial_segments: radial_segments,
12
+ tubular_segments: tubular_segments,
13
+ p_val: p_val,
14
+ q_val: q_val
15
+ }
16
+
17
+ # buffers
18
+
19
+ indices = []
20
+ vertices = []
21
+ normals = []
22
+ uvs = []
23
+
24
+ # helper variables
25
+
26
+ vertex = Vector3.new
27
+ normal = Vector3.new
28
+
29
+ p1 = Vector3.new
30
+ p2 = Vector3.new
31
+
32
+ b = Vector3.new
33
+ t = Vector3.new
34
+ n = Vector3.new
35
+
36
+ # generate vertices, normals and uvs
37
+
38
+ for i in 0..tubular_segments do
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
41
+
42
+ # now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.
43
+ # these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions
44
+ calculate_position_on_curve(u, p_val, q_val, radius, p1)
45
+ calculate_position_on_curve(u + 0.01, p_val, q_val, radius, p2)
46
+
47
+ # calculate orthonormal basis
48
+ t.sub_vectors(p2, p1)
49
+ n.add_vectors(p2, p1)
50
+ b.cross_vectors(t, n)
51
+ n.cross_vectors(b, t)
52
+
53
+ # normalize B, N. T can be ignored, we don't use it
54
+ b.normalize
55
+ n.normalize
56
+
57
+ for j in 0..radial_segments do
58
+ # now calculate the vertices. they are nothing more than an extrusion of the torus curve.
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)
63
+
64
+ # now calculate the final vertex position.
65
+ # first we orient the extrusion with our basis vectos, then we add it to the current position on the curve
66
+ vertex.x = p1.x + (cx * n.x + cy * b.x)
67
+ vertex.y = p1.y + (cx * n.y + cy * b.y)
68
+ vertex.z = p1.z + (cx * n.z + cy * b.z)
69
+
70
+ vertices += vertex.elements
71
+
72
+ # normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)
73
+ normal.sub_vectors(vertex, p1).normalize
74
+
75
+ normals += normal.elements
76
+
77
+ # uv
78
+ uvs << i.to_f / tubular_segments.to_f
79
+ uvs << j.to_f / radial_segments.to_f
80
+ end
81
+ end
82
+
83
+ # generate indices
84
+
85
+ for j in 1..tubular_segments do
86
+ for i in 1..radial_segments do
87
+ # indices
88
+ a = (radial_segments + 1) * (j - 1) + (i - 1)
89
+ b = (radial_segments + 1) * j + (i - 1)
90
+ c = (radial_segments + 1) * j + i
91
+ d = (radial_segments + 1) * (j - 1) + i
92
+
93
+ # faces
94
+ indices += [a, b, d]
95
+ indices += [b, c, d]
96
+ end
97
+ end
98
+
99
+ # build geometry
100
+
101
+ self[:index] = BufferAttribute.new(indices, 1)
102
+ self[:position] = BufferAttribute.new(vertices, 3)
103
+ self[:normal] = BufferAttribute.new(normals, 3)
104
+ self[:uv] = BufferAttribute.new(uvs, 2)
105
+ end
106
+
107
+ private
108
+
109
+ def calculate_position_on_curve(u, p_val, q_val, radius, position)
110
+ cu = ::Math.cos(u)
111
+ su = ::Math.sin(u)
112
+ qu_over_p = q_val.to_f / p_val.to_f * u
113
+ cs = ::Math.cos(qu_over_p)
114
+
115
+ position.x = radius * (2.0 + cs) * 0.5 * cu
116
+ position.y = radius * (2.0 + cs) * su * 0.5
117
+ position.z = radius * ::Math.sin(qu_over_p) * 0.5
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,25 @@
1
+ require 'mittsu/core'
2
+ require 'mittsu/math'
3
+ require 'mittsu/extras/geometries/torus_knot_buffer_geometry'
4
+
5
+ module Mittsu
6
+ class TorusKnotGeometry < Geometry
7
+ def initialize(radius = 100.0, tube = 40.0, radial_segments = 64, tubular_segments = 8, p_val = 2, q_val = 3)
8
+ super()
9
+
10
+ @type = 'TorusKnotGeometry'
11
+
12
+ @parameters = {
13
+ radius: radius,
14
+ tube: tube,
15
+ radial_segments: radial_segments,
16
+ tubular_segments: tubular_segments,
17
+ p_val: p_val,
18
+ q_val: q_val
19
+ }
20
+
21
+ from_buffer_geometry(TorusKnotBufferGeometry.new(radius, tube, tubular_segments, radial_segments, p_val, q_val))
22
+ merge_vertices
23
+ end
24
+ end
25
+ 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
data/lib/mittsu/math.rb CHANGED
@@ -17,13 +17,8 @@ require 'mittsu/math/vector2'
17
17
  require 'mittsu/math/vector3'
18
18
  require 'mittsu/math/vector4'
19
19
 
20
- BuiltInMath = Math
21
-
22
20
  module Mittsu
23
21
  module Math
24
- extend BuiltInMath
25
- include BuiltInMath
26
- BuiltInMath.methods.each { |m| public_class_method m }
27
22
 
28
23
  def self.sign(x)
29
24
  return Float::NAN unless x.is_a? Numeric
@@ -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