geo3d 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 41c051605a8dd60b857e28eb5cd761dee1945f71
4
- data.tar.gz: 5637c0862c56ad4f92f3491575b866c0e4719713
3
+ metadata.gz: f3462d13ff5931e068cd063b2bfeafe32a2f4b17
4
+ data.tar.gz: 1e9791d44fb25bd1f490a60240ca6136fa464cdd
5
5
  SHA512:
6
- metadata.gz: 140091ea429a7e8385668e197194b1300b83c0eefe2a9306699f85208be9e94c81aa06b936dd8eb81db2f98e69a2af16c0cde94200b0a3acadc5a5e55c83c1f7
7
- data.tar.gz: 57abc21c5d11b25311eca919b83d0b201bf695faf5c50465eac9fd29c63fb22d005520f200175f0dc4468ea9e8e58c6d112dbe96cfeca38a3fbaae42df51895a
6
+ metadata.gz: 945c70f63e01ef6be80054858899c924e383d116148b6e2b4a6b9ac7b3f24d684d6d283bd80a929fb66dec62a161942ed2f0b6334394317465a86c2bdb1965b4
7
+ data.tar.gz: a69c83d5ad537b48d77eff2441bd89889bf4066557bdfda975af972cbcfc57b1c6ab8cac449261ff79a1e5f10bbfff6f9892a542ec83ce79d5fcbf56b3062817
data/README.md CHANGED
@@ -164,16 +164,18 @@ Rotation
164
164
  angle = 0.9
165
165
  Geo3d::Matrix.rotation axis, angle #rotate about an arbitrary axis
166
166
  ```
167
- Projection matrix constructors ala Direct3D (clip space has a range of 0 to 1)
167
+ Projection matrix constructors ala Direct3D (clip space of z coordinate has a range of 0 to 1)
168
168
  ```
169
169
  Geo3d::Matrix.perspective_fov_rh fovy, aspect, z_near, z_far #returns a right handed perspective projection matrix
170
170
  Geo3d::Matrix.perspective_fov_lh fovy, aspect, z_near, z_far #returns a left handed perspective projection matrix
171
171
  Geo3d::Matrix.ortho_off_center_rh left, right, bottom, top, z_near, z_far #returns a right handed orthographic projection matrix
172
172
  Geo3d::Matrix.ortho_off_center_lh left, right, bottom, top, z_near, z_far #returns a left handed orthographic projection matrix
173
173
  ```
174
- Projection matrix constructors ala OpenGL (clip space has a range of -1 to 1)
174
+ Projection matrix constructors ala OpenGL (clip space of z coordinate has a range of -1 to 1)
175
175
  ```
176
- Geo3d::Matrix.glu_perspective_degrees fovy, aspect, zn, zf #returns an opengl style right handed projection matrix
176
+ Geo3d::Matrix.glu_perspective_degrees fovy, aspect, zn, zf #returns an opengl style right handed perspective projection matrix
177
+ Geo3d::Matrix.gl_frustum l, r, b, t, zn, zf #returns an opengl style right handed perspective projection matrix
178
+ Geo3d::Matrix.gl_ortho l, r, b, t, zn, zf #returns an opengl style righthanded orthographic projection matrix
177
179
  ```
178
180
  View matrix constructors
179
181
  ```
@@ -300,7 +302,18 @@ Constructors
300
302
 
