mittsu 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build-workflow.yml +25 -4
- data/.gitignore +1 -0
- data/lib/mittsu/cameras/perspective_camera.rb +3 -3
- data/lib/mittsu/core/buffer_geometry.rb +2 -2
- data/lib/mittsu/core/object_3d.rb +6 -6
- data/lib/mittsu/extras/geometries/circle_geometry.rb +3 -3
- data/lib/mittsu/extras/geometries/cylinder_geometry.rb +5 -5
- data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +2 -2
- data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +2 -2
- data/lib/mittsu/extras/geometries/lathe_geometry.rb +3 -3
- data/lib/mittsu/extras/geometries/parametric_geometry.rb +19 -19
- data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +6 -6
- data/lib/mittsu/extras/geometries/ring_geometry.rb +4 -4
- data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
- data/lib/mittsu/extras/geometries/torus_geometry.rb +7 -7
- data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +9 -9
- data/lib/mittsu/extras/image_utils.rb +1 -1
- data/lib/mittsu/lights/spot_light.rb +1 -1
- data/lib/mittsu/loaders/loader.rb +2 -2
- data/lib/mittsu/math.rb +0 -5
- data/lib/mittsu/math/color.rb +3 -3
- data/lib/mittsu/math/euler.rb +24 -24
- data/lib/mittsu/math/matrix4.rb +10 -10
- data/lib/mittsu/math/quaternion.rb +17 -17
- data/lib/mittsu/math/ray.rb +1 -1
- data/lib/mittsu/math/sphere.rb +1 -1
- data/lib/mittsu/math/triangle.rb +1 -1
- data/lib/mittsu/math/vector.rb +3 -3
- data/lib/mittsu/math/vector4.rb +8 -8
- data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
- data/lib/mittsu/renderers/opengl_renderer.rb +1 -1
- data/lib/mittsu/version.rb +1 -1
- data/mittsu.gemspec +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bce7b85c4911927e9f33bb5212d9011122a33356cc8811b33482af05577b9977
|
4
|
+
data.tar.gz: 23620dc7e242612382df2647df7b45f2a21364543deb0d64e389844d65a069c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 192b53dca3a2f7ecc79c22cdeae9410d7ce5dcf4af30803d9f0242bdc9caa10cef93cc8a1948932da102cbfe049e6d67951ce983e27ed40f20809fa18b044897
|
7
|
+
data.tar.gz: d08903f9f798c488b35f52f991e311bdbd2f95427094c10b55c5c6d67570d4956c8616d52ad025b9507945e57a5e3ecbff876c50472317493e778d6819286d8e
|
@@ -1,10 +1,19 @@
|
|
1
1
|
name: Build
|
2
|
-
on:
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- main
|
6
|
+
pull_request:
|
7
|
+
branches:
|
8
|
+
- main
|
3
9
|
|
4
10
|
jobs:
|
5
11
|
linux:
|
6
12
|
name: Linux
|
7
13
|
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
|
8
17
|
steps:
|
9
18
|
- uses: actions/checkout@v1
|
10
19
|
- name: Cache gems
|
@@ -18,20 +27,28 @@ jobs:
|
|
18
27
|
gems-v1-${{ runner.os }}-
|
19
28
|
- uses: actions/setup-ruby@v1
|
20
29
|
with:
|
21
|
-
ruby-version:
|
30
|
+
ruby-version: ${{ matrix.ruby }}
|
22
31
|
- run: sudo apt-get update; sudo apt-get install cmake xorg-dev libgl1-mesa-dev
|
23
32
|
- run: bash install-glfw.sh
|
33
|
+
- run: gem install bundler
|
24
34
|
- run: bundle install --path vendor/bundle
|
25
35
|
- name: Test & publish code coverage
|
26
36
|
uses: paambaati/codeclimate-action@v2.2.1
|
37
|
+
if: github.event_name == 'push'
|
27
38
|
env:
|
28
39
|
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
29
40
|
with:
|
30
41
|
coverageCommand: bundle exec rake test
|
42
|
+
- name: Test
|
43
|
+
if: github.event_name != 'push'
|
44
|
+
run: bundle exec rake test
|
31
45
|
|
32
46
|
macos:
|
33
47
|
name: macOS
|
34
48
|
runs-on: macos-latest
|
49
|
+
strategy:
|
50
|
+
matrix:
|
51
|
+
ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
|
35
52
|
steps:
|
36
53
|
- uses: actions/checkout@v1
|
37
54
|
- name: Cache gems
|
@@ -45,7 +62,7 @@ jobs:
|
|
45
62
|
gems-v1-${{ runner.os }}-
|
46
63
|
- uses: actions/setup-ruby@v1
|
47
64
|
with:
|
48
|
-
ruby-version:
|
65
|
+
ruby-version: ${{ matrix.ruby }}
|
49
66
|
- run: brew install glfw
|
50
67
|
- run: bundle install --path vendor/bundle
|
51
68
|
- run: bundle exec rake test
|
@@ -55,6 +72,9 @@ jobs:
|
|
55
72
|
runs-on: windows-latest
|
56
73
|
env:
|
57
74
|
MITTSU_LIBGLFW_FILE: c:\projects\mittsu\glfw-3.3.1.bin.WIN32\lib-mingw\glfw3.dll
|
75
|
+
strategy:
|
76
|
+
matrix:
|
77
|
+
ruby: ['2.5.x', '2.6.x', '2.7.x', '3.0.x']
|
58
78
|
steps:
|
59
79
|
- uses: actions/checkout@v1
|
60
80
|
- name: Cache gems
|
@@ -68,7 +88,8 @@ jobs:
|
|
68
88
|
gems-v1-${{ runner.os }}-
|
69
89
|
- uses: actions/setup-ruby@v1
|
70
90
|
with:
|
71
|
-
ruby-version:
|
91
|
+
ruby-version: ${{ matrix.ruby }}
|
72
92
|
- run: .\install-glfw.ps1
|
93
|
+
- run: gem install bundler
|
73
94
|
- run: bundle install --path vendor/bundle
|
74
95
|
- run: bundle exec rake test
|
data/.gitignore
CHANGED
@@ -22,7 +22,7 @@ module Mittsu
|
|
22
22
|
# 35mm (fullframe) camera is used if frame size is not specified;
|
23
23
|
# Formula based on http://www.bobatkins.com/photography/technical/field_of_view.html
|
24
24
|
def set_lens(focal_length, frame_height = 24.0)
|
25
|
-
@fov = 2.0 * Math.rad_to_deg(Math.atan(frame_height / (focal_length * 2.0)))
|
25
|
+
@fov = 2.0 * Math.rad_to_deg(::Math.atan(frame_height / (focal_length * 2.0)))
|
26
26
|
update_projection_matrix
|
27
27
|
end
|
28
28
|
|
@@ -72,11 +72,11 @@ module Mittsu
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def update_projection_matrix
|
75
|
-
new_fov = Math.rad_to_deg(2.0 * Math.atan(Math.tan(Math.deg_to_rad(@fov) * 0.5) / @zoom))
|
75
|
+
new_fov = Math.rad_to_deg(2.0 * ::Math.atan(::Math.tan(Math.deg_to_rad(@fov) * 0.5) / @zoom))
|
76
76
|
|
77
77
|
if @full_width
|
78
78
|
aspect = @full_width / @full_height
|
79
|
-
top = Math.tan(Math.deg_to_rad(new_fov * 0.5)) * @near
|
79
|
+
top = ::Math.tan(Math.deg_to_rad(new_fov * 0.5)) * @near
|
80
80
|
bottom = -top
|
81
81
|
left = aspect * bottom
|
82
82
|
right = aspect * top
|
@@ -179,7 +179,7 @@ module Mittsu
|
|
179
179
|
max_radius_sq = [max_radius_sq, center.distance_to_squared(vector)].max
|
180
180
|
end
|
181
181
|
|
182
|
-
@bounding_sphere.radius = Math.sqrt(max_radius_sq)
|
182
|
+
@bounding_sphere.radius = ::Math.sqrt(max_radius_sq)
|
183
183
|
|
184
184
|
if @bounding_radius.nan?
|
185
185
|
puts 'ERROR: Mittsu::BufferGeometry#computeBoundingSphere: Computed radius is NaN. The "position" attribute is likely to have NaN values.'
|
@@ -558,7 +558,7 @@ module Mittsu
|
|
558
558
|
normals.each_slice(3).with_index do |normal, i|
|
559
559
|
x, y, z = *normal
|
560
560
|
|
561
|
-
n = 1.0 / Math.sqrt(x * x + y * y + z * z)
|
561
|
+
n = 1.0 / ::Math.sqrt(x * x + y * y + z * z)
|
562
562
|
|
563
563
|
i *= 3
|
564
564
|
normals[i] *= n
|
@@ -97,18 +97,18 @@ module Mittsu
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def rotate_x(angle)
|
100
|
-
@
|
101
|
-
self.rotate_on_axis(@
|
100
|
+
@_x_axis ||= Vector3.new(1, 0, 0)
|
101
|
+
self.rotate_on_axis(@_x_axis, angle)
|
102
102
|
end
|
103
103
|
|
104
104
|
def rotate_y(angle)
|
105
|
-
@
|
106
|
-
self.rotate_on_axis(@
|
105
|
+
@_y_axis ||= Vector3.new(0, 1, 0)
|
106
|
+
self.rotate_on_axis(@_y_axis, angle)
|
107
107
|
end
|
108
108
|
|
109
109
|
def rotate_z(angle)
|
110
|
-
@
|
111
|
-
self.rotate_on_axis(@
|
110
|
+
@_z_axis ||= Vector3.new(0, 0, 1)
|
111
|
+
self.rotate_on_axis(@_z_axis, angle)
|
112
112
|
end
|
113
113
|
|
114
114
|
def translate_on_axis(axis, distance)
|
@@ -3,7 +3,7 @@ require 'mittsu/math'
|
|
3
3
|
|
4
4
|
module Mittsu
|
5
5
|
class CircleGeometry < Geometry
|
6
|
-
def initialize(radius = 50.0, segments = 8, theta_start = 0.0, theta_length = (Math::PI * 2.0))
|
6
|
+
def initialize(radius = 50.0, segments = 8, theta_start = 0.0, theta_length = (::Math::PI * 2.0))
|
7
7
|
super()
|
8
8
|
|
9
9
|
@type = 'CircleGeometry'
|
@@ -27,8 +27,8 @@ module Mittsu
|
|
27
27
|
vertex = Vector3.new
|
28
28
|
segment = theta_start + i.to_f / segments.to_f * theta_length
|
29
29
|
|
30
|
-
vertex.x = radius * Math.cos(segment)
|
31
|
-
vertex.y = radius * Math.sin(segment)
|
30
|
+
vertex.x = radius * ::Math.cos(segment)
|
31
|
+
vertex.y = radius * ::Math.sin(segment)
|
32
32
|
|
33
33
|
@vertices << vertex
|
34
34
|
uvs << Vector2.new((vertex.x / radius + 1.0) / 2.0, (vertex.y / radius + 1.0) / 2.0)
|
@@ -3,7 +3,7 @@ require 'mittsu/math'
|
|
3
3
|
|
4
4
|
module Mittsu
|
5
5
|
class CylinderGeometry < Geometry
|
6
|
-
def initialize(radius_top = 20.0, radius_bottom = 20.0, height = 100.0, radial_segments = 8, height_segments = 1, open_ended = false, theta_start = 0.0, theta_length = (Math::PI * 2.0))
|
6
|
+
def initialize(radius_top = 20.0, radius_bottom = 20.0, height = 100.0, radial_segments = 8, height_segments = 1, open_ended = false, theta_start = 0.0, theta_length = (::Math::PI * 2.0))
|
7
7
|
super()
|
8
8
|
|
9
9
|
@type = 'CylinderGeometry'
|
@@ -35,9 +35,9 @@ module Mittsu
|
|
35
35
|
u = x.to_f / radial_segments
|
36
36
|
|
37
37
|
vertex = Vector3.new
|
38
|
-
vertex.x = radius * Math.sin(u * theta_length + theta_start)
|
38
|
+
vertex.x = radius * ::Math.sin(u * theta_length + theta_start)
|
39
39
|
vertex.y = -v * height + height_half
|
40
|
-
vertex.z = radius * Math.cos(u * theta_length + theta_start)
|
40
|
+
vertex.z = radius * ::Math.cos(u * theta_length + theta_start)
|
41
41
|
|
42
42
|
@vertices << vertex
|
43
43
|
|
@@ -63,10 +63,10 @@ module Mittsu
|
|
63
63
|
nb = @vertices[index_rows[1][x + 1]].clone
|
64
64
|
end
|
65
65
|
|
66
|
-
na.y = Math.sqrt(na.x * na.x + na.z * na.z) * tan_theta
|
66
|
+
na.y = ::Math.sqrt(na.x * na.x + na.z * na.z) * tan_theta
|
67
67
|
na.normalize
|
68
68
|
|
69
|
-
nb.y = Math.sqrt(nb.x * nb.x + nb.z * nb.z) * tan_theta
|
69
|
+
nb.y = ::Math.sqrt(nb.x * nb.x + nb.z * nb.z) * tan_theta
|
70
70
|
nb.normalize
|
71
71
|
|
72
72
|
for y in 0...height_segments do
|
@@ -5,7 +5,7 @@ require 'mittsu/extras/geometries/polyhedron_geometry'
|
|
5
5
|
module Mittsu
|
6
6
|
class DodecahedronGeometry < PolyhedronGeometry
|
7
7
|
def initialize(radius = 1.0, detail = 0)
|
8
|
-
t = (1.0 + Math.sqrt(5.0)) / 2.0
|
8
|
+
t = (1.0 + ::Math.sqrt(5.0)) / 2.0
|
9
9
|
r = 1.0 / t
|
10
10
|
|
11
11
|
vertices = [
|
@@ -53,4 +53,4 @@ module Mittsu
|
|
53
53
|
}
|
54
54
|
end
|
55
55
|
end
|
56
|
-
end
|
56
|
+
end
|
@@ -5,7 +5,7 @@ require 'mittsu/extras/geometries/polyhedron_geometry'
|
|
5
5
|
module Mittsu
|
6
6
|
class IcosahedronGeometry < PolyhedronGeometry
|
7
7
|
def initialize(radius = 1.0, detail = 0)
|
8
|
-
t = (1.0 + Math.sqrt(5)) / 2.0
|
8
|
+
t = (1.0 + ::Math.sqrt(5)) / 2.0
|
9
9
|
|
10
10
|
vertices = [
|
11
11
|
- 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0,
|
@@ -30,4 +30,4 @@ module Mittsu
|
|
30
30
|
}
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
@@ -3,7 +3,7 @@ require 'mittsu/math'
|
|
3
3
|
|
4
4
|
module Mittsu
|
5
5
|
class LatheGeometry < Geometry
|
6
|
-
def initialize(points, segments = 12, phi_start = 0.0, phi_length = (Math::PI * 2.0))
|
6
|
+
def initialize(points, segments = 12, phi_start = 0.0, phi_length = (::Math::PI * 2.0))
|
7
7
|
super()
|
8
8
|
|
9
9
|
@type = 'LatheGeometry'
|
@@ -21,8 +21,8 @@ module Mittsu
|
|
21
21
|
for i in 0..segments do
|
22
22
|
phi = phi_start + i.to_f * inverse_segments * phi_length
|
23
23
|
|
24
|
-
c = Math.cos(phi)
|
25
|
-
s = Math.sin(phi)
|
24
|
+
c = ::Math.cos(phi)
|
25
|
+
s = ::Math.sin(phi)
|
26
26
|
|
27
27
|
for j in 0...points.length do
|
28
28
|
pt = points[j]
|
@@ -19,23 +19,23 @@ module Mittsu
|
|
19
19
|
|
20
20
|
def self.klein
|
21
21
|
-> (v, u, target = Vector3.new) {
|
22
|
-
u *= Math::PI
|
23
|
-
v *= 2.0 * Math::PI
|
22
|
+
u *= ::Math::PI
|
23
|
+
v *= 2.0 * ::Math::PI
|
24
24
|
|
25
25
|
u = u * 2.0
|
26
26
|
x = nil
|
27
27
|
y = nil
|
28
28
|
z = nil
|
29
29
|
|
30
|
-
if u < Math::PI
|
31
|
-
x = 3.0 * Math.cos(u) * (1.0 + Math.sin(u)) + (2.0 * (1.0 - Math.cos(u) / 2.0)) * Math.cos(u) * Math.cos(v)
|
32
|
-
z = -8.0 * Math.sin(u) - 2.0 * (1.0 - Math.cos(u) / 2.0) * Math.sin(u) * Math.cos(v)
|
30
|
+
if u < ::Math::PI
|
31
|
+
x = 3.0 * ::Math.cos(u) * (1.0 + ::Math.sin(u)) + (2.0 * (1.0 - ::Math.cos(u) / 2.0)) * ::Math.cos(u) * ::Math.cos(v)
|
32
|
+
z = -8.0 * ::Math.sin(u) - 2.0 * (1.0 - ::Math.cos(u) / 2.0) * ::Math.sin(u) * ::Math.cos(v)
|
33
33
|
else
|
34
|
-
x = 3.0 * Math.cos(u) * (1.0 + Math.sin(u)) + (2.0 * (1.0 - Math.cos(u) / 2.0)) * Math.cos(v + Math::PI)
|
35
|
-
z = -8.0 * Math.sin(u)
|
34
|
+
x = 3.0 * ::Math.cos(u) * (1.0 + ::Math.sin(u)) + (2.0 * (1.0 - ::Math.cos(u) / 2.0)) * ::Math.cos(v + ::Math::PI)
|
35
|
+
z = -8.0 * ::Math.sin(u)
|
36
36
|
end
|
37
37
|
|
38
|
-
y = -2.0 * (1.0 - Math.cos(u) / 2.0) * Math.sin(v)
|
38
|
+
y = -2.0 * (1.0 - ::Math.cos(u) / 2.0) * ::Math.sin(v)
|
39
39
|
|
40
40
|
target.set(x, y, z)
|
41
41
|
}
|
@@ -56,13 +56,13 @@ module Mittsu
|
|
56
56
|
# flat mobius strip
|
57
57
|
# http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
|
58
58
|
u = u - 0.5
|
59
|
-
v = 2.0 * Math::PI * t
|
59
|
+
v = 2.0 * ::Math::PI * t
|
60
60
|
|
61
61
|
a = 2.0
|
62
62
|
|
63
|
-
x = Math.cos(v) * (a + u * Math.cos(v / 2.0))
|
64
|
-
y = Math.sin(v) * (a + u * Math.cos(v / 2.0))
|
65
|
-
z = u * Math.sin(v / 2)
|
63
|
+
x = ::Math.cos(v) * (a + u * ::Math.cos(v / 2.0))
|
64
|
+
y = ::Math.sin(v) * (a + u * ::Math.cos(v / 2.0))
|
65
|
+
z = u * ::Math.sin(v / 2)
|
66
66
|
|
67
67
|
target.set(x, y, z)
|
68
68
|
}
|
@@ -72,8 +72,8 @@ module Mittsu
|
|
72
72
|
-> (u, t, target = Vector3.new) {
|
73
73
|
# volumetric mobius strip
|
74
74
|
|
75
|
-
u *= Math::PI
|
76
|
-
t *= 2.0 * Math::PI
|
75
|
+
u *= ::Math::PI
|
76
|
+
t *= 2.0 * ::Math::PI
|
77
77
|
|
78
78
|
u = u * 2.0
|
79
79
|
phi = u / 2.0
|
@@ -81,13 +81,13 @@ module Mittsu
|
|
81
81
|
a = 0.125
|
82
82
|
b = 0.65
|
83
83
|
|
84
|
-
x = a * Math.cos(t) * Math.cos(phi) - b * Math.sin(t) * Math.sin(phi)
|
85
|
-
z = a * Math.cos(t) * Math.sin(phi) + b * Math.sin(t) * Math.cos(phi)
|
86
|
-
y = (major + x) * Math.sin(u)
|
87
|
-
x = (major + x) * Math.cos(u)
|
84
|
+
x = a * ::Math.cos(t) * ::Math.cos(phi) - b * ::Math.sin(t) * ::Math.sin(phi)
|
85
|
+
z = a * ::Math.cos(t) * ::Math.sin(phi) + b * ::Math.sin(t) * ::Math.cos(phi)
|
86
|
+
y = (major + x) * ::Math.sin(u)
|
87
|
+
x = (major + x) * ::Math.cos(u)
|
88
88
|
|
89
89
|
target.set(x, y, z)
|
90
90
|
}
|
91
91
|
end
|
92
92
|
end
|
93
|
-
end
|
93
|
+
end
|
@@ -78,8 +78,8 @@ module Mittsu
|
|
78
78
|
vertex.index = @vertices.push(vertex).length - 1
|
79
79
|
|
80
80
|
# Texture coords are equivalent to map coords, calculate angle and convert to fraction of a circle.
|
81
|
-
u = azimuth(vector) / 2.0 / Math::PI + 0.5
|
82
|
-
v = inclination(vector) / Math::PI + 0.5
|
81
|
+
u = azimuth(vector) / 2.0 / ::Math::PI + 0.5
|
82
|
+
v = inclination(vector) / ::Math::PI + 0.5
|
83
83
|
vertex.uv = Vector2.new(u, 1.0 - v)
|
84
84
|
|
85
85
|
vertex
|
@@ -150,19 +150,19 @@ module Mittsu
|
|
150
150
|
|
151
151
|
# Angle around the Y axis, counter-clockwise when looking from above.
|
152
152
|
def azimuth(vector)
|
153
|
-
Math.atan2(vector.z, -vector.x)
|
153
|
+
::Math.atan2(vector.z, -vector.x)
|
154
154
|
end
|
155
155
|
|
156
156
|
# Angle above the XZ plane.
|
157
157
|
def inclination(vector)
|
158
|
-
Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z))
|
158
|
+
::Math.atan2(-vector.y, ::Math.sqrt(vector.x * vector.x + vector.z * vector.z))
|
159
159
|
end
|
160
160
|
|
161
161
|
# Texture fixing helper. Spheres have some odd behaviours.
|
162
162
|
def correct_uv(uv, vector, azimuth)
|
163
163
|
return Vector2.new(uv.x - 1.0, uv.y) if azimuth < 0
|
164
|
-
return Vector2.new(azimuth / 2.0 / Math::PI + 0.5, uv.y) if vector.x.zero? && vector.z.zero?
|
164
|
+
return Vector2.new(azimuth / 2.0 / ::Math::PI + 0.5, uv.y) if vector.x.zero? && vector.z.zero?
|
165
165
|
uv.clone
|
166
166
|
end
|
167
167
|
end
|
168
|
-
end
|
168
|
+
end
|
@@ -3,7 +3,7 @@ require 'mittsu/math'
|
|
3
3
|
|
4
4
|
module Mittsu
|
5
5
|
class RingGeometry < Geometry
|
6
|
-
def initialize(inner_radius = 0.0, outer_radius = 50.0, theta_segments = 8, phi_segments = 8, theta_start = 0.0, theta_length = (Math::PI * 2.0))
|
6
|
+
def initialize(inner_radius = 0.0, outer_radius = 50.0, theta_segments = 8, phi_segments = 8, theta_start = 0.0, theta_length = (::Math::PI * 2.0))
|
7
7
|
super()
|
8
8
|
|
9
9
|
@type = 'RingGeometry'
|
@@ -28,8 +28,8 @@ module Mittsu
|
|
28
28
|
for o in 0..theta_segments do # number of segments per circle
|
29
29
|
vertex = Vector3.new
|
30
30
|
segment = theta_start + o.to_f / theta_segments.to_f * theta_length
|
31
|
-
vertex.x = radius * Math.cos(segment)
|
32
|
-
vertex.y = radius * Math.sin(segment)
|
31
|
+
vertex.x = radius * ::Math.cos(segment)
|
32
|
+
vertex.y = radius * ::Math.sin(segment)
|
33
33
|
|
34
34
|
@vertices << vertex
|
35
35
|
uvs << Vector2.new((vertex.x / outer_radius + 1.0) / 2.0, (vertex.y / outer_radius + 1.0) / 2.0)
|
@@ -77,4 +77,4 @@ module Mittsu
|
|
77
77
|
)
|
78
78
|
end
|
79
79
|
end
|
80
|
-
end
|
80
|
+
end
|
@@ -3,7 +3,7 @@ require 'mittsu/math'
|
|
3
3
|
|
4
4
|
module Mittsu
|
5
5
|
class SphereGeometry < Geometry
|
6
|
-
def initialize(radius = 50.0, width_segments = 8, height_segments = 6, phi_start = 0.0, phi_length = (Math::PI * 2.0), theta_start = 0.0, theta_length = Math::PI)
|
6
|
+
def initialize(radius = 50.0, width_segments = 8, height_segments = 6, phi_start = 0.0, phi_length = (::Math::PI * 2.0), theta_start = 0.0, theta_length = ::Math::PI)
|
7
7
|
super()
|
8
8
|
|
9
9
|
@type = 'SphereGeometry'
|
@@ -33,9 +33,9 @@ module Mittsu
|
|
33
33
|
v = y / height_segments.to_f
|
34
34
|
|
35
35
|
vertex = Vector3.new
|
36
|
-
vertex.x = -radius * Math.cos(phi_start + u * phi_length) * Math.sin(theta_start + v * theta_length)
|
37
|
-
vertex.y = radius * Math.cos(theta_start + v * theta_length)
|
38
|
-
vertex.z = radius * Math.sin(phi_start + u * phi_length) * Math.sin(theta_start + v * theta_length)
|
36
|
+
vertex.x = -radius * ::Math.cos(phi_start + u * phi_length) * ::Math.sin(theta_start + v * theta_length)
|
37
|
+
vertex.y = radius * ::Math.cos(theta_start + v * theta_length)
|
38
|
+
vertex.z = radius * ::Math.sin(phi_start + u * phi_length) * ::Math.sin(theta_start + v * theta_length)
|
39
39
|
|
40
40
|
@vertices << vertex
|
41
41
|
|
@@ -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
|
@@ -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)
|
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
|
data/lib/mittsu/math/color.rb
CHANGED
@@ -120,9 +120,9 @@ module Mittsu
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def convert_linear_to_gamma
|
123
|
-
self.r = Math.sqrt(self.r)
|
124
|
-
self.g = Math.sqrt(self.g)
|
125
|
-
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)
|
126
126
|
self
|
127
127
|
end
|
128
128
|
|
data/lib/mittsu/math/euler.rb
CHANGED
@@ -56,57 +56,57 @@ module Mittsu
|
|
56
56
|
m31 = te[2]; m32 = te[6]; m33 = te[10]
|
57
57
|
order = order || @order
|
58
58
|
if order == 'XYZ'
|
59
|
-
@y = Math.asin(Math.clamp(m13, -1.0, 1.0))
|
59
|
+
@y = ::Math.asin(Math.clamp(m13, -1.0, 1.0))
|
60
60
|
if m13.abs < 0.99999
|
61
|
-
@x = Math.atan2(- m23, m33)
|
62
|
-
@z = Math.atan2(- m12, m11)
|
61
|
+
@x = ::Math.atan2(- m23, m33)
|
62
|
+
@z = ::Math.atan2(- m12, m11)
|
63
63
|
else
|
64
|
-
@x = Math.atan2(m32, m22)
|
64
|
+
@x = ::Math.atan2(m32, m22)
|
65
65
|
@z = 0.0
|
66
66
|
end
|
67
67
|
elsif order == 'YXZ'
|
68
|
-
@x = Math.asin(- Math.clamp(m23, -1.0, 1.0))
|
68
|
+
@x = ::Math.asin(- Math.clamp(m23, -1.0, 1.0))
|
69
69
|
if m23.abs < 0.99999
|
70
|
-
@y = Math.atan2(m13, m33)
|
71
|
-
@z = Math.atan2(m21, m22)
|
70
|
+
@y = ::Math.atan2(m13, m33)
|
71
|
+
@z = ::Math.atan2(m21, m22)
|
72
72
|
else
|
73
|
-
@y = Math.atan2(- m31, m11)
|
73
|
+
@y = ::Math.atan2(- m31, m11)
|
74
74
|
@z = 0.0
|
75
75
|
end
|
76
76
|
elsif order == 'ZXY'
|
77
|
-
@x = Math.asin(Math.clamp(m32, -1.0, 1.0))
|
77
|
+
@x = ::Math.asin(Math.clamp(m32, -1.0, 1.0))
|
78
78
|
if m32.abs < 0.99999
|
79
|
-
@y = Math.atan2(- m31, m33)
|
80
|
-
@z = Math.atan2(- m12, m22)
|
79
|
+
@y = ::Math.atan2(- m31, m33)
|
80
|
+
@z = ::Math.atan2(- m12, m22)
|
81
81
|
else
|
82
82
|
@y = 0.0
|
83
|
-
@z = Math.atan2(m21, m11)
|
83
|
+
@z = ::Math.atan2(m21, m11)
|
84
84
|
end
|
85
85
|
elsif order == 'ZYX'
|
86
|
-
@y = Math.asin(- Math.clamp(m31, -1.0, 1.0))
|
86
|
+
@y = ::Math.asin(- Math.clamp(m31, -1.0, 1.0))
|
87
87
|
if m31.abs < 0.99999
|
88
|
-
@x = Math.atan2(m32, m33)
|
89
|
-
@z = Math.atan2(m21, m11)
|
88
|
+
@x = ::Math.atan2(m32, m33)
|
89
|
+
@z = ::Math.atan2(m21, m11)
|
90
90
|
else
|
91
91
|
@x = 0.0
|
92
|
-
@z = Math.atan2(- m12, m22)
|
92
|
+
@z = ::Math.atan2(- m12, m22)
|
93
93
|
end
|
94
94
|
elsif order == 'YZX'
|
95
|
-
@z = Math.asin(Math.clamp(m21, -1.0, 1.0))
|
95
|
+
@z = ::Math.asin(Math.clamp(m21, -1.0, 1.0))
|
96
96
|
if m21.abs < 0.99999
|
97
|
-
@x = Math.atan2(- m23, m22)
|
98
|
-
@y = Math.atan2(- m31, m11)
|
97
|
+
@x = ::Math.atan2(- m23, m22)
|
98
|
+
@y = ::Math.atan2(- m31, m11)
|
99
99
|
else
|
100
100
|
@x = 0.0
|
101
|
-
@y = Math.atan2(m13, m33)
|
101
|
+
@y = ::Math.atan2(m13, m33)
|
102
102
|
end
|
103
103
|
elsif order == 'XZY'
|
104
|
-
@z = Math.asin(- Math.clamp(m12, -1.0, 1.0))
|
104
|
+
@z = ::Math.asin(- Math.clamp(m12, -1.0, 1.0))
|
105
105
|
if m12.abs < 0.99999
|
106
|
-
@x = Math.atan2(m32, m22)
|
107
|
-
@y = Math.atan2(m13, m11)
|
106
|
+
@x = ::Math.atan2(m32, m22)
|
107
|
+
@y = ::Math.atan2(m13, m11)
|
108
108
|
else
|
109
|
-
@x = Math.atan2(- m23, m33)
|
109
|
+
@x = ::Math.atan2(- m23, m33)
|
110
110
|
@y = 0.0
|
111
111
|
end
|
112
112
|
else
|
data/lib/mittsu/math/matrix4.rb
CHANGED
@@ -86,9 +86,9 @@ module Mittsu
|
|
86
86
|
def make_rotation_from_euler(euler)
|
87
87
|
te = self.elements
|
88
88
|
x, y, z = euler.x, euler.y, euler.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)
|
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)
|
92
92
|
if euler.order == 'XYZ'
|
93
93
|
ae = a * e; af = a * f; be = b * e; bf = b * f
|
94
94
|
te[0] = c * e
|
@@ -399,7 +399,7 @@ module Mittsu
|
|
399
399
|
scale_x_sq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]
|
400
400
|
scale_y_sq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]
|
401
401
|
scale_z_sq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]
|
402
|
-
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)
|
403
403
|
end
|
404
404
|
|
405
405
|
def make_translation(x, y, z)
|
@@ -413,7 +413,7 @@ module Mittsu
|
|
413
413
|
end
|
414
414
|
|
415
415
|
def make_rotation_x(theta)
|
416
|
-
c, s = Math.cos(theta), Math.sin(theta)
|
416
|
+
c, s = ::Math.cos(theta), ::Math.sin(theta)
|
417
417
|
self.set(
|
418
418
|
1.0, 0.0, 0.0, 0.0,
|
419
419
|
0.0, c, -s, 0.0,
|
@@ -424,7 +424,7 @@ module Mittsu
|
|
424
424
|
end
|
425
425
|
|
426
426
|
def make_rotation_y(theta)
|
427
|
-
c, s = Math.cos(theta), Math.sin(theta)
|
427
|
+
c, s = ::Math.cos(theta), ::Math.sin(theta)
|
428
428
|
self.set(
|
429
429
|
c, 0.0, s, 0.0,
|
430
430
|
0.0, 1.0, 0.0, 0.0,
|
@@ -435,7 +435,7 @@ module Mittsu
|
|
435
435
|
end
|
436
436
|
|
437
437
|
def make_rotation_z(theta)
|
438
|
-
c, s = Math.cos(theta), Math.sin(theta)
|
438
|
+
c, s = ::Math.cos(theta), ::Math.sin(theta)
|
439
439
|
self.set(
|
440
440
|
c, -s, 0.0, 0.0,
|
441
441
|
s, c, 0.0, 0.0,
|
@@ -447,8 +447,8 @@ module Mittsu
|
|
447
447
|
|
448
448
|
def make_rotation_axis(axis, angle)
|
449
449
|
# Based on http:#www.gamedev.net/reference/articles/article1199.asp
|
450
|
-
c = Math.cos(angle)
|
451
|
-
s = Math.sin(angle)
|
450
|
+
c = ::Math.cos(angle)
|
451
|
+
s = ::Math.sin(angle)
|
452
452
|
t = 1.0 - c
|
453
453
|
x, y, z = axis.x, axis.y, axis.z
|
454
454
|
tx, ty = t * x, t * y
|
@@ -534,7 +534,7 @@ module Mittsu
|
|
534
534
|
def make_perspective(fov, aspect, near, far)
|
535
535
|
fov, aspect, near, far =
|
536
536
|
fov.to_f, aspect.to_f, near.to_f, far.to_f
|
537
|
-
ymax = near * Math.tan(Math.deg_to_rad(fov * 0.5))
|
537
|
+
ymax = near * ::Math.tan(Math.deg_to_rad(fov * 0.5))
|
538
538
|
ymin = -ymax
|
539
539
|
xmin = ymin * aspect
|
540
540
|
xmax = ymax * aspect
|
@@ -51,12 +51,12 @@ module Mittsu
|
|
51
51
|
# http:#www.mathworks.com/matlabcentral/fileexchange/
|
52
52
|
# 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
|
53
53
|
# content/SpinCalc.m
|
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)
|
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)
|
60
60
|
if euler.order == 'XYZ'
|
61
61
|
@x = s1 * c2 * c3 + c1 * s2 * s3
|
62
62
|
@y = c1 * s2 * c3 - s1 * c2 * s3
|
@@ -96,11 +96,11 @@ module Mittsu
|
|
96
96
|
# http:#www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
|
97
97
|
# assumes axis is normalized
|
98
98
|
half_angle = angle / 2.0
|
99
|
-
s = Math.sin(half_angle)
|
99
|
+
s = ::Math.sin(half_angle)
|
100
100
|
@x = axis.x * s
|
101
101
|
@y = axis.y * s
|
102
102
|
@z = axis.z * s
|
103
|
-
@w = Math.cos(half_angle)
|
103
|
+
@w = ::Math.cos(half_angle)
|
104
104
|
self.on_change_callback
|
105
105
|
self
|
106
106
|
end
|
@@ -114,25 +114,25 @@ module Mittsu
|
|
114
114
|
m31 = te[2]; m32 = te[6]; m33 = te[10]
|
115
115
|
trace = m11 + m22 + m33
|
116
116
|
if trace > 0
|
117
|
-
s = 0.5 / Math.sqrt(trace + 1.0)
|
117
|
+
s = 0.5 / ::Math.sqrt(trace + 1.0)
|
118
118
|
@w = 0.25 / s
|
119
119
|
@x = (m32 - m23) * s
|
120
120
|
@y = (m13 - m31) * s
|
121
121
|
@z = (m21 - m12) * s
|
122
122
|
elsif m11 > m22 && m11 > m33
|
123
|
-
s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33)
|
123
|
+
s = 2.0 * ::Math.sqrt(1.0 + m11 - m22 - m33)
|
124
124
|
@w = (m32 - m23) / s
|
125
125
|
@x = 0.25 * s
|
126
126
|
@y = (m12 + m21) / s
|
127
127
|
@z = (m13 + m31) / s
|
128
128
|
elsif m22 > m33
|
129
|
-
s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33)
|
129
|
+
s = 2.0 * ::Math.sqrt(1.0 + m22 - m11 - m33)
|
130
130
|
@w = (m13 - m31) / s
|
131
131
|
@x = (m12 + m21) / s
|
132
132
|
@y = 0.25 * s
|
133
133
|
@z = (m23 + m32) / s
|
134
134
|
else
|
135
|
-
s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22)
|
135
|
+
s = 2.0 * ::Math.sqrt(1.0 + m33 - m11 - m22)
|
136
136
|
@w = (m21 - m12) / s
|
137
137
|
@x = (m13 + m31) / s
|
138
138
|
@y = (m23 + m32) / s
|
@@ -187,7 +187,7 @@ module Mittsu
|
|
187
187
|
end
|
188
188
|
|
189
189
|
def length
|
190
|
-
Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
|
190
|
+
::Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
|
191
191
|
end
|
192
192
|
|
193
193
|
def normalize
|
@@ -246,8 +246,8 @@ module Mittsu
|
|
246
246
|
@z = _z
|
247
247
|
return self
|
248
248
|
end
|
249
|
-
half_theta = Math.acos(cos_half_theta)
|
250
|
-
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)
|
251
251
|
if sin_half_theta.abs < 0.001
|
252
252
|
@w = 0.5 * (_w + @w)
|
253
253
|
@x = 0.5 * (_x + @x)
|
@@ -255,8 +255,8 @@ module Mittsu
|
|
255
255
|
@z = 0.5 * (_z + @z)
|
256
256
|
return self
|
257
257
|
end
|
258
|
-
ratio_a = Math.sin((1.0. - t) * half_theta) / sin_half_theta,
|
259
|
-
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
|
260
260
|
@w = (_w * ratio_a + @w * ratio_b)
|
261
261
|
@x = (_x * ratio_a + @x * ratio_b)
|
262
262
|
@y = (_y * ratio_a + @y * ratio_b)
|
data/lib/mittsu/math/ray.rb
CHANGED
@@ -138,7 +138,7 @@ module Mittsu
|
|
138
138
|
d2 = v1.dot(v1) - tca * tca
|
139
139
|
radius2 = sphere.radius * sphere.radius
|
140
140
|
return nil if d2 > radius2
|
141
|
-
thc = Math.sqrt(radius2 - d2)
|
141
|
+
thc = ::Math.sqrt(radius2 - d2)
|
142
142
|
# t0 = first intersect point - entrance on front of sphere
|
143
143
|
t0 = tca - thc
|
144
144
|
# t1 = second intersect point - exit point on back of sphere
|
data/lib/mittsu/math/sphere.rb
CHANGED
data/lib/mittsu/math/triangle.rb
CHANGED
data/lib/mittsu/math/vector.rb
CHANGED
@@ -160,7 +160,7 @@ module Mittsu
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def length
|
163
|
-
Math.sqrt(length_sq)
|
163
|
+
::Math.sqrt(length_sq)
|
164
164
|
end
|
165
165
|
|
166
166
|
def normalize
|
@@ -211,11 +211,11 @@ module Mittsu
|
|
211
211
|
theta = self.dot(v) / (self.length * v.length)
|
212
212
|
|
213
213
|
# clamp, to handle numerical problems
|
214
|
-
Math.acos(Math.clamp(theta, -1.0, 1.0))
|
214
|
+
::Math.acos(Math.clamp(theta, -1.0, 1.0))
|
215
215
|
end
|
216
216
|
|
217
217
|
def distance_to(v)
|
218
|
-
Math.sqrt(self.distance_to_squared(v))
|
218
|
+
::Math.sqrt(self.distance_to_squared(v))
|
219
219
|
end
|
220
220
|
|
221
221
|
def ==(v)
|
data/lib/mittsu/math/vector4.rb
CHANGED
@@ -49,8 +49,8 @@ module Mittsu
|
|
49
49
|
def set_axis_angle_from_quaternion(q)
|
50
50
|
# http:#www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
|
51
51
|
# q is assumed to be normalized
|
52
|
-
@elements[3] = 2.0 * Math.acos(q.w)
|
53
|
-
s = Math.sqrt(1.0 - q.w * q.w)
|
52
|
+
@elements[3] = 2.0 * ::Math.acos(q.w)
|
53
|
+
s = ::Math.sqrt(1.0 - q.w * q.w)
|
54
54
|
if s < 0.0001
|
55
55
|
@elements[0] = 1.0
|
56
56
|
@elements[1] = 0.0
|
@@ -88,7 +88,7 @@ module Mittsu
|
|
88
88
|
return self # zero angle, arbitrary axis
|
89
89
|
end
|
90
90
|
# otherwise self singularity is angle = 180
|
91
|
-
angle = Math::PI
|
91
|
+
angle = ::Math::PI
|
92
92
|
xx = (m11 + 1.0) / 2.0
|
93
93
|
yy = (m22 + 1.0) / 2.0
|
94
94
|
zz = (m33 + 1.0) / 2.0
|
@@ -101,7 +101,7 @@ module Mittsu
|
|
101
101
|
y1 = 0.707106781
|
102
102
|
z1 = 0.707106781
|
103
103
|
else
|
104
|
-
x1 = Math.sqrt(xx)
|
104
|
+
x1 = ::Math.sqrt(xx)
|
105
105
|
y1 = xy / x1
|
106
106
|
z1 = xz / x1
|
107
107
|
end
|
@@ -111,7 +111,7 @@ module Mittsu
|
|
111
111
|
y1 = 0.0
|
112
112
|
z1 = 0.707106781
|
113
113
|
else
|
114
|
-
y1 = Math.sqrt(yy)
|
114
|
+
y1 = ::Math.sqrt(yy)
|
115
115
|
x1 = xy / y1
|
116
116
|
z1 = yz / y1
|
117
117
|
end
|
@@ -121,7 +121,7 @@ module Mittsu
|
|
121
121
|
y1 = 0.707106781
|
122
122
|
z1 = 0.0
|
123
123
|
else
|
124
|
-
z1 = Math.sqrt(zz)
|
124
|
+
z1 = ::Math.sqrt(zz)
|
125
125
|
x1 = xz / z1
|
126
126
|
y1 = yz / z1
|
127
127
|
end
|
@@ -130,7 +130,7 @@ module Mittsu
|
|
130
130
|
return self # return 180 deg rotation
|
131
131
|
end
|
132
132
|
# as we have reached here there are no singularities so we can handle normally
|
133
|
-
s = Math.sqrt((m32 - m23) * (m32 - m23) +
|
133
|
+
s = ::Math.sqrt((m32 - m23) * (m32 - m23) +
|
134
134
|
(m13 - m31) * (m13 - m31) +
|
135
135
|
(m21 - m12) * (m21 - m12)) # used to normalize
|
136
136
|
s = 1.0 if (s.abs < 0.001)
|
@@ -139,7 +139,7 @@ module Mittsu
|
|
139
139
|
@elements[0] = (m32 - m23) / s
|
140
140
|
@elements[1] = (m13 - m31) / s
|
141
141
|
@elements[2] = (m21 - m12) / s
|
142
|
-
@elements[3] = Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
|
142
|
+
@elements[3] = ::Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
|
143
143
|
self
|
144
144
|
end
|
145
145
|
|
@@ -35,7 +35,7 @@ module Mittsu
|
|
35
35
|
directions[offset + 1] = @_direction.y
|
36
36
|
directions[offset + 2] = @_direction.z
|
37
37
|
|
38
|
-
@cache.angles_cos[index] = Math.cos(angle)
|
38
|
+
@cache.angles_cos[index] = ::Math.cos(angle)
|
39
39
|
@cache.exponents[index] = exponent;
|
40
40
|
@cache.decays[index] = distance.zero? ? 0.0 : decay
|
41
41
|
end
|
@@ -1001,7 +1001,7 @@ module Mittsu
|
|
1001
1001
|
glUniformMatrix4fv(uniforms['projectionMatrix'], 1, GL_FALSE, array_to_ptr_easy(camera.projection_matrix.elements))
|
1002
1002
|
|
1003
1003
|
if @logarithmic_depth_buffer
|
1004
|
-
glUniform1f(uniforms['logDepthBuffFC'], 2.0 / Math.log(camera.far + 1.0) / Math::LN2)
|
1004
|
+
glUniform1f(uniforms['logDepthBuffFC'], 2.0 / ::Math.log(camera.far + 1.0) / Math::LN2)
|
1005
1005
|
end
|
1006
1006
|
|
1007
1007
|
if material.needs_camera_position_uniform? && !uniforms['cameraPosition'].nil?
|
data/lib/mittsu/version.rb
CHANGED
data/mittsu.gemspec
CHANGED
@@ -33,5 +33,5 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency 'minitest-reporters'
|
34
34
|
spec.add_development_dependency 'pry'
|
35
35
|
spec.add_development_dependency 'benchmark-ips'
|
36
|
-
spec.add_development_dependency 'simplecov'
|
36
|
+
spec.add_development_dependency 'simplecov', '0.17.1'
|
37
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mittsu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Smith
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opengl-bindings
|
@@ -140,16 +140,16 @@ dependencies:
|
|
140
140
|
name: simplecov
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 0.17.1
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 0.17.1
|
153
153
|
description: Mittsu makes 3D graphics easier by providing an abstraction over OpenGL,
|
154
154
|
and is based heavily off of THREE.js. No more weird pointers and wondering about
|
155
155
|
the difference between a VAO and a VBO (besides the letter). Simply think of something
|
@@ -411,7 +411,7 @@ licenses:
|
|
411
411
|
- MIT
|
412
412
|
metadata:
|
413
413
|
bug_tracker: https://github.com/jellymann/mittsu/issues
|
414
|
-
post_install_message:
|
414
|
+
post_install_message:
|
415
415
|
rdoc_options: []
|
416
416
|
require_paths:
|
417
417
|
- lib
|
@@ -427,8 +427,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
427
427
|
version: '0'
|
428
428
|
requirements:
|
429
429
|
- OpenGL 3.3+ capable hardware and drivers
|
430
|
-
rubygems_version: 3.
|
431
|
-
signing_key:
|
430
|
+
rubygems_version: 3.2.3
|
431
|
+
signing_key:
|
432
432
|
specification_version: 4
|
433
433
|
summary: 3D Graphics Library for Ruby
|
434
434
|
test_files: []
|