danabr75-opengl 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +29 -0
  3. data/.gemtest +0 -0
  4. data/.gitignore +6 -0
  5. data/.travis.yml +19 -0
  6. data/Gemfile +8 -0
  7. data/History.md +101 -0
  8. data/MIT-LICENSE +18 -0
  9. data/Manifest.txt +142 -0
  10. data/README.rdoc +105 -0
  11. data/Rakefile +170 -0
  12. data/danabr75-opengl.gemspec +32 -0
  13. data/examples/NeHe/NeHe.png +0 -0
  14. data/examples/NeHe/crate.png +0 -0
  15. data/examples/NeHe/glass.png +0 -0
  16. data/examples/NeHe/nehe_lesson02.rb +117 -0
  17. data/examples/NeHe/nehe_lesson03.rb +123 -0
  18. data/examples/NeHe/nehe_lesson04.rb +132 -0
  19. data/examples/NeHe/nehe_lesson05.rb +182 -0
  20. data/examples/NeHe/nehe_lesson06.rb +186 -0
  21. data/examples/NeHe/nehe_lesson07.rb +240 -0
  22. data/examples/NeHe/nehe_lesson08.rb +255 -0
  23. data/examples/NeHe/nehe_lesson09.rb +203 -0
  24. data/examples/NeHe/nehe_lesson11.rb +176 -0
  25. data/examples/NeHe/nehe_lesson12.rb +203 -0
  26. data/examples/NeHe/nehe_lesson16.rb +211 -0
  27. data/examples/NeHe/nehe_lesson19.rb +209 -0
  28. data/examples/NeHe/nehe_lesson36.rb +308 -0
  29. data/examples/NeHe/particle.png +0 -0
  30. data/examples/NeHe/star.png +0 -0
  31. data/examples/NeHe/tim.png +0 -0
  32. data/examples/OrangeBook/3Dlabs-License.txt +33 -0
  33. data/examples/OrangeBook/brick.frag +36 -0
  34. data/examples/OrangeBook/brick.rb +378 -0
  35. data/examples/OrangeBook/brick.vert +41 -0
  36. data/examples/OrangeBook/particle.frag +17 -0
  37. data/examples/OrangeBook/particle.rb +408 -0
  38. data/examples/OrangeBook/particle.vert +38 -0
  39. data/examples/README +16 -0
  40. data/examples/RedBook/aapoly.rb +143 -0
  41. data/examples/RedBook/aargb.rb +121 -0
  42. data/examples/RedBook/accanti.rb +164 -0
  43. data/examples/RedBook/accpersp.rb +217 -0
  44. data/examples/RedBook/alpha.rb +125 -0
  45. data/examples/RedBook/alpha3D.rb +160 -0
  46. data/examples/RedBook/bezcurve.rb +107 -0
  47. data/examples/RedBook/bezmesh.rb +139 -0
  48. data/examples/RedBook/checker.rb +126 -0
  49. data/examples/RedBook/clip.rb +97 -0
  50. data/examples/RedBook/colormat.rb +137 -0
  51. data/examples/RedBook/cube.rb +71 -0
  52. data/examples/RedBook/depthcue.rb +101 -0
  53. data/examples/RedBook/dof.rb +206 -0
  54. data/examples/RedBook/double.rb +107 -0
  55. data/examples/RedBook/drawf.rb +93 -0
  56. data/examples/RedBook/feedback.rb +147 -0
  57. data/examples/RedBook/fog.rb +168 -0
  58. data/examples/RedBook/font.rb +153 -0
  59. data/examples/RedBook/hello.rb +81 -0
  60. data/examples/RedBook/image.rb +139 -0
  61. data/examples/RedBook/jitter.rb +207 -0
  62. data/examples/RedBook/light.rb +157 -0
  63. data/examples/RedBook/lines.rb +130 -0
  64. data/examples/RedBook/list.rb +113 -0
  65. data/examples/RedBook/material.rb +276 -0
  66. data/examples/RedBook/mipmap.rb +158 -0
  67. data/examples/RedBook/model.rb +115 -0
  68. data/examples/RedBook/movelight.rb +134 -0
  69. data/examples/RedBook/pickdepth.rb +181 -0
  70. data/examples/RedBook/planet.rb +110 -0
  71. data/examples/RedBook/quadric.rb +160 -0
  72. data/examples/RedBook/robot.rb +117 -0
  73. data/examples/RedBook/select.rb +198 -0
  74. data/examples/RedBook/smooth.rb +97 -0
  75. data/examples/RedBook/stencil.rb +165 -0
  76. data/examples/RedBook/stroke.rb +169 -0
  77. data/examples/RedBook/surface.rb +168 -0
  78. data/examples/RedBook/teaambient.rb +134 -0
  79. data/examples/RedBook/teapots.rb +184 -0
  80. data/examples/RedBook/tess.rb +185 -0
  81. data/examples/RedBook/texbind.rb +149 -0
  82. data/examples/RedBook/texgen.rb +171 -0
  83. data/examples/RedBook/texturesurf.rb +130 -0
  84. data/examples/RedBook/varray.rb +161 -0
  85. data/examples/RedBook/wrap.rb +150 -0
  86. data/examples/misc/OGLBench.rb +338 -0
  87. data/examples/misc/anisotropic.rb +196 -0
  88. data/examples/misc/fbo_test.rb +357 -0
  89. data/examples/misc/font-glut.rb +47 -0
  90. data/examples/misc/glfwtest.rb +30 -0
  91. data/examples/misc/plane.rb +161 -0
  92. data/examples/misc/readpixel.rb +66 -0
  93. data/examples/misc/sdltest.rb +36 -0
  94. data/examples/misc/trislam.rb +829 -0
  95. data/ext/opengl/GL/gl.h +2115 -0
  96. data/ext/opengl/GL/glext.h +11770 -0
  97. data/ext/opengl/common.h +372 -0
  98. data/ext/opengl/conv.h +247 -0
  99. data/ext/opengl/extconf.rb +19 -0
  100. data/ext/opengl/fptr_struct.h +912 -0
  101. data/ext/opengl/funcdef.h +279 -0
  102. data/ext/opengl/gl-1.0-1.1.c +3345 -0
  103. data/ext/opengl/gl-1.2.c +155 -0
  104. data/ext/opengl/gl-1.3.c +447 -0
  105. data/ext/opengl/gl-1.4.c +346 -0
  106. data/ext/opengl/gl-1.5.c +225 -0
  107. data/ext/opengl/gl-2.0.c +665 -0
  108. data/ext/opengl/gl-2.1.c +57 -0
  109. data/ext/opengl/gl-3.0.c +502 -0
  110. data/ext/opengl/gl-enums.c +4853 -0
  111. data/ext/opengl/gl-enums.h +14528 -0
  112. data/ext/opengl/gl-error.c +110 -0
  113. data/ext/opengl/gl-error.h +25 -0
  114. data/ext/opengl/gl-ext-3dfx.c +27 -0
  115. data/ext/opengl/gl-ext-arb.c +880 -0
  116. data/ext/opengl/gl-ext-ati.c +41 -0
  117. data/ext/opengl/gl-ext-ext.c +885 -0
  118. data/ext/opengl/gl-ext-gremedy.c +41 -0
  119. data/ext/opengl/gl-ext-nv.c +679 -0
  120. data/ext/opengl/gl.c +265 -0
  121. data/ext/opengl/gl_buffer.c +202 -0
  122. data/ext/opengl/glimpl.c +187 -0
  123. data/ext/opengl/glimpl.h +47 -0
  124. data/ext/opengl/opengl.c +9 -0
  125. data/lib/gl.rb +1 -0
  126. data/lib/opengl.rb +79 -0
  127. data/lib/opengl/bindings_version.rb +4 -0
  128. data/lib/opengl/implementation.rb +38 -0
  129. data/lib/opengl/test_case.rb +86 -0
  130. data/test/dummy.xorg.conf +140 -0
  131. data/test/test_gl.rb +45 -0
  132. data/test/test_gl_10_11.rb +1363 -0
  133. data/test/test_gl_12.rb +71 -0
  134. data/test/test_gl_13.rb +221 -0
  135. data/test/test_gl_14.rb +218 -0
  136. data/test/test_gl_15.rb +258 -0
  137. data/test/test_gl_20.rb +417 -0
  138. data/test/test_gl_21.rb +436 -0
  139. data/test/test_gl_ext_arb.rb +508 -0
  140. data/test/test_gl_ext_ati.rb +28 -0
  141. data/test/test_gl_ext_ext.rb +608 -0
  142. data/test/test_gl_ext_gremedy.rb +29 -0
  143. data/test/test_gl_ext_nv.rb +349 -0
  144. data/test/test_glimpl.rb +23 -0
  145. data/test/test_opengl_buffer.rb +122 -0
  146. data/utils/README +6 -0
  147. data/utils/enumgen.rb +108 -0
  148. data/utils/extlistgen.rb +90 -0
  149. metadata +326 -0