301
303
  ```
302
304
 
303
- Documentation coming soon!
305
+
306
+ ## Triangle
307
+
308
+ Represents a triangle in three dimensional space
309
+
310
+ Constructors
311
+ ```
312
+ Geo3d::Triangle.from_axis rotation_axis, radians #returns a quaternion from an axis and angle
313
+ Geo3d::Quaternion.from_matrix m #returns a quaternion from a rotation matrix
314
+ Geo3d::Quaternion.identity #returns the identity quaternion
315
+
316
+ ```
304
317
 
305
318
 
306
319
 
data/lib/geo3d/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Geo3d
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/matrix.rb CHANGED
@@ -471,7 +471,7 @@ module Geo3d
471
471
  matrix = self.new
472
472
  matrix._11 = 2.0 * zn / (r-l)
473
473
  matrix._31 = a
474
- matrix._22 = zn / (t-b) #todo: the man page says multiply this by two, but I don't actually match what glFrustum does if I do
474
+ matrix._22 = zn / (t-b) #todo: the man page says multiply this by two, but I don't actually match what glFrustum does if I do
475
475
  matrix._32 = b
476
476
  matrix._33 = c
477
477
  matrix._43 = d
@@ -479,6 +479,8 @@ module Geo3d
479
479
  matrix
480
480
  end
481
481
 
482
+
483
+
482
484
  def self.perspective_fov_rh fovy, aspect, zn, zf
483
485
  fovy = fovy.to_f
484
486
  aspect = aspect.to_f
@@ -511,6 +513,24 @@ module Geo3d
511
513
  matrix
512
514
  end
513
515
 
516
+ def self.gl_ortho l, r, b, t, zn, zf
517
+ l = l.to_f
518
+ r = r.to_f
519
+ b = b.to_f
520
+ t = t.to_f
521
+ zn = zn.to_f
522
+ zf = zf.to_f
523
+ matrix = self.new
524
+ matrix._11 = 2.0 / (r-l)
525
+ matrix._22 = 2.0 / (t-b)
526
+ matrix._33 = -2.0 / (zf - zn)
527
+ matrix._41 = -(r+l) / (r-l)
528
+ matrix._42 = -(t+b) / (t-b)
529
+ matrix._43 = -(zf+zn) / (zf-zn)
530
+ matrix._44 = 1.0
531
+ matrix
532
+ end
533
+
514
534
  def self.ortho_off_center_rh l, r, b, t, zn, zf
515
535
  l = l.to_f
516
536
  r = r.to_f
data/lib/triangle.rb CHANGED
@@ -6,10 +6,10 @@ module Geo3d
6
6
  [a, b, c]
7
7
  end
8
8
 
9
- def initialize
10
- @a = Vector.new
11
- @b = Vector.new
12
- @c = Vector.new
9
+ def initialize *args
10
+ @a = args.size > 0 ? args[0] : Vector.new
11
+ @b = args.size > 1 ? args[1] : Vector.new
12
+ @c = args.size > 2 ? args[2] : Vector.new
13
13
  end
14
14
 
15
15
  def flip!
@@ -35,12 +35,12 @@ module Geo3d
35
35
  reference_normal.dot(sum) / 2.0
36
36
  end
37
37
 
38
- def clockwise?
39
- signed_area > 0
38
+ def clockwise? reference_normal = Vector.new(0,0,-1)
39
+ signed_area( reference_normal ) > 0
40
40
  end
41
41
 
42
- def counter_clockwise?
43
- signed_area < 0
42
+ def counter_clockwise? reference_normal = Vector.new(0,0,-1)
43
+ signed_area( reference_normal ) < 0
44
44
  end
45
45
  end
46
46
  end
@@ -69,6 +69,20 @@ describe Geo3d::Matrix do
69
69
  end
70
70
  end
71
71
 
72
+ it "gl_ortho should be equivalent to opengl glOrtho" do
73
+ [{:l => -2, :r => 2, :b => -2, :t => 2, :zn => 1, :zf => 1000},
74
+ {:l => -231, :r => 453, :b => -232, :t => 2786, :zn => 9.221, :zf => 10000}].each do |data|
75
+ glMatrixMode GL_PROJECTION
76
+ glLoadIdentity
77
+ glOrtho data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
78
+
79
+ gl_version = Geo3d::Matrix.new *(glGetFloatv(GL_PROJECTION_MATRIX).flatten)
80
+ geo3d_matrix = Geo3d::Matrix.gl_ortho data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
81
+
82
+ gl_version.should == geo3d_matrix
83
+ end
84
+ end
85
+
72
86
  it "should multiply matrices the same way opengl does" do
73
87
  10000.times do
74
88
  a_values = (0..15).to_a.map do |i|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geo3d
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Misha Conway
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-21 00:00:00.000000000 Z
11
+ date: 2014-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler