ruby-opengl 0.60.1 → 0.61.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. metadata +36 -186
  2. data/Rakefile +0 -168
  3. data/doc/build_install.txt +0 -122
  4. data/doc/extensions.txt +0 -556
  5. data/doc/extensions.txt.in +0 -348
  6. data/doc/history.txt +0 -66
  7. data/doc/requirements_and_design.txt +0 -117
  8. data/doc/roadmap.txt +0 -28
  9. data/doc/scientific_use.txt +0 -35
  10. data/doc/supplies/page_template.html +0 -71
  11. data/doc/thanks.txt +0 -29
  12. data/doc/tutorial.txt +0 -469
  13. data/examples/NeHe/nehe_lesson02.rb +0 -117
  14. data/examples/NeHe/nehe_lesson03.rb +0 -122
  15. data/examples/NeHe/nehe_lesson04.rb +0 -133
  16. data/examples/NeHe/nehe_lesson05.rb +0 -186
  17. data/examples/NeHe/nehe_lesson36.rb +0 -303
  18. data/examples/OrangeBook/3Dlabs-License.txt +0 -33
  19. data/examples/OrangeBook/brick.frag +0 -36
  20. data/examples/OrangeBook/brick.rb +0 -376
  21. data/examples/OrangeBook/brick.vert +0 -41
  22. data/examples/OrangeBook/particle.frag +0 -17
  23. data/examples/OrangeBook/particle.rb +0 -406
  24. data/examples/OrangeBook/particle.vert +0 -38
  25. data/examples/README +0 -16
  26. data/examples/RedBook/aapoly.rb +0 -142
  27. data/examples/RedBook/aargb.rb +0 -119
  28. data/examples/RedBook/accanti.rb +0 -162
  29. data/examples/RedBook/accpersp.rb +0 -215
  30. data/examples/RedBook/alpha.rb +0 -123
  31. data/examples/RedBook/alpha3D.rb +0 -158
  32. data/examples/RedBook/bezcurve.rb +0 -105
  33. data/examples/RedBook/bezmesh.rb +0 -137
  34. data/examples/RedBook/checker.rb +0 -124
  35. data/examples/RedBook/clip.rb +0 -95
  36. data/examples/RedBook/colormat.rb +0 -135
  37. data/examples/RedBook/cube.rb +0 -69
  38. data/examples/RedBook/depthcue.rb +0 -99
  39. data/examples/RedBook/dof.rb +0 -205
  40. data/examples/RedBook/double.rb +0 -105
  41. data/examples/RedBook/drawf.rb +0 -91
  42. data/examples/RedBook/feedback.rb +0 -145
  43. data/examples/RedBook/fog.rb +0 -167
  44. data/examples/RedBook/font.rb +0 -151
  45. data/examples/RedBook/hello.rb +0 -79
  46. data/examples/RedBook/image.rb +0 -137
  47. data/examples/RedBook/jitter.rb +0 -207
  48. data/examples/RedBook/lines.rb +0 -128
  49. data/examples/RedBook/list.rb +0 -111
  50. data/examples/RedBook/material.rb +0 -275
  51. data/examples/RedBook/mipmap.rb +0 -156
  52. data/examples/RedBook/model.rb +0 -113
  53. data/examples/RedBook/movelight.rb +0 -132
  54. data/examples/RedBook/pickdepth.rb +0 -179
  55. data/examples/RedBook/planet.rb +0 -108
  56. data/examples/RedBook/quadric.rb +0 -158
  57. data/examples/RedBook/robot.rb +0 -115
  58. data/examples/RedBook/select.rb +0 -196
  59. data/examples/RedBook/smooth.rb +0 -95
  60. data/examples/RedBook/stencil.rb +0 -163
  61. data/examples/RedBook/stroke.rb +0 -167
  62. data/examples/RedBook/surface.rb +0 -166
  63. data/examples/RedBook/teaambient.rb +0 -132
  64. data/examples/RedBook/teapots.rb +0 -182
  65. data/examples/RedBook/tess.rb +0 -183
  66. data/examples/RedBook/texbind.rb +0 -147
  67. data/examples/RedBook/texgen.rb +0 -169
  68. data/examples/RedBook/texturesurf.rb +0 -128
  69. data/examples/RedBook/varray.rb +0 -159
  70. data/examples/RedBook/wrap.rb +0 -148
  71. data/examples/misc/OGLBench.rb +0 -337
  72. data/examples/misc/anisotropic.rb +0 -194
  73. data/examples/misc/fbo_test.rb +0 -356
  74. data/examples/misc/font-glut.rb +0 -46
  75. data/examples/misc/glfwtest.rb +0 -30
  76. data/examples/misc/plane.rb +0 -161
  77. data/examples/misc/readpixel.rb +0 -65
  78. data/examples/misc/sdltest.rb +0 -34
  79. data/examples/misc/trislam.rb +0 -828
  80. data/ext/common/common.h +0 -423
  81. data/ext/common/conv.h +0 -244
  82. data/ext/common/funcdef.h +0 -280
  83. data/ext/common/gl-enums.h +0 -10031
  84. data/ext/common/gl-error.h +0 -23
  85. data/ext/common/gl-types.h +0 -61
  86. data/ext/common/glu-enums.h +0 -463
  87. data/ext/gl/gl-1.0-1.1.c +0 -2817
  88. data/ext/gl/gl-1.2.c +0 -814
  89. data/ext/gl/gl-1.3.c +0 -444
  90. data/ext/gl/gl-1.4.c +0 -349
  91. data/ext/gl/gl-1.5.c +0 -225
  92. data/ext/gl/gl-2.0.c +0 -657
  93. data/ext/gl/gl-2.1.c +0 -57
  94. data/ext/gl/gl-enums.c +0 -3354
  95. data/ext/gl/gl-error.c +0 -104
  96. data/ext/gl/gl-ext-3dfx.c +0 -27
  97. data/ext/gl/gl-ext-arb.c +0 -866
  98. data/ext/gl/gl-ext-ati.c +0 -41
  99. data/ext/gl/gl-ext-ext.c +0 -890
  100. data/ext/gl/gl-ext-gremedy.c +0 -41
  101. data/ext/gl/gl-ext-nv.c +0 -679
  102. data/ext/gl/gl.c +0 -214
  103. data/ext/gl/mkrf_conf.rb +0 -34
  104. data/ext/glu/glu-enums.c +0 -164
  105. data/ext/glu/glu.c +0 -1530
  106. data/ext/glu/mkrf_conf.rb +0 -35
  107. data/ext/glut/glut.c +0 -1623
  108. data/ext/glut/mkrf_conf.rb +0 -37
  109. data/lib/opengl.rb +0 -84
  110. data/test/README +0 -10
  111. data/test/tc_common.rb +0 -98
  112. data/test/tc_ext_arb.rb +0 -467
  113. data/test/tc_ext_ati.rb +0 -33
  114. data/test/tc_ext_ext.rb +0 -551
  115. data/test/tc_ext_gremedy.rb +0 -36
  116. data/test/tc_ext_nv.rb +0 -357
  117. data/test/tc_func_10_11.rb +0 -1281
  118. data/test/tc_func_12.rb +0 -186
  119. data/test/tc_func_13.rb +0 -229
  120. data/test/tc_func_14.rb +0 -197
  121. data/test/tc_func_15.rb +0 -270
  122. data/test/tc_func_20.rb +0 -346
  123. data/test/tc_func_21.rb +0 -541
  124. data/test/tc_glu.rb +0 -310
  125. data/test/tc_include_gl.rb +0 -35
  126. data/test/tc_misc.rb +0 -54
  127. data/test/tc_require_gl.rb +0 -34
