geo3d 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/geo3d.gemspec +3 -0
- data/lib/geo3d/plane.rb +1 -4
- data/lib/geo3d/version.rb +1 -1
- data/spec/opengl/matrix_spec.rb +43 -58
- data/spec/spec_helper.rb +6 -1
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45adfa328b2bbe9761b54a83100d9586214ee33f
|
4
|
+
data.tar.gz: dc95fd625d68ff56aad0e62b92a7e68cab274059
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77ada830a67ff35e709ef1efb0e3917696363c61f69d73f9fe27d8c70fd16e6c26d081ad68b8fba61835f4045e10278615b00ca7a41735358695b7a635d8b80d
|
7
|
+
data.tar.gz: ef1bedd83c6438fcea8d93cccf0e46ff43fd337f5f15625c00a1bd6ae6f4a3c5c127af401d130a96819167f8e74b7c1f0d0914296a44276bdc665e6a619e0a41
|
data/geo3d.gemspec
CHANGED
data/lib/geo3d/plane.rb
CHANGED
data/lib/geo3d/version.rb
CHANGED
data/spec/opengl/matrix_spec.rb
CHANGED
@@ -1,43 +1,32 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require "opengl"
|
3
|
+
require "glu"
|
4
|
+
require "glut"
|
5
|
+
|
6
|
+
# This spec tests the accuracy of Geo3D by comparing its calculations against the same calculations made in OpenGL
|
2
7
|
|
3
8
|
describe Geo3d::Matrix do
|
9
|
+
let(:gl){ Class.new{extend GL} }
|
10
|
+
let(:glu){ Class.new{extend GLU} }
|
11
|
+
|
12
|
+
before :all do
|
13
|
+
GLUT.Init
|
14
|
+
GLUT.InitDisplayMode(GLUT::DOUBLE | GLUT::RGB)
|
15
|
+
GLUT.InitWindowSize(500, 500)
|
16
|
+
GLUT.InitWindowPosition(100, 100)
|
17
|
+
GLUT.CreateWindow('test')
|
18
|
+
end
|
19
|
+
|
4
20
|
before :each do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
glutInit
|
11
|
-
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
|
12
|
-
glutInitWindowSize(500, 500)
|
13
|
-
glutInitWindowPosition(100, 100)
|
14
|
-
glutCreateWindow('test')
|
15
|
-
|
16
|
-
=begin
|
17
|
-
if SDL.Init(SDL::INIT_VIDEO) < 0
|
18
|
-
puts "not able to init"
|
19
|
-
else
|
20
|
-
|
21
|
-
SDL.GL_SetAttribute SDL::GL_RED_SIZE, 5
|
22
|
-
SDL.GL_SetAttribute SDL::GL_GREEN_SIZE, 5
|
23
|
-
SDL.GL_SetAttribute SDL::GL_BLUE_SIZE, 5
|
24
|
-
SDL.GL_SetAttribute SDL::GL_DEPTH_SIZE, 16
|
25
|
-
SDL.GL_SetAttribute SDL::GL_DOUBLEBUFFER, 1
|
26
|
-
|
27
|
-
if 0 == SDL.SetVideoMode(640, 480, SDL.GetVideoInfo.vfmt.BitsPerPixel, SDL::OPENGL)
|
28
|
-
puts "not able to set video mode"
|
29
|
-
else
|
30
|
-
@gl_initialized = true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
=end
|
34
|
-
# raise "opengl not able to initialize" unless @gl_initialized
|
21
|
+
gl.send :glMatrixMode, GL::PROJECTION
|
22
|
+
gl.send :glLoadIdentity
|
23
|
+
gl.send :glMatrixMode, GL::MODELVIEW
|
24
|
+
gl.send :glLoadIdentity
|
35
25
|
end
|
36
26
|
|
27
|
+
|
37
28
|
it "the identity constructor should be functionally equivalent to glLoadIdentity" do
|
38
|
-
|
39
|
-
glLoadIdentity
|
40
|
-
gl_version = Geo3d::Matrix.new *glGetFloatv(GL_MODELVIEW_MATRIX).flatten
|
29
|
+
gl_version = Geo3d::Matrix.new *gl.send(:glGetFloatv, GL::MODELVIEW_MATRIX).flatten
|
41
30
|
Geo3d::Matrix.identity.should == gl_version
|
42
31
|
end
|
43
32
|
|
@@ -47,11 +36,8 @@ describe Geo3d::Matrix do
|
|
47
36
|
focus = Geo3d::Vector.new *data[:eye]
|
48
37
|
up = Geo3d::Vector.new *data[:eye]
|
49
38
|
|
50
|
-
|
51
|
-
|
52
|
-
gluLookAt eye.x, eye.y, eye.z, focus.x, focus.y, focus.z, up.x, up.y, up.z
|
53
|
-
gl_version = Geo3d::Matrix.new *glGetFloatv(GL_MODELVIEW_MATRIX).flatten
|
54
|
-
|
39
|
+
glu.send :gluLookAt, eye.x, eye.y, eye.z, focus.x, focus.y, focus.z, up.x, up.y, up.z
|
40
|
+
gl_version = Geo3d::Matrix.new *gl.send(:glGetFloatv, GL::MODELVIEW_MATRIX).flatten
|
55
41
|
gl_version.should == Geo3d::Matrix.look_at_rh(eye, focus, up)
|
56
42
|
end
|
57
43
|
end
|
@@ -59,11 +45,12 @@ describe Geo3d::Matrix do
|
|
59
45
|
it "gl_frustum should be equivalent to opengl glFrustum" do
|
60
46
|
[{:l => -2, :r => 2, :b => -2, :t => 2, :zn => 1, :zf => 1000},
|
61
47
|
{:l => -231, :r => 453, :b => -232, :t => 2786, :zn => 9.221, :zf => 10000}].each do |data|
|
62
|
-
glMatrixMode GL_PROJECTION
|
63
|
-
glLoadIdentity
|
64
|
-
glFrustum data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
65
48
|
|
66
|
-
|
49
|
+
gl.send :glMatrixMode, GL::PROJECTION
|
50
|
+
gl.send :glLoadIdentity
|
51
|
+
gl.send :glFrustum, data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
52
|
+
|
53
|
+
gl_version = Geo3d::Matrix.new *(gl.send(:glGetFloatv, GL::PROJECTION_MATRIX).flatten)
|
67
54
|
geo3d_matrix = Geo3d::Matrix.gl_frustum data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
68
55
|
|
69
56
|
gl_version.should == geo3d_matrix
|
@@ -73,11 +60,11 @@ describe Geo3d::Matrix do
|
|
73
60
|
|
74
61
|
it "glu_perspective_degrees should be equivalent to opengl gluPerspective" do
|
75
62
|
[{:fovy_in_degrees => 60, :width => 640, :height => 480, :near => 0.1, :far => 1000}].each do |data|
|
76
|
-
glMatrixMode
|
77
|
-
glLoadIdentity
|
78
|
-
gluPerspective data[:fovy_in_degrees], data[:width].to_f/data[:height].to_f, data[:near], data[:far]
|
63
|
+
gl.send :glMatrixMode, GL::PROJECTION
|
64
|
+
gl.send :glLoadIdentity
|
65
|
+
glu.send :gluPerspective, data[:fovy_in_degrees], data[:width].to_f/data[:height].to_f, data[:near], data[:far]
|
79
66
|
|
80
|
-
gl_version = Geo3d::Matrix.new *glGetFloatv
|
67
|
+
gl_version = Geo3d::Matrix.new *gl.send(:glGetFloatv, GL::PROJECTION_MATRIX).flatten
|
81
68
|
geo3d_matrix = Geo3d::Matrix.glu_perspective_degrees(data[:fovy_in_degrees], data[:width].to_f/data[:height].to_f, data[:near], data[:far])
|
82
69
|
|
83
70
|
gl_version.should == geo3d_matrix
|
@@ -87,11 +74,11 @@ describe Geo3d::Matrix do
|
|
87
74
|
it "gl_ortho should be equivalent to opengl glOrtho" do
|
88
75
|
[{:l => -2, :r => 2, :b => -2, :t => 2, :zn => 1, :zf => 1000},
|
89
76
|
{:l => -231, :r => 453, :b => -232, :t => 2786, :zn => 9.221, :zf => 10000}].each do |data|
|
90
|
-
glMatrixMode
|
91
|
-
glLoadIdentity
|
92
|
-
glOrtho data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
77
|
+
gl.send :glMatrixMode, GL::PROJECTION
|
78
|
+
gl.send :glLoadIdentity
|
79
|
+
gl.send :glOrtho, data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
93
80
|
|
94
|
-
gl_version = Geo3d::Matrix.new *(glGetFloatv
|
81
|
+
gl_version = Geo3d::Matrix.new *(gl.send(:glGetFloatv, GL::PROJECTION_MATRIX).flatten)
|
95
82
|
geo3d_matrix = Geo3d::Matrix.gl_ortho data[:l], data[:r], data[:b], data[:t], data[:zn], data[:zf]
|
96
83
|
|
97
84
|
gl_version.should == geo3d_matrix
|
@@ -110,11 +97,10 @@ describe Geo3d::Matrix do
|
|
110
97
|
|
111
98
|
geo3d_matrix = Geo3d::Matrix.new(*b_values) * Geo3d::Matrix.new(*a_values)
|
112
99
|
|
113
|
-
glMatrixMode
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
gl_version = Geo3d::Matrix.new *glGetFloatv(GL_MODELVIEW).flatten
|
100
|
+
gl.send :glMatrixMode, GL::MODELVIEW
|
101
|
+
gl.send :glLoadMatrixf, a_values
|
102
|
+
gl.send :glMultMatrixf, b_values
|
103
|
+
gl_version = Geo3d::Matrix.new *gl.send(:glGetFloatv, GL::MODELVIEW).flatten
|
118
104
|
|
119
105
|
gl_version.should == geo3d_matrix
|
120
106
|
end
|
@@ -135,9 +121,8 @@ describe Geo3d::Matrix do
|
|
135
121
|
|
136
122
|
vector = Geo3d::Vector.new 300, 100, -500
|
137
123
|
|
138
|
-
glu_vector = gluProject vector.x, vector.y, vector.z, projection_matrix.to_a, view_matrix.to_a, [viewport_data[:x], viewport_data[:y], viewport_data[:width], viewport_data[:height]]
|
124
|
+
glu_vector = glu.send :gluProject, vector.x, vector.y, vector.z, projection_matrix.to_a, view_matrix.to_a, [viewport_data[:x], viewport_data[:y], viewport_data[:width], viewport_data[:height]]
|
139
125
|
|
140
|
-
puts "glu vect is #{glu_vector.inspect}"
|
141
126
|
Geo3d::Vector.new(*glu_vector).should == vector.project(viewport_matrix, projection_matrix, view_matrix, Geo3d::Matrix.identity).zero_w
|
142
127
|
end
|
143
128
|
|
@@ -156,7 +141,7 @@ describe Geo3d::Matrix do
|
|
156
141
|
|
157
142
|
vector = Geo3d::Vector.new 574.1784279190967, 294.42147391181595, 0.8485367205965038
|
158
143
|
|
159
|
-
glu_vector = gluUnProject vector.x, vector.y, vector.z, projection_matrix.to_a, view_matrix.to_a, [viewport_data[:x], viewport_data[:y], viewport_data[:width], viewport_data[:height]]
|
144
|
+
glu_vector = glu.send :gluUnProject, vector.x, vector.y, vector.z, projection_matrix.to_a, view_matrix.to_a, [viewport_data[:x], viewport_data[:y], viewport_data[:width], viewport_data[:height]]
|
160
145
|
Geo3d::Vector.new(*glu_vector).should == vector.unproject(viewport_matrix, projection_matrix, view_matrix, Geo3d::Matrix.identity).zero_w
|
161
146
|
end
|
162
147
|
|
data/spec/spec_helper.rb
CHANGED
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.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Misha Conway
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: glu
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: glut
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description: Library for common 3d graphics vector and matrix operations
|
70
98
|
email:
|
71
99
|
- MishaAConway@gmail.com
|
@@ -114,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
142
|
version: '0'
|
115
143
|
requirements: []
|
116
144
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.
|
145
|
+
rubygems_version: 2.4.8
|
118
146
|
signing_key:
|
119
147
|
specification_version: 4
|
120
148
|
summary: Library for common 3d graphics vector and matrix operations
|