opengl 0.9.0-x64-mingw32
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 +7 -0
- checksums.yaml.gz.sig +3 -0
- data.tar.gz.sig +0 -0
- data/.autotest +29 -0
- data/.gemtest +0 -0
- data/.gitignore +6 -0
- data/.travis.yml +19 -0
- data/History.rdoc +77 -0
- data/MIT-LICENSE +18 -0
- data/Manifest.txt +138 -0
- data/README.rdoc +102 -0
- data/Rakefile +60 -0
- data/examples/NeHe/NeHe.png +0 -0
- data/examples/NeHe/crate.png +0 -0
- data/examples/NeHe/glass.png +0 -0
- data/examples/NeHe/nehe_lesson02.rb +117 -0
- data/examples/NeHe/nehe_lesson03.rb +123 -0
- data/examples/NeHe/nehe_lesson04.rb +132 -0
- data/examples/NeHe/nehe_lesson05.rb +182 -0
- data/examples/NeHe/nehe_lesson06.rb +186 -0
- data/examples/NeHe/nehe_lesson07.rb +240 -0
- data/examples/NeHe/nehe_lesson08.rb +255 -0
- data/examples/NeHe/nehe_lesson09.rb +203 -0
- data/examples/NeHe/nehe_lesson11.rb +176 -0
- data/examples/NeHe/nehe_lesson12.rb +203 -0
- data/examples/NeHe/nehe_lesson16.rb +211 -0
- data/examples/NeHe/nehe_lesson19.rb +209 -0
- data/examples/NeHe/nehe_lesson36.rb +308 -0
- data/examples/NeHe/particle.png +0 -0
- data/examples/NeHe/star.png +0 -0
- data/examples/NeHe/tim.png +0 -0
- data/examples/OrangeBook/3Dlabs-License.txt +33 -0
- data/examples/OrangeBook/brick.frag +36 -0
- data/examples/OrangeBook/brick.rb +378 -0
- data/examples/OrangeBook/brick.vert +41 -0
- data/examples/OrangeBook/particle.frag +17 -0
- data/examples/OrangeBook/particle.rb +408 -0
- data/examples/OrangeBook/particle.vert +38 -0
- data/examples/README +16 -0
- data/examples/RedBook/aapoly.rb +143 -0
- data/examples/RedBook/aargb.rb +121 -0
- data/examples/RedBook/accanti.rb +164 -0
- data/examples/RedBook/accpersp.rb +217 -0
- data/examples/RedBook/alpha.rb +125 -0
- data/examples/RedBook/alpha3D.rb +160 -0
- data/examples/RedBook/bezcurve.rb +107 -0
- data/examples/RedBook/bezmesh.rb +139 -0
- data/examples/RedBook/checker.rb +126 -0
- data/examples/RedBook/clip.rb +97 -0
- data/examples/RedBook/colormat.rb +137 -0
- data/examples/RedBook/cube.rb +71 -0
- data/examples/RedBook/depthcue.rb +101 -0
- data/examples/RedBook/dof.rb +206 -0
- data/examples/RedBook/double.rb +107 -0
- data/examples/RedBook/drawf.rb +93 -0
- data/examples/RedBook/feedback.rb +147 -0
- data/examples/RedBook/fog.rb +168 -0
- data/examples/RedBook/font.rb +153 -0
- data/examples/RedBook/hello.rb +81 -0
- data/examples/RedBook/image.rb +139 -0
- data/examples/RedBook/jitter.rb +207 -0
- data/examples/RedBook/light.rb +155 -0
- data/examples/RedBook/lines.rb +130 -0
- data/examples/RedBook/list.rb +113 -0
- data/examples/RedBook/material.rb +276 -0
- data/examples/RedBook/mipmap.rb +158 -0
- data/examples/RedBook/model.rb +115 -0
- data/examples/RedBook/movelight.rb +134 -0
- data/examples/RedBook/pickdepth.rb +181 -0
- data/examples/RedBook/planet.rb +110 -0
- data/examples/RedBook/quadric.rb +160 -0
- data/examples/RedBook/robot.rb +117 -0
- data/examples/RedBook/select.rb +198 -0
- data/examples/RedBook/smooth.rb +97 -0
- data/examples/RedBook/stencil.rb +165 -0
- data/examples/RedBook/stroke.rb +169 -0
- data/examples/RedBook/surface.rb +168 -0
- data/examples/RedBook/teaambient.rb +134 -0
- data/examples/RedBook/teapots.rb +184 -0
- data/examples/RedBook/tess.rb +185 -0
- data/examples/RedBook/texbind.rb +149 -0
- data/examples/RedBook/texgen.rb +171 -0
- data/examples/RedBook/texturesurf.rb +130 -0
- data/examples/RedBook/varray.rb +161 -0
- data/examples/RedBook/wrap.rb +150 -0
- data/examples/misc/OGLBench.rb +338 -0
- data/examples/misc/anisotropic.rb +196 -0
- data/examples/misc/fbo_test.rb +357 -0
- data/examples/misc/font-glut.rb +47 -0
- data/examples/misc/glfwtest.rb +30 -0
- data/examples/misc/plane.rb +161 -0
- data/examples/misc/readpixel.rb +66 -0
- data/examples/misc/sdltest.rb +36 -0
- data/examples/misc/trislam.rb +829 -0
- data/ext/opengl/common.h +428 -0
- data/ext/opengl/conv.h +244 -0
- data/ext/opengl/extconf.rb +47 -0
- data/ext/opengl/funcdef.h +313 -0
- data/ext/opengl/gl-1.0-1.1.c +3075 -0
- data/ext/opengl/gl-1.2.c +155 -0
- data/ext/opengl/gl-1.3.c +443 -0
- data/ext/opengl/gl-1.4.c +348 -0
- data/ext/opengl/gl-1.5.c +224 -0
- data/ext/opengl/gl-2.0.c +667 -0
- data/ext/opengl/gl-2.1.c +57 -0
- data/ext/opengl/gl-3.0.c +493 -0
- data/ext/opengl/gl-enums.c +4873 -0
- data/ext/opengl/gl-enums.h +14588 -0
- data/ext/opengl/gl-error.c +112 -0
- data/ext/opengl/gl-error.h +28 -0
- data/ext/opengl/gl-ext-3dfx.c +27 -0
- data/ext/opengl/gl-ext-arb.c +875 -0
- data/ext/opengl/gl-ext-ati.c +41 -0
- data/ext/opengl/gl-ext-ext.c +889 -0
- data/ext/opengl/gl-ext-gremedy.c +41 -0
- data/ext/opengl/gl-ext-nv.c +680 -0
- data/ext/opengl/gl-types.h +67 -0
- data/ext/opengl/gl.c +220 -0
- data/ext/opengl/gl_buffer.c +177 -0
- data/ext/opengl/opengl.c +7 -0
- data/lib/gl.rb +1 -0
- data/lib/opengl.rb +53 -0
- data/lib/opengl/2.0/opengl.so +0 -0
- data/lib/opengl/2.1/opengl.so +0 -0
- data/lib/opengl/test_case.rb +86 -0
- data/test/dummy.xorg.conf +140 -0
- data/test/test_gl.rb +38 -0
- data/test/test_gl_10_11.rb +1363 -0
- data/test/test_gl_12.rb +71 -0
- data/test/test_gl_13.rb +221 -0
- data/test/test_gl_14.rb +218 -0
- data/test/test_gl_15.rb +258 -0
- data/test/test_gl_20.rb +417 -0
- data/test/test_gl_21.rb +436 -0
- data/test/test_gl_ext_arb.rb +508 -0
- data/test/test_gl_ext_ati.rb +28 -0
- data/test/test_gl_ext_ext.rb +608 -0
- data/test/test_gl_ext_gremedy.rb +29 -0
- data/test/test_gl_ext_nv.rb +349 -0
- data/test/test_opengl_buffer.rb +120 -0
- data/utils/README +6 -0
- data/utils/enumgen.rb +108 -0
- data/utils/extlistgen.rb +90 -0
- metadata +319 -0
- metadata.gz.sig +1 -0
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Name: nehe_lesson02.rb
|
3
|
+
# Purpose: An implementation of NeHe's OpenGL Lesson #02
|
4
|
+
# using ruby-opengl (http://nehe.gamedev.net/)
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'opengl'
|
8
|
+
require 'glu'
|
9
|
+
require 'glut'
|
10
|
+
require 'mathn'
|
11
|
+
|
12
|
+
# Add GL and GLUT namespaces in to make porting easier
|
13
|
+
include Gl
|
14
|
+
include Glu
|
15
|
+
include Glut
|
16
|
+
|
17
|
+
# Placeholder for the window object
|
18
|
+
window = nil
|
19
|
+
|
20
|
+
def init_gl_window width = 640, height = 480
|
21
|
+
# Background color to black
|
22
|
+
glClearColor 0.0, 0.0, 0.0, 0
|
23
|
+
# Enables clearing of depth buffer
|
24
|
+
glClearDepth 1.0
|
25
|
+
# Set type of depth test
|
26
|
+
glDepthFunc GL_LEQUAL
|
27
|
+
# Enable depth testing
|
28
|
+
glEnable GL_DEPTH_TEST
|
29
|
+
# Enable smooth color shading
|
30
|
+
glShadeModel GL_SMOOTH
|
31
|
+
|
32
|
+
glMatrixMode GL_PROJECTION
|
33
|
+
glLoadIdentity
|
34
|
+
# Calculate aspect ratio of the window
|
35
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
36
|
+
|
37
|
+
glMatrixMode GL_MODELVIEW
|
38
|
+
|
39
|
+
draw_gl_scene
|
40
|
+
end
|
41
|
+
|
42
|
+
#reshape = Proc.new do |width, height|
|
43
|
+
def reshape width, height
|
44
|
+
height = 1 if height == 0
|
45
|
+
|
46
|
+
# Reset current viewpoint and perspective transformation
|
47
|
+
glViewport 0, 0, width, height
|
48
|
+
|
49
|
+
glMatrixMode GL_PROJECTION
|
50
|
+
glLoadIdentity
|
51
|
+
|
52
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
53
|
+
end
|
54
|
+
|
55
|
+
#draw_gl_scene = Proc.new do
|
56
|
+
def draw_gl_scene
|
57
|
+
# Clear the screen and depth buffer
|
58
|
+
glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
59
|
+
|
60
|
+
# Reset the view
|
61
|
+
glMatrixMode GL_MODELVIEW
|
62
|
+
glLoadIdentity
|
63
|
+
|
64
|
+
# Move left 1.5 units and into the screen 6.0 units
|
65
|
+
glTranslatef -1.5, 0.0, -6.0
|
66
|
+
|
67
|
+
# Draw a triangle
|
68
|
+
glBegin GL_POLYGON do
|
69
|
+
glVertex3f 0.0, 1.0, 0.0
|
70
|
+
glVertex3f 1.0, -1.0, 0.0
|
71
|
+
glVertex3f -1.0, -1.0, 0.0
|
72
|
+
end
|
73
|
+
|
74
|
+
# Move right 3 units
|
75
|
+
glTranslatef 3.0, 0.0, 0.0
|
76
|
+
|
77
|
+
# Draw a rectangle
|
78
|
+
glBegin GL_QUADS do
|
79
|
+
glVertex3f -1.0, 1.0, 0.0
|
80
|
+
glVertex3f 1.0, 1.0, 0.0
|
81
|
+
glVertex3f 1.0, -1.0, 0.0
|
82
|
+
glVertex3f -1.0, -1.0, 0.0
|
83
|
+
end
|
84
|
+
|
85
|
+
# Swap buffers for display
|
86
|
+
glutSwapBuffers
|
87
|
+
end
|
88
|
+
|
89
|
+
# The idle function to handle
|
90
|
+
def idle
|
91
|
+
glutPostRedisplay
|
92
|
+
end
|
93
|
+
|
94
|
+
# Keyboard handler to exit when ESC is typed
|
95
|
+
keyboard = lambda do |key, x, y|
|
96
|
+
case key
|
97
|
+
when ?\e
|
98
|
+
glutDestroyWindow window
|
99
|
+
exit(0)
|
100
|
+
end
|
101
|
+
glutPostRedisplay
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
# Initliaze our GLUT code
|
106
|
+
glutInit
|
107
|
+
# Setup a double buffer, RGBA color, alpha components and depth buffer
|
108
|
+
glutInitDisplayMode GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
|
109
|
+
glutInitWindowSize 640, 480
|
110
|
+
glutInitWindowPosition 0, 0
|
111
|
+
window = glutCreateWindow "NeHe Lesson 02 - ruby-opengl version"
|
112
|
+
glutIdleFunc :idle
|
113
|
+
glutDisplayFunc :draw_gl_scene
|
114
|
+
glutReshapeFunc :reshape
|
115
|
+
glutKeyboardFunc keyboard
|
116
|
+
init_gl_window 640, 480
|
117
|
+
glutMainLoop
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Name: nehe_lesson03.rb
|
3
|
+
# Purpose: An implementation of NeHe's OpenGL Lesson #03
|
4
|
+
# using ruby-opengl (http://nehe.gamedev.net/)
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'opengl'
|
8
|
+
require 'glu'
|
9
|
+
require 'glut'
|
10
|
+
require 'mathn'
|
11
|
+
|
12
|
+
# Add GL and GLUT namespaces in to make porting easier
|
13
|
+
include Gl
|
14
|
+
include Glu
|
15
|
+
include Glut
|
16
|
+
|
17
|
+
# Placeholder for the window object
|
18
|
+
window = nil
|
19
|
+
|
20
|
+
def init_gl_window width = 640, height = 480
|
21
|
+
# Background color to black
|
22
|
+
glClearColor 0.0, 0.0, 0.0, 0
|
23
|
+
# Enables clearing of depth buffer
|
24
|
+
glClearDepth 1.0
|
25
|
+
# Set type of depth test
|
26
|
+
glDepthFunc GL_LEQUAL
|
27
|
+
# Enable depth testing
|
28
|
+
glEnable GL_DEPTH_TEST
|
29
|
+
# Enable smooth color shading
|
30
|
+
glShadeModel GL_SMOOTH
|
31
|
+
|
32
|
+
glMatrixMode GL_PROJECTION
|
33
|
+
glLoadIdentity
|
34
|
+
# Calculate aspect ratio of the window
|
35
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
36
|
+
|
37
|
+
glMatrixMode GL_MODELVIEW
|
38
|
+
|
39
|
+
draw_gl_scene
|
40
|
+
end
|
41
|
+
|
42
|
+
#reshape = Proc.new do |width, height|
|
43
|
+
def reshape width, height
|
44
|
+
height = 1 if height == 0
|
45
|
+
|
46
|
+
# Reset current viewpoint and perspective transformation
|
47
|
+
glViewport 0, 0, width, height
|
48
|
+
|
49
|
+
glMatrixMode GL_PROJECTION
|
50
|
+
glLoadIdentity
|
51
|
+
|
52
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
53
|
+
end
|
54
|
+
|
55
|
+
#draw_gl_scene = Proc.new do
|
56
|
+
def draw_gl_scene
|
57
|
+
# Clear the screen and depth buffer
|
58
|
+
glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
59
|
+
|
60
|
+
# Reset the view
|
61
|
+
glMatrixMode GL_MODELVIEW
|
62
|
+
glLoadIdentity
|
63
|
+
|
64
|
+
# Move left 1.5 units and into the screen 6.0 units
|
65
|
+
glTranslatef -1.5, 0.0, -6.0
|
66
|
+
|
67
|
+
# Draw a triangle setting the color to red, green, blue for each respective
|
68
|
+
# vertex
|
69
|
+
glBegin GL_POLYGON do
|
70
|
+
glColor3f 1.0, 0.0, 0.0
|
71
|
+
glVertex3f 0.0, 1.0, 0.0
|
72
|
+
glColor3f 0.0, 1.0, 0.0
|
73
|
+
glVertex3f 1.0, -1.0, 0.0
|
74
|
+
glColor3f 0.0, 0.0, 1.0
|
75
|
+
glVertex3f -1.0, -1.0, 0.0
|
76
|
+
end
|
77
|
+
|
78
|
+
# Move right 3 units
|
79
|
+
glTranslatef 3.0, 0.0, 0.0
|
80
|
+
|
81
|
+
# Set the color to medium blue for all vertexes
|
82
|
+
glColor3f 0.5, 0.5, 1.0
|
83
|
+
# Draw a rectangle
|
84
|
+
glBegin GL_QUADS do
|
85
|
+
glVertex3f -1.0, 1.0, 0.0
|
86
|
+
glVertex3f 1.0, 1.0, 0.0
|
87
|
+
glVertex3f 1.0, -1.0, 0.0
|
88
|
+
glVertex3f -1.0, -1.0, 0.0
|
89
|
+
end
|
90
|
+
|
91
|
+
# Swap buffers for display
|
92
|
+
glutSwapBuffers
|
93
|
+
end
|
94
|
+
|
95
|
+
# The idle function to handle
|
96
|
+
def idle
|
97
|
+
glutPostRedisplay
|
98
|
+
end
|
99
|
+
|
100
|
+
# Keyboard handler to exit when ESC is typed
|
101
|
+
keyboard = lambda do |key, x, y|
|
102
|
+
case key
|
103
|
+
when ?\e
|
104
|
+
glutDestroyWindow window
|
105
|
+
exit(0)
|
106
|
+
end
|
107
|
+
glutPostRedisplay
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
# Initliaze our GLUT code
|
112
|
+
glutInit
|
113
|
+
# Setup a double buffer, RGBA color, alpha components and depth buffer
|
114
|
+
glutInitDisplayMode GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
|
115
|
+
glutInitWindowSize 640, 480
|
116
|
+
glutInitWindowPosition 0, 0
|
117
|
+
window = glutCreateWindow "NeHe Lesson 03 - ruby-opengl version"
|
118
|
+
glutIdleFunc :idle
|
119
|
+
glutDisplayFunc :draw_gl_scene
|
120
|
+
glutReshapeFunc :reshape
|
121
|
+
glutKeyboardFunc keyboard
|
122
|
+
init_gl_window 640, 480
|
123
|
+
glutMainLoop
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Name: nehe_lesson04.rb
|
3
|
+
# Purpose: An implementation of NeHe's OpenGL Lesson #04
|
4
|
+
# using ruby-opengl http://nehe.gamedev.net/
|
5
|
+
|
6
|
+
require 'opengl'
|
7
|
+
require 'glu'
|
8
|
+
require 'glut'
|
9
|
+
|
10
|
+
# Add GL and GLUT namespaces in to make porting easier
|
11
|
+
include Gl
|
12
|
+
include Glu
|
13
|
+
include Glut
|
14
|
+
|
15
|
+
# Placeholder for the window object
|
16
|
+
$window = ""
|
17
|
+
# Angle for the triangle Global
|
18
|
+
$triangle_angle = 0
|
19
|
+
# Angle for the quadrilateral Global
|
20
|
+
$quad_angle = 0
|
21
|
+
|
22
|
+
def init_gl_window width = 640, height = 480
|
23
|
+
# Background color to black
|
24
|
+
glClearColor 0.0, 0.0, 0.0, 0
|
25
|
+
# Enables clearing of depth buffer
|
26
|
+
glClearDepth 1.0
|
27
|
+
# Set type of depth test
|
28
|
+
glDepthFunc GL_LEQUAL
|
29
|
+
# Enable depth testing
|
30
|
+
glEnable GL_DEPTH_TEST
|
31
|
+
# Enable smooth color shading
|
32
|
+
glShadeModel GL_SMOOTH
|
33
|
+
|
34
|
+
glMatrixMode GL_PROJECTION
|
35
|
+
glLoadIdentity
|
36
|
+
# Calculate aspect ratio of the window
|
37
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
38
|
+
|
39
|
+
glMatrixMode GL_MODELVIEW
|
40
|
+
|
41
|
+
draw_gl_scene
|
42
|
+
end
|
43
|
+
|
44
|
+
#reshape = Proc.new do |width, height|
|
45
|
+
def reshape width, height
|
46
|
+
height = 1 if height == 0
|
47
|
+
|
48
|
+
# Reset current viewpoint and perspective transformation
|
49
|
+
glViewport 0, 0, width, height
|
50
|
+
|
51
|
+
glMatrixMode GL_PROJECTION
|
52
|
+
glLoadIdentity
|
53
|
+
|
54
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
55
|
+
end
|
56
|
+
|
57
|
+
#draw_gl_scene = Proc.new do
|
58
|
+
def draw_gl_scene
|
59
|
+
# Clear the screen and depth buffer
|
60
|
+
glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
61
|
+
|
62
|
+
# Reset the view
|
63
|
+
glMatrixMode GL_MODELVIEW
|
64
|
+
glLoadIdentity
|
65
|
+
|
66
|
+
# Move left 1.5 units and into the screen 6.0 units
|
67
|
+
glTranslatef -1.5, 0.0, -6.0
|
68
|
+
|
69
|
+
# Rotate the triangle on the Y-axis
|
70
|
+
glRotatef $triangle_angle, 0.0, 1.0, 0.0
|
71
|
+
# Draw a triangle
|
72
|
+
glBegin GL_POLYGON do
|
73
|
+
glColor3f 1.0, 0.0, 0.0
|
74
|
+
glVertex3f 0.0, 1.0, 0.0
|
75
|
+
glColor3f 0.0, 1.0, 0.0
|
76
|
+
glVertex3f 1.0, -1.0, 0.0
|
77
|
+
glColor3f 0.0, 0.0, 1.0
|
78
|
+
glVertex3f -1.0, -1.0, 0.0
|
79
|
+
end
|
80
|
+
|
81
|
+
# Move right 3 units
|
82
|
+
glLoadIdentity
|
83
|
+
glTranslatef 1.5, 0.0, -6.0
|
84
|
+
|
85
|
+
# Draw a quadrilateral
|
86
|
+
# Rotate the quad on the X-axis
|
87
|
+
glRotatef $quad_angle, 1.0, 0.0, 0.0
|
88
|
+
# Set it to a blue color one time only
|
89
|
+
glColor3f 0.5, 0.5, 1.0
|
90
|
+
glBegin GL_QUADS do
|
91
|
+
glVertex3f -1.0, 1.0, 0.0
|
92
|
+
glVertex3f 1.0, 1.0, 0.0
|
93
|
+
glVertex3f 1.0, -1.0, 0.0
|
94
|
+
glVertex3f -1.0, -1.0, 0.0
|
95
|
+
end
|
96
|
+
|
97
|
+
$triangle_angle += 0.2
|
98
|
+
$quad_angle -= 0.15
|
99
|
+
|
100
|
+
# Swap buffers for display
|
101
|
+
glutSwapBuffers
|
102
|
+
end
|
103
|
+
|
104
|
+
# The idle function to handle
|
105
|
+
def idle
|
106
|
+
glutPostRedisplay
|
107
|
+
end
|
108
|
+
|
109
|
+
# Keyboard handler to exit when ESC is typed
|
110
|
+
keyboard = lambda do |key, x, y|
|
111
|
+
case key
|
112
|
+
when ?\e
|
113
|
+
glutDestroyWindow $window
|
114
|
+
exit 0
|
115
|
+
end
|
116
|
+
glutPostRedisplay
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# Initliaze our GLUT code
|
121
|
+
glutInit
|
122
|
+
# Setup a double buffer, RGBA color, alpha components and depth buffer
|
123
|
+
glutInitDisplayMode GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
|
124
|
+
glutInitWindowSize 640, 480
|
125
|
+
glutInitWindowPosition 0, 0
|
126
|
+
$window = glutCreateWindow "NeHe Lesson 04 - ruby-opengl version"
|
127
|
+
glutDisplayFunc :draw_gl_scene
|
128
|
+
glutReshapeFunc :reshape
|
129
|
+
glutIdleFunc :idle
|
130
|
+
glutKeyboardFunc keyboard
|
131
|
+
init_gl_window 640, 480
|
132
|
+
glutMainLoop
|
@@ -0,0 +1,182 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'opengl'
|
4
|
+
require 'glu'
|
5
|
+
require 'glut'
|
6
|
+
|
7
|
+
class Lesson05
|
8
|
+
include Gl
|
9
|
+
include Glu
|
10
|
+
include Glut
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@pyramid_angle = 0
|
14
|
+
@cube_angle = 0
|
15
|
+
|
16
|
+
# Initliaze our GLUT code
|
17
|
+
glutInit
|
18
|
+
# Setup a double buffer, RGBA color, alpha components and depth buffer
|
19
|
+
glutInitDisplayMode GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
|
20
|
+
glutInitWindowSize 640, 480
|
21
|
+
glutInitWindowPosition 0, 0
|
22
|
+
@window = glutCreateWindow "NeHe Lesson 05 - ruby-opengl version"
|
23
|
+
glutDisplayFunc :draw_gl_scene
|
24
|
+
glutReshapeFunc :reshape
|
25
|
+
glutIdleFunc :idle
|
26
|
+
glutKeyboardFunc :keyboard
|
27
|
+
init_gl_window 640, 480
|
28
|
+
glutMainLoop
|
29
|
+
end
|
30
|
+
|
31
|
+
def init_gl_window width = 640, height = 480
|
32
|
+
# Background color to black
|
33
|
+
glClearColor 0.0, 0.0, 0.0, 0
|
34
|
+
# Enables clearing of depth buffer
|
35
|
+
glClearDepth 1.0
|
36
|
+
# Set type of depth test
|
37
|
+
glDepthFunc GL_LEQUAL
|
38
|
+
# Enable depth testing
|
39
|
+
glEnable GL_DEPTH_TEST
|
40
|
+
# Enable smooth color shading
|
41
|
+
glShadeModel GL_SMOOTH
|
42
|
+
|
43
|
+
glMatrixMode GL_PROJECTION
|
44
|
+
glLoadIdentity
|
45
|
+
# Calculate aspect ratio of the window
|
46
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
47
|
+
|
48
|
+
glMatrixMode GL_MODELVIEW
|
49
|
+
|
50
|
+
draw_gl_scene
|
51
|
+
end
|
52
|
+
|
53
|
+
def reshape width, height
|
54
|
+
height = 1 if height == 0
|
55
|
+
|
56
|
+
# Reset current viewpoint and perspective transformation
|
57
|
+
glViewport 0, 0, width, height
|
58
|
+
|
59
|
+
glMatrixMode GL_PROJECTION
|
60
|
+
glLoadIdentity
|
61
|
+
|
62
|
+
gluPerspective 45.0, width / height, 0.1, 100.0
|
63
|
+
end
|
64
|
+
|
65
|
+
def draw_gl_scene
|
66
|
+
# Clear the screen and depth buffer
|
67
|
+
glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
68
|
+
|
69
|
+
# Reset the view
|
70
|
+
glMatrixMode GL_MODELVIEW
|
71
|
+
glLoadIdentity
|
72
|
+
|
73
|
+
# Move left 1.5 units and into the screen 6.0 units
|
74
|
+
glTranslatef -1.5, 0.0, -6.0
|
75
|
+
|
76
|
+
# Rotate the pyramid on the Y-axis
|
77
|
+
glRotatef @pyramid_angle, 0.0, 1.0, 0.0
|
78
|
+
|
79
|
+
# Draw a pyramid
|
80
|
+
glBegin GL_POLYGON do
|
81
|
+
# Draw front side of pyramid
|
82
|
+
glColor3f 1.0, 0.0, 0.0
|
83
|
+
glVertex3f 0.0, 1.0, 0.0
|
84
|
+
glColor3f 0.0, 1.0, 0.0
|
85
|
+
glVertex3f -1.0, -1.0, 1.0
|
86
|
+
glColor3f 0.0, 0.0, 1.0
|
87
|
+
glVertex3f 1.0, -1.0, 1.0
|
88
|
+
|
89
|
+
# Draw right side of pyramid
|
90
|
+
glColor3f 1.0, 0.0, 0.0
|
91
|
+
glVertex3f 0.0, 1.0, 0.0
|
92
|
+
glColor3f 0.0, 0.0, 1.0
|
93
|
+
glVertex3f 1.0, -1.0, 1.0
|
94
|
+
glColor3f 0.0, 1.0, 0.0
|
95
|
+
glVertex3f 1.0, -1.0, -1.0
|
96
|
+
|
97
|
+
# Draw back side of pyramid
|
98
|
+
glColor3f 1.0, 0.0, 0.0
|
99
|
+
glVertex3f 0.0, 1.0, 0.0
|
100
|
+
glColor3f 0.0, 1.0, 0.0
|
101
|
+
glVertex3f 1.0, -1.0, -1.0
|
102
|
+
glColor3f 0.0, 0.0, 1.0
|
103
|
+
glVertex3f -1.0, -1.0, -1.0
|
104
|
+
|
105
|
+
# Draw left side of pyramid
|
106
|
+
glColor3f 1.0, 0.0, 0.0
|
107
|
+
glVertex3f 0.0, 1.0, 0.0
|
108
|
+
glColor3f 0.0, 0.0, 1.0
|
109
|
+
glVertex3f -1.0, -1.0, -1.0
|
110
|
+
glColor3f 0.0, 1.0, 0.0
|
111
|
+
glVertex3f -1.0, -1.0, 1.0
|
112
|
+
end
|
113
|
+
|
114
|
+
glLoadIdentity
|
115
|
+
# Move right 3 units
|
116
|
+
glTranslatef 1.5, 0.0, -7.0
|
117
|
+
|
118
|
+
# Draw a cube
|
119
|
+
# Rotate the cube on the X, Y and Z axis
|
120
|
+
glRotatef @cube_angle, 1.0, 1.0, 1.0
|
121
|
+
# Set it to a blue color one time only
|
122
|
+
glBegin GL_QUADS do
|
123
|
+
# Draw the top side in green
|
124
|
+
glColor3f 0.0, 1.0, 0.0
|
125
|
+
glVertex3f 1.0, 1.0, -1.0
|
126
|
+
glVertex3f -1.0, 1.0, -1.0
|
127
|
+
glVertex3f -1.0, 1.0, 1.0
|
128
|
+
glVertex3f 1.0, 1.0, 1.0
|
129
|
+
# Draw the bottom side in orange
|
130
|
+
glColor3f 1.0, 0.5, 0.0
|
131
|
+
glVertex3f 1.0, -1.0, 1.0
|
132
|
+
glVertex3f -1.0, -1.0, 1.0
|
133
|
+
glVertex3f -1.0, -1.0, -1.0
|
134
|
+
glVertex3f 1.0, -1.0, -1.0
|
135
|
+
# Draw the front side in red
|
136
|
+
glColor3f 1.0, 0.0, 0.0
|
137
|
+
glVertex3f 1.0, 1.0, 1.0
|
138
|
+
glVertex3f -1.0, 1.0, 1.0
|
139
|
+
glVertex3f -1.0, -1.0, 1.0
|
140
|
+
glVertex3f 1.0, -1.0, 1.0
|
141
|
+
# Draw the back side in yellow
|
142
|
+
glColor3f 1.0, 1.0, 0.0
|
143
|
+
glVertex3f 1.0, -1.0, -1.0
|
144
|
+
glVertex3f -1.0, -1.0, -1.0
|
145
|
+
glVertex3f -1.0, 1.0, -1.0
|
146
|
+
glVertex3f 1.0, 1.0, -1.0
|
147
|
+
# Draw the left side in blue
|
148
|
+
glColor3f 0.0, 0.0, 1.0
|
149
|
+
glVertex3f -1.0, 1.0, 1.0
|
150
|
+
glVertex3f -1.0, 1.0, -1.0
|
151
|
+
glVertex3f -1.0, -1.0, -1.0
|
152
|
+
glVertex3f -1.0, -1.0, 1.0
|
153
|
+
# Draw the right side in violet
|
154
|
+
glColor3f 1.0, 0.0, 1.0
|
155
|
+
glVertex3f 1.0, 1.0, -1.0
|
156
|
+
glVertex3f 1.0, 1.0, 1.0
|
157
|
+
glVertex3f 1.0, -1.0, 1.0
|
158
|
+
glVertex3f 1.0, -1.0, -1.0
|
159
|
+
end
|
160
|
+
|
161
|
+
@pyramid_angle += 0.2
|
162
|
+
@cube_angle -= 0.15
|
163
|
+
# Swap buffers for display
|
164
|
+
glutSwapBuffers
|
165
|
+
end
|
166
|
+
|
167
|
+
def idle
|
168
|
+
glutPostRedisplay
|
169
|
+
end
|
170
|
+
|
171
|
+
def keyboard key, x, y
|
172
|
+
case key
|
173
|
+
when ?\e
|
174
|
+
glutDestroyWindow @window
|
175
|
+
exit 0
|
176
|
+
end
|
177
|
+
glutPostRedisplay
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
Lesson05.new if $0 == __FILE__
|