@@ -1,303 +0,0 @@
1
- # Nehe Lesson 36 Code
2
- # modified from immediate mode to use vertex arrays for helix drawing
3
- require 'opengl'
4
- include Gl,Glu,Glut
5
- include Math
6
-
7
- def emptyTexture
8
- # Create Storage Space For Texture Data (128x128x4)
9
- data = ([0]*4*128*128).pack("f*")
10
- txtnumber = glGenTextures(1) # Create 1 Texture
11
- glBindTexture(GL_TEXTURE_2D, txtnumber[0]) # Bind The Texture
12
- glTexImage2D(GL_TEXTURE_2D, 0, 4, 128, 128, 0,
13
- GL_RGBA, GL_FLOAT, data) # Build Texture Using Information In data
14
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
15
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
16
- return txtnumber[0] # Return The Texture ID
17
- end
18
-
19
- def init
20
- global_ambient = [0.2, 0.2, 0.2, 1.0] # Set Ambient Lighting To Fairly Dark Light (No Color)
21
- light0pos = [0.0, 5.0, 10.0, 1.0] # Set The Light Position
22
- light0ambient = [0.2, 0.2, 0.2, 1.0] # More Ambient Light
23
- light0diffuse = [0.3, 0.3, 0.3, 1.0] # Set The Diffuse Light A Bit Brighter
24
- light0specular = [0.8, 0.8, 0.8, 1.0] # Fairly Bright Specular Lighting
25
-
26
- lmodel_ambient = [0.2,0.2,0.2,1.0] # And More Ambient Light
27
-
28
- $angle = 0.0 # Set Starting Angle To Zero
29
-
30
- $lasttime = 0
31
-
32
- $blurTexture = emptyTexture() # Create Our Empty Texture
33
-
34
- $helix_v,$helix_n = createHelix()
35
- glVertexPointer(3,GL_FLOAT,0,$helix_v.flatten.pack("f*"))
36
- glNormalPointer(GL_FLOAT,0,$helix_n.flatten.pack("f*"))
37
-
38
- glLoadIdentity() # Reset The Modelview Matrix
39
-
40
- glEnable(GL_DEPTH_TEST) # Enable Depth Testing
41
-
42
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient) # Set The Ambient Light Model
43
-
44
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT,global_ambient) # Set The Global Ambient Light Model
45
- glLightfv(GL_LIGHT0, GL_POSITION, light0pos) # Set The Lights Position
46
- glLightfv(GL_LIGHT0, GL_AMBIENT, light0ambient) # Set The Ambient Light
47
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light0diffuse) # Set The Diffuse Light
48
- glLightfv(GL_LIGHT0, GL_SPECULAR, light0specular) # Set Up Specular Lighting
49
- glEnable(GL_LIGHTING) # Enable Lighting
50
- glEnable(GL_LIGHT0) # Enable Light0
51
-
52
- glShadeModel(GL_SMOOTH) # Select Smooth Shading
53
-
54
- glMateriali(GL_FRONT, GL_SHININESS, 128)
55
- glClearColor(0.0, 0.0, 0.0, 0.5) # Set The Clear Color To Black
56
- end
57
-
58
- # Keyboard handler to exit when ESC is typed
59
- keyboard = lambda do |key, x, y|
60
- case(key)
61
- when ?\e
62
- exit(0)
63
- end
64
- glutPostRedisplay
65
- end
66
-
67
- reshape = lambda do |w,h|
68
- glMatrixMode(GL_PROJECTION)
69
- glViewport(0,0,w,h)
70
- glLoadIdentity()
71
- width = 0.5
72
- height = 0.5 * h/w;
73
- glFrustum(-width,width,-height,height,1.0,2000.0)
74
- glMatrixMode(GL_MODELVIEW)
75
- glViewport(0,0,w,h)
76
- end
77
-
78
- def viewOrtho
79
- glMatrixMode(GL_PROJECTION) # Select Projection
80
- glPushMatrix() # Push The Matrix
81
- glLoadIdentity() # Reset The Matrix
82
- width = glutGet(GLUT_WINDOW_WIDTH)
83
- height = glutGet(GLUT_WINDOW_HEIGHT)
84
- glOrtho( 0, width , height , 0, -1, 1 ) # Select Ortho Mode (widthxheight)
85
- glMatrixMode(GL_MODELVIEW) # Select Modelview Matrix
86
- glPushMatrix() # Push The Matrix
87
- glLoadIdentity() # Reset The Matrix
88
- end
89
-
90
- def viewPerspective # Set Up A Perspective View
91
- glMatrixMode( GL_PROJECTION ) # Select Projection
92
- glPopMatrix() # Pop The Matrix
93
- glMatrixMode( GL_MODELVIEW ) # Select Modelview
94
- glPopMatrix() # Pop The Matrix
95
- end
96
-
97
- def normalize(v)
98
- len = sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2])
99
- return v if len==0
100
- [ v[0] / len, v[1] / len, v[2] / len ]
101
- end
102
-
103
- def calcNormal(v) # Calculates Normal For A Quad Using 3 Points
104
- # Finds The Vector Between 2 Points By Subtracting
105
- # The x,y,z Coordinates From One Point To Another.
106
- # Calculate The Vector From Point 1 To Point 0
107
- v1, v2, out = [], [], []
108
- x,y,z = 0,1,2
109
-
110
- v1[x] = v[0][x] - v[1][x] # Vector 1.x=Vertex[0].x-Vertex[1].x
111
- v1[y] = v[0][y] - v[1][y] # Vector 1.y=Vertex[0].y-Vertex[1].y
112
- v1[z] = v[0][z] - v[1][z] # Vector 1.z=Vertex[0].y-Vertex[1].z
113
- # Calculate The Vector From Point 2 To Point 1
114
- v2[x] = v[1][x] - v[2][x] # Vector 2.x=Vertex[0].x-Vertex[1].x
115
- v2[y] = v[1][y] - v[2][y] # Vector 2.y=Vertex[0].y-Vertex[1].y
116
- v2[z] = v[1][z] - v[2][z] # Vector 2.z=Vertex[0].z-Vertex[1].z
117
- # Compute The Cross Product To Give Us A Surface Normal
118
- out[x] = v1[y]*v2[z] - v1[z]*v2[y] # Cross Product For Y - Z
119
- out[y] = v1[z]*v2[x] - v1[x]*v2[z] # Cross Product For X - Z
120
- out[z] = v1[x]*v2[y] - v1[y]*v2[x] # Cross Product For X - Y
121
-
122
- normalize(out)
123
- end
124
-
125
- def createHelix() # creates helix VA
126
- twists = 5
127
- r = 1.5
128
-
129
- helix_v = []
130
- helix_n = []
131
-
132
- 0.step(360,20) do |phi| # 360 Degrees In Steps Of 20
133
- 0.step(360*twists,20) do |theta| # 360 Degrees * Number Of Twists In Steps Of 20
134
- v= phi/180.0*PI # Calculate Angle Of First Point ( 0 )
135
- u= theta/180.0*PI # Calculate Angle Of First Point ( 0 )
136
-
137
- x= cos(u)*(2.0+cos(v))*r # Calculate x Position (1st Point)
138
- y= sin(u)*(2.0+cos(v))*r # Calculate y Position (1st Point)
139
- z=((u-(2.0*PI)) + sin(v))*r # Calculate z Position (1st Point)
140
-
141
- v0 = [x,y,z]
142
-
143
- v= phi/180.0*PI # Calculate Angle Of Second Point ( 0 )
144
- u= (theta+20)/180.0*PI # Calculate Angle Of Second Point ( 20 )
145
-
146
- x= cos(u)*(2.0+cos(v))*r # Calculate x Position (2nd Point)
147
- y= sin(u)*(2.0+cos(v))*r # Calculate y Position (2nd Point)
148
- z= ((u-(2.0*PI)) + sin(v))*r # Calculate z Position (2nd Point)
149
-
150
- v1 = [x,y,z]
151
-
152
- v= (phi+20)/180.0*PI # Calculate Angle Of Third Point ( 20 )
153
- u= (theta+20)/180.0*PI # Calculate Angle Of Third Point ( 20 )
154
-
155
- x= cos(u)*(2.0+cos(v))*r # Calculate x Position (3rd Point)
156
- y= sin(u)*(2.0+cos(v))*r # Calculate y Position (3rd Point)
157
- z= ((u-(2.0*PI)) + sin(v))*r # Calculate z Position (3rd Point)
158
-
159
- v2 = [x,y,z]
160
-
161
- v= (phi+20)/180.0*PI # Calculate Angle Of Fourth Point ( 20 )
162
- u= (theta)/180.0*PI # Calculate Angle Of Fourth Point ( 0 )
163
-
164
- x= cos(u)*(2.0+cos(v))*r # Calculate x Position (4th Point)
165
- y= sin(u)*(2.0+cos(v))*r # Calculate y Position (4th Point)
166
- z= ((u-(2.0*PI)) + sin(v))*r # Calculate z Position (4th Point)
167
-
168
- v3 = [x,y,z]
169
-
170
- normal = calcNormal([v0,v1,v2,v3]) # Calculate The Quad Normal
171
- helix_v << v0 << v1 << v2 << v3
172
- helix_n << normal << normal << normal << normal
173
- end
174
- end
175
- [helix_v,helix_n]
176
- end
177
-
178
- def processHelix() # Draws A Helix
179
- glfMaterialColor = [0.4,0.2,0.8,1.0] # Set The Material Color
180
- specular = [1.0,1.0,1.0,1.0] # Sets Up Specular Lighting
181
-
182
- glLoadIdentity() # Reset The Modelview Matrix
183
- gluLookAt(0, 5, 50, 0, 0, 0, 0, 1, 0) # Eye Position (0,5,50) Center Of Scene (0,0,0), Up On Y Axis
184
-
185
- glPushMatrix() # Push The Modelview Matrix
186
-
187
- glTranslatef(0,0,-50) # Translate 50 Units Into The Screen
188
- glRotatef($angle/2.0,1,0,0) # Rotate By angle/2 On The X-Axis
189
- glRotatef($angle/3.0,0,1,0) # Rotate By angle/3 On The Y-Axis
190
-
191
- glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,glfMaterialColor)
192
- glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,specular)
193
-
194
- glEnableClientState(GL_VERTEX_ARRAY)
195
- glEnableClientState(GL_NORMAL_ARRAY)
196
- glDrawArrays(GL_QUADS,0,$helix_v.size)
197
- glDisableClientState(GL_VERTEX_ARRAY)
198
- glDisableClientState(GL_NORMAL_ARRAY)
199
-
200
- glPopMatrix() # Pop The Matrix
201
- end
202
-
203
- def drawBlur(times,inc)
204
- spost = 0.0 # Starting Texture Coordinate Offset
205
- alphainc = 0.9 / times # Fade Speed For Alpha Blending
206
- alpha = 0.2 # Starting Alpha Value
207
-
208
- width = glutGet(GLUT_WINDOW_WIDTH)
209
- height = glutGet(GLUT_WINDOW_HEIGHT)
210
- # Disable AutoTexture Coordinates
211
- glDisable(GL_TEXTURE_GEN_S)
212
- glDisable(GL_TEXTURE_GEN_T)
213
-
214
- glEnable(GL_TEXTURE_2D) # Enable 2D Texture Mapping
215
- glDisable(GL_DEPTH_TEST) # Disable Depth Testing
216
- glBlendFunc(GL_SRC_ALPHA,GL_ONE) # Set Blending Mode
217
- glEnable(GL_BLEND) # Enable Blending
218
- glBindTexture(GL_TEXTURE_2D,$blurTexture) # Bind To The Blur Texture
219
- viewOrtho() # Switch To An Ortho View
220
-
221
- alphainc = alpha / times # alphainc=0.2 / Times To Render Blur
222
-
223
- glBegin(GL_QUADS) # Begin Drawing Quads
224
- 0.upto(times-1) do |num| # Number Of Times To Render Blur
225
- glColor4f(1.0, 1.0, 1.0, alpha) # Set The Alpha Value (Starts At 0.2)
226
- glTexCoord2f(0+spost,1-spost) # Texture Coordinate ( 0, 1 )
227
- glVertex2f(0,0) # First Vertex ( 0, 0 )
228
-
229
- glTexCoord2f(0+spost,0+spost) # Texture Coordinate ( 0, 0 )
230
- glVertex2f(0,height) # Second Vertex ( 0, height )
231
-
232
- glTexCoord2f(1-spost,0+spost) # Texture Coordinate ( 1, 0 )
233
- glVertex2f(width,height) # Third Vertex ( width, height )
234
-
235
- glTexCoord2f(1-spost,1-spost) # Texture Coordinate ( 1, 1 )
236
- glVertex2f(width,0) # Fourth Vertex ( width, 0 )
237
-
238
- spost += inc # Gradually Increase spost (Zooming Closer To Texture Center)
239
- alpha = alpha - alphainc # Gradually Decrease alpha (Gradually Fading Image Out)
240
- end
241
- glEnd() # Done Drawing Quads
242
-
243
- viewPerspective() # Switch To A Perspective View
244
-
245
- glEnable(GL_DEPTH_TEST) # Enable Depth Testing
246
- glDisable(GL_TEXTURE_2D) # Disable 2D Texture Mapping
247
- glDisable(GL_BLEND) # Disable Blending
248
- glBindTexture(GL_TEXTURE_2D,0) # Unbind The Blur Texture
249
- end
250
-
251
-
252
- def renderToTexture
253
- glViewport(0,0,128,128); # Set Our Viewport (Match Texture Size)
254
-
255
- processHelix() # Render The Helix
256
-
257
- glBindTexture(GL_TEXTURE_2D,$blurTexture) # Bind To The Blur Texture
258
-
259
- # Copy Our ViewPort To The Blur Texture (From 0,0 To 128,128... No Border)
260
- glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 0, 0, 128, 128, 0)
261
-
262
- glClearColor(0.0, 0.0, 0.5, 0.5) # Set The Clear Color To Medium Blue
263
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Clear The Screen And Depth Buffer
264
- width = glutGet(GLUT_WINDOW_WIDTH)
265
- height = glutGet(GLUT_WINDOW_HEIGHT)
266
- glViewport(0 , 0,width,height) # Set Viewport (0,0 to widthxheight)
267
- end
268
-
269
- drawGLScene = lambda do # Draw The Scene
270
- glClearColor(0.0, 0.0, 0.0, 0.5) # Set The Clear Color To Black
271
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Clear Screen And Depth Buffer
272
- glLoadIdentity() # Reset The View
273
- renderToTexture() # Render To A Texture
274
- processHelix() # Draw Our Helix
275
- drawBlur(25,0.02) # Draw The Blur Effect
276
- glFlush() # Flush The GL Rendering Pipeline
277
- glutSwapBuffers()
278
- sleep(0.001) # don't hog all cpu time
279
- end
280
-
281
- idle = lambda do
282
- now = glutGet(GLUT_ELAPSED_TIME)
283
- elapsed = now - $lasttime
284
- $angle += (elapsed * 0.03) # Update angle Based On The Clock
285
- $lasttime = now
286
-
287
- glutPostRedisplay()
288
- end
289
-
290
- # Main
291
- glutInit()
292
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
293
- glutInitWindowPosition(100,100)
294
- glutInitWindowSize(640,480)
295
- glutCreateWindow("NeHe's Lesson 36")
296
- glutDisplayFunc(drawGLScene)
297
- glutIdleFunc(idle)
298
- glutReshapeFunc(reshape)
299
- glutKeyboardFunc(keyboard)
300
-
301
- init()
302
-
303
- glutMainLoop()
@@ -1,33 +0,0 @@
1
- Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
2
- All rights reserved.
3
-
4
- Redistribution and use in source and binary forms, with or without
5
- modification, are permitted provided that the following conditions
6
- are met:
7
-
8
- Redistributions of source code must retain the above copyright
9
- notice, this list of conditions and the following disclaimer.
10
-
11
- Redistributions in binary form must reproduce the above
12
- copyright notice, this list of conditions and the following
13
- disclaimer in the documentation and/or other materials provided
14
- with the distribution.
15
-
16
- Neither the name of 3Dlabs Inc. Ltd. nor the names of its
17
- contributors may be used to endorse or promote products derived
18
- from this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23
- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
- COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
- POSSIBILITY OF SUCH DAMAGE.
32
-
33
-
@@ -1,36 +0,0 @@
1
- //
2
- // Fragment shader for procedural bricks
3
- //
4
- // Authors: Dave Baldwin, Steve Koren, Randi Rost
5
- // based on a shader by Darwyn Peachey
6
- //
7
- // Copyright (c) 2002-2004 3Dlabs Inc. Ltd.
8
- //
9
- // See 3Dlabs-License.txt for license information
10
- //
11
-
12
- uniform vec3 BrickColor, MortarColor;
13
- uniform vec2 BrickSize;
14
- uniform vec2 BrickPct;
15
-
16
- varying vec2 MCposition;
17
- varying float LightIntensity;
18
-
19
- void main(void)
20
- {
21
- vec3 color;
22
- vec2 position, useBrick;
23
-
24
- position = MCposition / BrickSize;
25
-
26
- if (fract(position.y * 0.5) > 0.5)
27
- position.x += 0.5;
28
-
29
- position = fract(position);
30
-
31
- useBrick = step(position, BrickPct);
32
-
33
- color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y);
34
- color *= LightIntensity;
35
- gl_FragColor = vec4 (color, 1.0);
36
- }
@@ -1,376 +0,0 @@
1
- # Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
2
- # All rights reserved.
3
- #
4
- # Redistribution and use in source and binary forms, with or without
5
- # modification, are permitted provided that the following conditions
6
- # are met:
7
- #
8
- # Redistributions of source code must retain the above copyright
9
- # notice, this list of conditions and the following disclaimer.
10
- #
11
- # Redistributions in binary form must reproduce the above
12
- # copyright notice, this list of conditions and the following
13
- # disclaimer in the documentation and/or other materials provided
14
- # with the distribution.
15
- #
16
- # Neither the name of 3Dlabs Inc. Ltd. nor the names of its
17
- # contributors may be used to endorse or promote products derived
18
- # from this software without specific prior written permission.
19
- #
20
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23
- # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
- # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
- # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
- # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
- # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
- # POSSIBILITY OF SUCH DAMAGE.
32
- # ===========================================================================
33
- #
34
- #
35
- # The source of the shaders itself are in plain text files. Files ending in
36
- # .vert are vertex shaders, and files ending in .frag are fragment shaders.
37
-
38
- require 'opengl'
39
- include Gl,Glu,Glut
40
-
41
- $rotl = 1 * Math::PI / 180
42
- $last_time = 0
43
-
44
- $fXDiff = 206
45
- $fYDiff = 16
46
- $fZDiff = 10
47
- $xLastIncr = 0
48
- $yLastIncr = 0
49
- $fXInertia = -0.5
50
- $fYInertia = 0
51
- $fXInertiaOld = 0
52
- $fYInertiaOld = 0
53
- $fScale = 1.0
54
- $ftime = 0
55
- $xLast = -1
56
- $yLast = -1
57
- $bmModifiers = 0
58
- $rotate = true
59
-
60
- INERTIA_THRESHOLD = 1.0
61
- INERTIA_FACTOR = 0.5
62
- SCALE_FACTOR = 0.01
63
- SCALE_INCREMENT = 0.5
64
- TIMER_FREQUENCY_MILLIS = 20
65
-
66
-
67
- $gleModel = [:cube, :teapot,:torus,:sphere]
68
- $clearColor = [[0,0,0,1], [0.2,0.2,0.3,1], [0.7,0.7,0.7,1]]
69
-
70
- def drawCube
71
- size = 1.0
72
- scale = 0.2
73
- delta = 0.1
74
-
75
- v = [
76
- [ size, size, size * scale + delta ],
77
- [ size, size, -size * scale + delta ],
78
- [ size, -size, -size * scale ],
79
- [ size, -size, size * scale ],
80
- [-size, size, size * scale + delta ],
81
- [-size, size, -size * scale + delta ],
82
- [-size, -size, -size * scale ],
83
- [-size, -size, size * scale ]
84
- ]
85
-
86
- cube = [
87
- [ [1,0,0], v[3],v[2],v[1],v[0] ], # normal, vertices
88
- [ [-1,0,0], v[6],v[7],v[4],v[5] ],
89
- [ [0,0,-1], v[2],v[6],v[5],v[1] ],
90
- [ [0,0,1], v[7],v[3],v[0],v[4] ],
91
- [ [0,1,0], v[4],v[0],v[1],v[5] ],
92
- [ [0,-1,0], v[6],v[2],v[3],v[7] ]
93
- ]
94
-
95
- glBegin(GL_QUADS)
96
- cube.each do |side|
97
- glNormal3fv(side[0])
98
-
99
- glTexCoord2f(1,1)
100
- glVertex3fv(side[1])
101
- glTexCoord2f(0,1)
102
- glVertex3fv(side[2])
103
- glTexCoord2f(0,0)
104
- glVertex3fv(side[3])
105
- glTexCoord2f(1,0)
106
- glVertex3fv(side[4])
107
- end
108
- glEnd()
109
- end
110
-
111
- def nextClearColor
112
- glClearColor($clearColor[0][0],
113
- $clearColor[0][1],
114
- $clearColor[0][2],
115
- $clearColor[0][3])
116
- $clearColor << $clearColor.shift # rotate
117
- end
118
-
119
-
120
- play = lambda do
121
- this_time = glutGet(GLUT_ELAPSED_TIME)
122
-
123
- $rotl+=(this_time - $last_time) * -0.001
124
- $last_time = this_time
125
-
126
- glutPostRedisplay()
127
- end
128
-
129
- display = lambda do
130
- glLoadIdentity()
131
- glTranslatef(0.0, 0.0, -5.0)
132
-
133
- glRotatef($fYDiff, 1,0,0)
134
- glRotatef($fXDiff, 0,1,0)
135
- glRotatef($fZDiff, 0,0,1)
136
-
137
- glScalef($fScale, $fScale, $fScale)
138
-
139
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
140
-
141
- case $gleModel[0]
142
- when :teapot :
143
- glutSolidTeapot(0.6)
144
- when :torus :
145
- glutSolidTorus(0.2, 0.6, 64, 64)
146
- when :sphere :
147
- glutSolidSphere(0.6, 64, 64)
148
- when :cube :
149
- drawCube()
150
- end
151
- glFlush()
152
- glutSwapBuffers()
153
- end
154
-
155
- key = lambda do |key,x,y|
156
- case(key)
157
- when ?b
158
- nextClearColor()
159
- when ?q, ?\e # esc
160
- exit(0)
161
- when ?t
162
- $gleModel << $gleModel.shift # rotate the array
163
- when ?\s # space
164
- $rotate = !$rotate
165
-
166
- if ($rotate==false)
167
- $fXInertiaOld = $fXInertia
168
- $fYInertiaOld = $fYInertia
169
- else
170
- $fXInertia = $fXInertiaOld
171
- $fYInertia = $fYInertiaOld
172
-
173
- # To prevent confusion, force some rotation
174
- if ($fXInertia == 0 && $fYInertia == 0)
175
- $fXInertia = -0.5
176
- end
177
- end
178
- when ?+
179
- $fScale += SCALE_INCREMENT
180
- when ?-
181
- $fScale -= SCALE_INCREMENT
182
- else
183
- puts "Keyboard commands:\n"
184
- puts "b - Toggle among background clear colors"
185
- puts "q, <esc> - Quit"
186
- puts "t - Toggle among models to render"
187
- puts "? - Help"
188
- puts "<home> - reset zoom and rotation"
189
- puts "<space> or <click> - stop rotation"
190
- puts "<+>, <-> or <ctrl + drag> - zoom model"
191
- puts "<arrow keys> or <drag> - rotate model\n"
192
- end
193
- end
194
-
195
- reshape = lambda do |w,h|
196
- vp = 0.8
197
- aspect = w.to_f/h.to_f
198
-
199
- glViewport(0, 0, w, h)
200
- glMatrixMode(GL_PROJECTION)
201
- glLoadIdentity()
202
-
203
- glFrustum(-vp, vp, -vp / aspect, vp / aspect, 3, 10)
204
-
205
- glMatrixMode(GL_MODELVIEW)
206
- glLoadIdentity()
207
- glTranslatef(0.0, 0.0, -5.0)
208
- end
209
-
210
- motion = lambda do |x,y|
211
- if ($xLast != -1 || $yLast != -1)
212
- $xLastIncr = x - $xLast
213
- $yLastIncr = y - $yLast
214
- if ($bmModifiers & GLUT_ACTIVE_CTRL != 0)
215
- if ($xLast != -1)
216
- $fZDiff += $xLastIncr
217
- $fScale += $yLastIncr*SCALE_FACTOR
218
- end
219
- else
220
- if ($xLast != -1)
221
- $fXDiff += $xLastIncr
222
- $fYDiff += $yLastIncr
223
- end
224
- end
225
- end
226
- $xLast = x
227
- $yLast = y
228
- end
229
-
230
- mouse = lambda do |button,state,x,y|
231
- $bmModifiers = glutGetModifiers()
232
- if (button == GLUT_LEFT_BUTTON)
233
- if (state == GLUT_UP)
234
- $xLast = -1
235
- $yLast = -1
236
- if $xLastIncr > INERTIA_THRESHOLD
237
- $fXInertia = ($xLastIncr - INERTIA_THRESHOLD)*INERTIA_FACTOR
238
- end
239
- if -$xLastIncr > INERTIA_THRESHOLD
240
- $fXInertia = ($xLastIncr + INERTIA_THRESHOLD)*INERTIA_FACTOR
241
- end
242
-
243
- if $yLastIncr > INERTIA_THRESHOLD
244
- $fYInertia = ($yLastIncr - INERTIA_THRESHOLD)*INERTIA_FACTOR
245
- end
246
- if -$yLastIncr > INERTIA_THRESHOLD
247
- $fYInertia = ($yLastIncr + INERTIA_THRESHOLD)*INERTIA_FACTOR
248
- end
249
- else
250
- $fXInertia = 0
251
- $fYInertia = 0
252
- end
253
- $xLastIncr = 0
254
- $yLastIncr = 0
255
- end
256
- end
257
-
258
- special = lambda do |key,x,y|
259
- case key
260
- when GLUT_KEY_HOME:
261
- $fXDiff = 0
262
- $fYDiff = 35
263
- $fZDiff = 0
264
- $xLastIncr = 0
265
- $yLastIncr = 0
266
- $fXInertia = -0.5
267
- $fYInertia = 0
268
- $fScale = 1.0
269
- when GLUT_KEY_LEFT:
270
- $fXDiff -= 1
271
- when GLUT_KEY_RIGHT:
272
- $fXDiff += 1
273
- when GLUT_KEY_UP:
274
- $fYDiff -= 1
275
- when GLUT_KEY_DOWN:
276
- $fYDiff += 1
277
- end
278
- end
279
-
280
- timer = lambda do |value|
281
- $ftime += 0.01
282
- if $rotate
283
- $fXDiff += $fXInertia
284
- $fYDiff += $fYInertia
285
- end
286
- glutTimerFunc(TIMER_FREQUENCY_MILLIS , timer, 0)
287
- end
288
-
289
- def getUniLoc(program, name)
290
- loc = glGetUniformLocation(program, name)
291
-
292
- if (loc == -1)
293
- puts "No such uniform named #{name}"
294
- end
295
- return loc
296
- end
297
-
298
- def installBrickShaders(vs_fname,fs_fname)
299
- # Create a vertex shader object and a fragment shader object
300
- brickVS = glCreateShader(GL_VERTEX_SHADER)
301
- brickFS = glCreateShader(GL_FRAGMENT_SHADER)
302
-
303
- # Load source code strings into shaders
304
- glShaderSource(brickVS, File.read(vs_fname))
305
- glShaderSource(brickFS, File.read(fs_fname))
306
-
307
- # Compile the brick vertex shader, and print out
308
- # the compiler log file.
309
- glCompileShader(brickVS)
310
- vertCompiled = glGetShaderiv(brickVS, GL_COMPILE_STATUS)
311
- puts "Shader InfoLog:\n#{glGetShaderInfoLog(brickVS)}\n"
312
-
313
- # Compile the brick fragment shader, and print out
314
- # the compiler log file.
315
- glCompileShader(brickFS)
316
- fragCompiled = glGetShaderiv(brickFS, GL_COMPILE_STATUS)
317
- puts "Shader InfoLog:\n#{glGetShaderInfoLog(brickFS)}\n"
318
-
319
- return false if (vertCompiled == 0 || fragCompiled == 0)
320
- # Create a program object and attach the two compiled shaders
321
- brickProg = glCreateProgram()
322
- glAttachShader(brickProg,brickVS)
323
- glAttachShader(brickProg,brickFS)
324
- # Link the program object and print out the info log
325
- glLinkProgram(brickProg)
326
- linked = glGetProgramiv(brickProg,GL_LINK_STATUS)
327
- puts "Program InfoLog:\n#{glGetProgramInfoLog(brickProg)}\n"
328
- return false if linked==0
329
-
330
- # Install program object as part of current state
331
- glUseProgram(brickProg)
332
-
333
- # Set up initial uniform values
334
- glUniform3f(getUniLoc(brickProg, "BrickColor"), 1.0, 0.3, 0.2)
335
- glUniform3f(getUniLoc(brickProg, "MortarColor"), 0.85, 0.86, 0.84)
336
- glUniform2f(getUniLoc(brickProg, "BrickSize"), 0.30, 0.15)
337
- glUniform2f(getUniLoc(brickProg, "BrickPct"), 0.90, 0.85)
338
- glUniform3f(getUniLoc(brickProg, "LightPosition"), 0.0, 0.0, 4.0)
339
-
340
- return true
341
- end
342
-
343
- # Main
344
-
345
- glutInit()
346
- glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE)
347
- glutInitWindowPosition(100,100)
348
- glutInitWindowSize(500, 500)
349
- glutCreateWindow( "3Dlabs Brick Shader")
350
-
351
- glutIdleFunc(play)
352
- glutDisplayFunc(display)
353
- glutKeyboardFunc(key)
354
- glutReshapeFunc(reshape)
355
- glutMotionFunc(motion)
356
- glutMouseFunc(mouse)
357
- glutSpecialFunc(special)
358
- glutTimerFunc(TIMER_FREQUENCY_MILLIS , timer, 0)
359
-
360
- # Make sure that OpenGL 2.0 is supported by the driver
361
- if Gl.is_available?(2.0)==false
362
- major,minor,*rest = glGetString(GL_VERSION).split(/\.| /)
363
- puts "GL_VERSION major=#{major} minor=#{minor}"
364
- puts "Support for OpenGL 2.0 is required for this demo...exiting"
365
- exit(1)
366
- end
367
-
368
- glDepthFunc(GL_LESS)
369
- glEnable(GL_DEPTH_TEST)
370
-
371
- nextClearColor()
372
-
373
- key.call('?', 0, 0)
374
-
375
- success = installBrickShaders("brick.vert","brick.frag")
376
- glutMainLoop() if success == true