@@ -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__
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'opengl'
4
+ require 'glu'
5
+ require 'glut'
6
+ require 'chunky_png'
7
+
8
+ class Lesson06
9
+ include Gl
10
+ include Glu
11
+ include Glut
12
+
13
+ def initialize
14
+ @textures = nil
15
+ @xrot = 0.0
16
+ @yrot = 0.0
17
+ @zrot = 0.0
18
+ @fullscreen = true
19
+
20
+ glutInit
21
+
22
+ glutInitDisplayMode GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
23
+ glutInitWindowSize 640, 480
24
+ glutInitWindowPosition 0, 0
25
+
26
+ @window = glutCreateWindow "NeHe Lesson 06 - ruby-opengl version"
27
+
28
+ glutDisplayFunc :draw_gl_scene
29
+ glutReshapeFunc :reshape
30
+ glutIdleFunc :idle
31
+ glutKeyboardFunc :keyboard
32
+
33
+ reshape 640, 480
34
+ load_texture
35
+ init_gl
36
+
37
+ glutMainLoop
38
+ end
39
+
40
+ def init_gl
41
+ glEnable GL_TEXTURE_2D
42
+ glShadeModel GL_SMOOTH
43
+ glClearColor 0.0, 0.0, 0.0, 0.5
44
+ glClearDepth 1.0
45
+ glEnable GL_DEPTH_TEST
46
+ glDepthFunc GL_LEQUAL
47
+ glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST
48
+ end
49
+
50
+ def reshape width, height
51
+ width = width.to_f
52
+ height = height.to_f
53
+ height = 1.0 if height.zero?
54
+
55
+ glViewport 0, 0, width, height
56
+
57
+ glMatrixMode GL_PROJECTION
58
+ glLoadIdentity
59
+
60
+ gluPerspective 45.0, width / height, 0.1, 100.0
61
+
62
+ glMatrixMode GL_MODELVIEW
63
+ glLoadIdentity
64
+ end
65
+
66
+ def draw_gl_scene
67
+ glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
68
+ glMatrixMode GL_MODELVIEW
69
+ glLoadIdentity
70
+ glTranslatef 0.0, 0.0, -7.0
71
+
72
+ glRotatef @xrot, 1.0, 0.0, 0.0
73
+ glRotatef @yrot, 0.0, 1.0, 0.0
74
+ glRotatef @zrot, 0.0, 0.0, 1.0
75
+
76
+ glBindTexture GL_TEXTURE_2D, @textures[0]
77
+
78
+ glBegin GL_QUADS do
79
+ # front face
80
+ glTexCoord2f(0.0, 1.0)
81
+ glVertex3f(-1.0, -1.0, 1.0)
82
+ glTexCoord2f(1.0, 1.0)
83
+ glVertex3f( 1.0, -1.0, 1.0)
84
+ glTexCoord2f(1.0, 0.0)
85
+ glVertex3f( 1.0, 1.0, 1.0)
86
+ glTexCoord2f(0.0, 0.0)
87
+ glVertex3f(-1.0, 1.0, 1.0)
88
+
89
+ # back face
90
+ glTexCoord2f(0.0, 1.0)
91
+ glVertex3f(-1.0, -1.0, -1.0)
92
+ glTexCoord2f(1.0, 1.0)
93
+ glVertex3f(-1.0, 1.0, -1.0)
94
+ glTexCoord2f(1.0, 0.0)
95
+ glVertex3f( 1.0, 1.0, -1.0)
96
+ glTexCoord2f(0.0, 0.0)
97
+ glVertex3f( 1.0, -1.0, -1.0)
98
+
99
+ # top face
100
+ glTexCoord2f(0.0, 1.0)
101
+ glVertex3f(-1.0, 1.0, -1.0)
102
+ glTexCoord2f(1.0, 1.0)
103
+ glVertex3f(-1.0, 1.0, 1.0)
104
+ glTexCoord2f(1.0, 0.0)
105
+ glVertex3f( 1.0, 1.0, 1.0)
106
+ glTexCoord2f(0.0, 0.0)
107
+ glVertex3f( 1.0, 1.0, -1.0)
108
+
109
+ # bottom face
110
+ glTexCoord2f(1.0, 1.0)
111
+ glVertex3f(-1.0, -1.0, -1.0)
112
+ glTexCoord2f(1.0, 0.0)
113
+ glVertex3f( 1.0, -1.0, -1.0)
114
+ glTexCoord2f(0.0, 0.0)
115
+ glVertex3f( 1.0, -1.0, 1.0)
116
+ glTexCoord2f(0.0, 1.0)
117
+ glVertex3f(-1.0, -1.0, 1.0)
118
+
119
+ # right face
120
+ glTexCoord2f(1.0, 0.0)
121
+ glVertex3f( 1.0, -1.0, -1.0)
122
+ glTexCoord2f(0.0, 0.0)
123
+ glVertex3f( 1.0, 1.0, -1.0)
124
+ glTexCoord2f(0.0, 1.0)
125
+ glVertex3f( 1.0, 1.0, 1.0)
126
+ glTexCoord2f(1.0, 1.0)
127
+ glVertex3f( 1.0, -1.0, 1.0)
128
+
129
+ # left face
130
+ glTexCoord2f(0.0, 0.0)
131
+ glVertex3f(-1.0, -1.0, -1.0)
132
+ glTexCoord2f(0.0, 1.0)
133
+ glVertex3f(-1.0, -1.0, 1.0)
134
+ glTexCoord2f(1.0, 1.0)
135
+ glVertex3f(-1.0, 1.0, 1.0)
136
+ glTexCoord2f(1.0, 0.0)
137
+ glVertex3f(-1.0, 1.0, -1.0)
138
+ end
139
+
140
+ @xrot += 0.003
141
+ @yrot += 0.002
142
+ @zrot += 0.004
143
+
144
+ glutSwapBuffers
145
+ end
146
+
147
+ def idle
148
+ glutPostRedisplay
149
+ end
150
+
151
+ def keyboard key, x, y
152
+ case key
153
+ when ?\e
154
+ glutDestroyWindow @window
155
+ exit 0
156
+ when 'F' then
157
+ @fullscreen = !@fullscreen
158
+
159
+ if @fullscreen then
160
+ glutFullScreen
161
+ else
162
+ glutPositionWindow 0, 0
163
+ end
164
+ end
165
+
166
+ glutPostRedisplay
167
+ end
168
+
169
+ def load_texture
170
+ png = ChunkyPNG::Image.from_file(File.expand_path('../NeHe.png', __FILE__))
171
+
172
+ height = png.height
173
+ width = png.width
174
+
175
+ image = png.to_rgba_stream.each_byte.to_a
176
+
177
+ @textures = glGenTextures 1
178
+ glBindTexture GL_TEXTURE_2D, @textures[0]
179
+ glTexImage2D GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image
180
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR
181
+ glTexParameteri GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
182
+ end
183
+
184
+ end
185
+
186
+ Lesson06.new