snow-math 1.2.4 → 1.3.0pre0
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.
- checksums.yaml +4 -4
- data/README.md +47 -569
- data/ext/snow-math/mat3.c +1 -1
- data/ext/snow-math/quat.c +3 -3
- data/ext/snow-math/snow-math.c +3794 -709
- data/ext/snow-math/vec3.c +3 -3
- data/ext/snow-math/vec4.c +4 -4
- data/lib/snow-math.rb +12 -2
- data/lib/snow-math/inspect.rb +48 -20
- data/lib/snow-math/marshal.rb +75 -0
- data/lib/snow-math/mat3.rb +66 -1
- data/lib/snow-math/mat4.rb +82 -0
- data/lib/snow-math/ptr.rb +66 -10
- data/lib/snow-math/quat.rb +91 -5
- data/lib/snow-math/swizzle.rb +77 -40
- data/lib/snow-math/to_a.rb +178 -35
- data/lib/snow-math/vec3.rb +67 -4
- data/lib/snow-math/vec4.rb +70 -4
- metadata +7 -5
- data/lib/snow-math/array_cache.rb +0 -42
data/lib/snow-math/vec3.rb
CHANGED
@@ -7,6 +7,13 @@ require 'snow-math/bindings'
|
|
7
7
|
module Snow ; end
|
8
8
|
|
9
9
|
if Snow.const_defined?(:Vec3Array)
|
10
|
+
#
|
11
|
+
# A contiguous array of Vec3s. Allocated as a single block of memory so that
|
12
|
+
# it can easily be passed back to C libraries (like OpenGL) and to aid with
|
13
|
+
# cache locality.
|
14
|
+
#
|
15
|
+
# Useful for storing vertex data such as positions, normals, and so on.
|
16
|
+
#
|
10
17
|
class Snow::Vec3Array
|
11
18
|
class << self ; alias_method :[], :new ; end
|
12
19
|
|
@@ -15,6 +22,9 @@ if Snow.const_defined?(:Vec3Array)
|
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
25
|
+
#
|
26
|
+
# A 3-component vector class.
|
27
|
+
#
|
18
28
|
class Snow::Vec3
|
19
29
|
|
20
30
|
# Shortcut through to new
|
@@ -22,55 +32,92 @@ class Snow::Vec3
|
|
22
32
|
|
23
33
|
alias_method :[], :fetch
|
24
34
|
alias_method :[]=, :store
|
35
|
+
alias_method :dup, :copy
|
36
|
+
alias_method :clone, :copy
|
25
37
|
|
38
|
+
|
39
|
+
# Returns the X component of the vector.
|
40
|
+
#
|
41
|
+
# call-seq: x -> float
|
26
42
|
def x
|
27
43
|
self[0]
|
28
44
|
end
|
29
45
|
|
46
|
+
# Sets the X component of the vector.
|
47
|
+
#
|
48
|
+
# call-seq: x = value -> value
|
30
49
|
def x=(value)
|
31
50
|
self[0] = value
|
32
51
|
end
|
33
52
|
|
53
|
+
# Returns the Y component of the vector.
|
54
|
+
#
|
55
|
+
# call-seq: y -> float
|
34
56
|
def y
|
35
57
|
self[1]
|
36
58
|
end
|
37
59
|
|
60
|
+
# Sets the Y component of the vector.
|
61
|
+
#
|
62
|
+
# call-seq: y = value -> value
|
38
63
|
def y=(value)
|
39
64
|
self[1] = value
|
40
65
|
end
|
41
66
|
|
67
|
+
# Returns the Z component of the vector.
|
68
|
+
#
|
69
|
+
# call-seq: z -> float
|
42
70
|
def z
|
43
71
|
self[2]
|
44
72
|
end
|
45
73
|
|
74
|
+
# Sets the Z component of the vector.
|
75
|
+
#
|
76
|
+
# call-seq: z = value -> value
|
46
77
|
def z=(value)
|
47
78
|
self[2] = value
|
48
79
|
end
|
49
80
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
81
|
+
# Calls #normalize(self)
|
82
|
+
#
|
83
|
+
# call-seq: normalize! -> self
|
54
84
|
def normalize!
|
55
85
|
normalize self
|
56
86
|
end
|
57
87
|
|
88
|
+
# Calls #inverse(self)
|
89
|
+
#
|
90
|
+
# call-seq: inverse! -> self
|
58
91
|
def inverse!
|
59
92
|
inverse self
|
60
93
|
end
|
61
94
|
|
95
|
+
# Calls #negate(self)
|
96
|
+
#
|
97
|
+
# call-seq: negate! -> self
|
62
98
|
def negate!
|
63
99
|
negate self
|
64
100
|
end
|
65
101
|
|
102
|
+
# Calls #cross_product(rhs, self)
|
103
|
+
#
|
104
|
+
# call-seq: cross_product!(rhs) -> self
|
66
105
|
def cross_product!(rhs)
|
67
106
|
cross_product rhs, self
|
68
107
|
end
|
69
108
|
|
109
|
+
# Calls #multiply_vec3(rhs, self)
|
110
|
+
#
|
111
|
+
# call-seq: multiply_vec3!(rhs) -> self
|
70
112
|
def multiply_vec3!(rhs)
|
71
113
|
multiply_vec3 rhs, self
|
72
114
|
end
|
73
115
|
|
116
|
+
# Calls #multiply_vec3 and #scale, respectively.
|
117
|
+
#
|
118
|
+
# call-seq:
|
119
|
+
# multiply(vec3, output) -> output or new vec3
|
120
|
+
# multiply(scalar, output) -> output or new vec3
|
74
121
|
def multiply(rhs, output = nil)
|
75
122
|
case rhs
|
76
123
|
when ::Snow::Vec3 then multiply_vec3(rhs, output)
|
@@ -79,26 +126,42 @@ class Snow::Vec3
|
|
79
126
|
end
|
80
127
|
end
|
81
128
|
|
129
|
+
# Calls #multiply(rhs, self)
|
130
|
+
#
|
131
|
+
# call-seq: multiply!(rhs) -> self
|
82
132
|
def multiply!(rhs)
|
83
133
|
multiply rhs, self
|
84
134
|
end
|
85
135
|
|
136
|
+
# Calls #add(rhs, self)
|
137
|
+
#
|
138
|
+
# call-seq: add!(rhs) -> self
|
86
139
|
def add!(rhs)
|
87
140
|
add rhs, self
|
88
141
|
end
|
89
142
|
|
143
|
+
# Calls #subtract(rhs, self)
|
144
|
+
#
|
145
|
+
# call-seq: subtract!(rhs) -> self
|
90
146
|
def subtract!(rhs)
|
91
147
|
subtract rhs, self
|
92
148
|
end
|
93
149
|
|
150
|
+
# Calls #scale(rhs, self)
|
151
|
+
#
|
152
|
+
# call-seq: scale!(rhs) -> self
|
94
153
|
def scale!(rhs)
|
95
154
|
scale rhs, self
|
96
155
|
end
|
97
156
|
|
157
|
+
# Calls #divide(rhs, self)
|
158
|
+
#
|
159
|
+
# call-seq: divide!(rhs) -> self
|
98
160
|
def divide!(rhs)
|
99
161
|
divide rhs, self
|
100
162
|
end
|
101
163
|
|
164
|
+
|
102
165
|
alias_method :-, :subtract
|
103
166
|
alias_method :+, :add
|
104
167
|
alias_method :^, :cross_product
|
data/lib/snow-math/vec4.rb
CHANGED
@@ -7,6 +7,13 @@ require 'snow-math/bindings'
|
|
7
7
|
module Snow ; end
|
8
8
|
|
9
9
|
if Snow.const_defined?(:Vec4Array)
|
10
|
+
#
|
11
|
+
# A contiguous array of Vec4s. Allocated as a single block of memory so that
|
12
|
+
# it can easily be passed back to C libraries (like OpenGL) and to aid with
|
13
|
+
# cache locality.
|
14
|
+
#
|
15
|
+
# Useful also to represent color buffers, vertices, and other miscellanea.
|
16
|
+
#
|
10
17
|
class Snow::Vec4Array
|
11
18
|
class << self ; alias_method :[], :new ; end
|
12
19
|
|
@@ -15,65 +22,108 @@ if Snow.const_defined?(:Vec4Array)
|
|
15
22
|
end
|
16
23
|
end
|
17
24
|
|
25
|
+
#
|
26
|
+
# A 4-component vector class.
|
27
|
+
#
|
18
28
|
class Snow::Vec4
|
19
29
|
|
20
30
|
class << self ; alias_method :[], :new ; end
|
21
31
|
|
22
32
|
alias_method :[], :fetch
|
23
33
|
alias_method :[]=, :store
|
34
|
+
alias_method :dup, :copy
|
35
|
+
alias_method :clone, :copy
|
24
36
|
|
37
|
+
|
38
|
+
# Returns the X component of the vector.
|
39
|
+
#
|
40
|
+
# call-seq: x -> float
|
25
41
|
def x
|
26
42
|
self[0]
|
27
43
|
end
|
28
44
|
|
45
|
+
# Sets the X component of the vector.
|
46
|
+
#
|
47
|
+
# call-seq: x = value -> value
|
29
48
|
def x=(value)
|
30
49
|
self[0] = value
|
31
50
|
end
|
32
51
|
|
52
|
+
# Returns the Y component of the vector.
|
53
|
+
#
|
54
|
+
# call-seq: y -> float
|
33
55
|
def y
|
34
56
|
self[1]
|
35
57
|
end
|
36
58
|
|
59
|
+
# Sets the Y component of the vector.
|
60
|
+
#
|
61
|
+
# call-seq: y = value -> value
|
37
62
|
def y=(value)
|
38
63
|
self[1] = value
|
39
64
|
end
|
40
65
|
|
66
|
+
# Returns the Z component of the vector.
|
67
|
+
#
|
68
|
+
# call-seq: z -> float
|
41
69
|
def z
|
42
70
|
self[2]
|
43
71
|
end
|
44
72
|
|
73
|
+
# Sets the Z component of the vector.
|
74
|
+
#
|
75
|
+
# call-seq: z = value -> value
|
45
76
|
def z=(value)
|
46
77
|
self[2] = value
|
47
78
|
end
|
48
79
|
|
80
|
+
# Returns the W component of the vector.
|
81
|
+
#
|
82
|
+
# call-seq: w -> float
|
49
83
|
def w
|
50
84
|
self[3]
|
51
85
|
end
|
52
86
|
|
87
|
+
# Sets the W component of the vector.
|
88
|
+
#
|
89
|
+
# call-seq: w = value -> value
|
53
90
|
def w=(value)
|
54
91
|
self[3] = value
|
55
92
|
end
|
56
93
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
94
|
+
# Calls #normalize(self)
|
95
|
+
#
|
96
|
+
# call-seq: normalize! -> self
|
61
97
|
def normalize!
|
62
98
|
normalize self
|
63
99
|
end
|
64
100
|
|
101
|
+
# Calls #inverse(self)
|
102
|
+
#
|
103
|
+
# call-seq: inverse! -> self
|
65
104
|
def inverse!
|
66
105
|
inverse self
|
67
106
|
end
|
68
107
|
|
108
|
+
# Calls #negate(self)
|
109
|
+
#
|
110
|
+
# call-seq: negate! -> self
|
69
111
|
def negate!
|
70
112
|
negate self
|
71
113
|
end
|
72
114
|
|
115
|
+
# Calls #multiply_vec4(rhs, self)
|
116
|
+
#
|
117
|
+
# call-seq: multiply_vec4!(rhs) -> self
|
73
118
|
def multiply_vec4!(rhs)
|
74
119
|
multiply_vec4 rhs, self
|
75
120
|
end
|
76
121
|
|
122
|
+
# Calls #multiply_vec4 and #scale, respectively.
|
123
|
+
#
|
124
|
+
# call-seq:
|
125
|
+
# multiply(vec4, output = nil) -> output or new vec4
|
126
|
+
# multiply(scalar, output = nil) -> output or new vec4
|
77
127
|
def multiply(rhs, output = nil)
|
78
128
|
case rhs
|
79
129
|
when ::Snow::Vec4 then multiply_vec4(rhs, output)
|
@@ -82,26 +132,42 @@ class Snow::Vec4
|
|
82
132
|
end
|
83
133
|
end
|
84
134
|
|
135
|
+
# Calls #multiply(rhs, self)
|
136
|
+
#
|
137
|
+
# call-seq: multiply!(rhs) -> self
|
85
138
|
def multiply!(rhs)
|
86
139
|
multiply rhs, self
|
87
140
|
end
|
88
141
|
|
142
|
+
# Calls #add(rhs, self)
|
143
|
+
#
|
144
|
+
# call-seq: add!(rhs) -> self
|
89
145
|
def add!(rhs)
|
90
146
|
add rhs, self
|
91
147
|
end
|
92
148
|
|
149
|
+
# Calls #subtract(rhs, self)
|
150
|
+
#
|
151
|
+
# call-seq: subtract!(rhs) -> self
|
93
152
|
def subtract!(rhs)
|
94
153
|
subtract rhs, self
|
95
154
|
end
|
96
155
|
|
156
|
+
# Calls #scale(rhs, self)
|
157
|
+
#
|
158
|
+
# call-seq: scale!(rhs) -> self
|
97
159
|
def scale!(rhs)
|
98
160
|
scale rhs, self
|
99
161
|
end
|
100
162
|
|
163
|
+
# Calls #divide(rhs, self)
|
164
|
+
#
|
165
|
+
# call-seq: divide!(rhs) -> self
|
101
166
|
def divide!(rhs)
|
102
167
|
divide rhs, self
|
103
168
|
end
|
104
169
|
|
170
|
+
|
105
171
|
alias_method :-, :subtract
|
106
172
|
alias_method :+, :add
|
107
173
|
alias_method :*, :multiply
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snow-math
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0pre0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noel Raymond Cower
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Math types built on the SnowPalm math code
|
14
14
|
email: ncower@gmail.com
|
@@ -16,11 +16,12 @@ executables: []
|
|
16
16
|
extensions:
|
17
17
|
- ext/extconf.rb
|
18
18
|
extra_rdoc_files:
|
19
|
+
- ext/snow-math/snow-math.c
|
19
20
|
- README.md
|
20
21
|
- COPYING
|
21
22
|
files:
|
22
|
-
- lib/snow-math/array_cache.rb
|
23
23
|
- lib/snow-math/inspect.rb
|
24
|
+
- lib/snow-math/marshal.rb
|
24
25
|
- lib/snow-math/mat3.rb
|
25
26
|
- lib/snow-math/mat4.rb
|
26
27
|
- lib/snow-math/ptr.rb
|
@@ -51,6 +52,7 @@ rdoc_options:
|
|
51
52
|
- snowmath -- 3D Math Types
|
52
53
|
- --main
|
53
54
|
- README.md
|
55
|
+
- --markup=markdown
|
54
56
|
- --line-numbers
|
55
57
|
require_paths:
|
56
58
|
- lib
|
@@ -61,9 +63,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
63
|
version: 2.0.0
|
62
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
65
|
requirements:
|
64
|
-
- - '
|
66
|
+
- - '>'
|
65
67
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
68
|
+
version: 1.3.1
|
67
69
|
requirements: []
|
68
70
|
rubyforge_project:
|
69
71
|
rubygems_version: 2.0.3
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'snow-math/bindings'
|
2
|
-
|
3
|
-
module Snow
|
4
|
-
|
5
|
-
[:Vec3Array, :Vec4Array, :QuatArray, :Mat4Array].each {
|
6
|
-
|klass_sym|
|
7
|
-
if const_defined?(klass_sym)
|
8
|
-
const_get(klass_sym).class_exec {
|
9
|
-
alias_method :__fetch__, :fetch
|
10
|
-
alias_method :__resize__!, :resize!
|
11
|
-
alias_method :__array_cache_initialize__, :initialize
|
12
|
-
|
13
|
-
def initialize(*args)
|
14
|
-
@__cache__ = []
|
15
|
-
__array_cache_initialize__(*args)
|
16
|
-
end
|
17
|
-
|
18
|
-
def fetch(index)
|
19
|
-
@__cache__[index] || (@__cache__[index] = __fetch__(index))
|
20
|
-
end
|
21
|
-
|
22
|
-
alias_method :[], :fetch
|
23
|
-
|
24
|
-
def resize!(new_length)
|
25
|
-
@__cache__ = []
|
26
|
-
__resize__!(new_length)
|
27
|
-
end
|
28
|
-
|
29
|
-
def resize(new_length)
|
30
|
-
arr = self.class.new(new_length)
|
31
|
-
self_length = self.length
|
32
|
-
(0 ... (self_length < new_length ? self_length : new_length)).each {
|
33
|
-
|index|
|
34
|
-
arr.store(index, self.fetch(index))
|
35
|
-
}
|
36
|
-
return arr
|
37
|
-
end
|
38
|
-
}
|
39
|
-
end
|
40
|
-
}
|
41
|
-
|
42
|
-
end
|