gambas-source-code/app/examples/OpenGL/NeHeTutorial/.src/Example11.module
Benoît Minisini c6a9cd69c2 [EXAMPLES]
* NEW: Add examples again. I hope correctly this time.


git-svn-id: svn://localhost/gambas/trunk@6726 867c0c6c-44f3-4631-809d-bfa615b0a4ec
2014-12-12 19:58:52 +00:00

157 lines
4.8 KiB
Text

' Gambas module file
'tutorial based on tutorial from NeHe Productions site at http://nehe.gamedev.net/
'visit the page for more info on OpenGL
'
'This tutorial shows how to apply texture to the moving surface.
Const piover180 As Float = 0.0174532925
Private screen As New Window(True) As "Screen"
Private xrot As Float 'X Rotation
Private yrot As Float 'Y Rotation
Private zrot As Float 'Z Rotation
Private points As New Float[46, 46, 3]
Private wiggle_count As Integer = 0
Private texture As New Integer[1] 'storage FOR one texture
Private LightAmbient As Float[]
Private LightDiffuse As Float[]
Private LightPosition As Float[]
Private light As Integer = 0
Public Sub Main()
Randomize
With screen
.Width = 640
.Height = 400
.Title = MMain.Title
.Show()
End With
End
Public Sub Screen_Open()
Gl.ClearDepth(100.0) 'Enables Clearing Of The Depth Buffer
gl.ClearColor(0.0, 0.0, 0.0, 0.0) 'This Will Clear The Background Color To Black
gl.DepthFunc(gl.LESS) 'The Type Of Depth Test To Do
gl.Enable(gl.DEPTH_TEST) 'Enables Depth Testing
gl.ShadeModel(gl.SMOOTH) 'Enables Smooth Color Shading
init()
End
Public Sub Screen_resize()
Gl.Viewport(0, 0, Screen.Width, Screen.Height)
Gl.MatrixMode(Gl.PROJECTION)
Gl.LoadIdentity() 'Reset The Projection Matrix
glu.Perspective(45.0, screen.Width / screen.Height, 0.1, 100.0) 'Calculate The Aspect Ratio Of The Window
Gl.MatrixMode(Gl.MODELVIEW)
gl.Enable(gl.BLEND)
End
Public Sub load_texture()
Dim starr As Image
Dim egs As Boolean
starr = Image.Load("glass.png")
texture = Gl.GenTextures(1)
Gl.BindTexture(Gl.TEXTURE_2D, texture[0]) '2d texture (x and y size)
'scale linearly when image smalled than texture
Gl.TexParameteri(Gl.TEXTURE_2D, Gl.TEXTURE_MIN_FILTER, Gl.LINEAR)
'scale linearly when image bigger than texture
Gl.TexParameteri(Gl.TEXTURE_2D, Gl.TEXTURE_MAG_FILTER, Gl.LINEAR)
Gl.TexImage2D(starr)
End
Public Sub init()
Dim lops As Integer
Dim float_x, float_y As Float 'loop counters.
load_texture()
gl.Enable(gl.TEXTURE_2D) ' Enable Texture Mapping
gl.ClearColor(0.0, 0.0, 1.0, 0.0) ' Black Background
gl.ClearDepth(1.0)
gl.DepthFunc(gl.LESS) ' Depth Buffer Setup
gl.enable(gl.DEPTH_TEST)
gl.ShadeModel(gl.SMOOTH) ' Enable Smooth Shading
gl.MatrixMode(gl.PROJECTION)
gl.LoadIdentity() 'Reset The Projection Matrix
glu.Perspective(45.0, screen.Width / screen.Height, 0.1, 100.0) 'Calculate The Aspect Ratio Of The Window
gl.MatrixMode(gl.MODELVIEW)
For float_x = 0.0 To 9.0 Step 0.2
For float_y = 0.0 To 9.0 Step 0.2
points[Round(float_x * 5), Round(float_y * 5), 0] = float_x - 4.4
points[Round(float_x * 5), Round(float_y * 5), 1] = float_y - 4.4
points[Round(float_x * 5), Round(float_y * 5), 2] = Sin(((float_x * 5 * 8) / 360) * Pi * 2)
Next
Next
End
Public Sub Screen_draw()
Dim x, y As Integer
Dim float_x, float_y, float_xb, float_yb As Float
gl.clear(gl.COLOR_BUFFER_BIT Or gl.DEPTH_BUFFER_BIT) 'Clear The Screen And The Depth Buffer
gl.LoadIdentity() 'Reset The View
gl.Translatef(0.0, 0.0, -12.0) 'MOVE 12 units into the screen.
gl.BindTexture(gl.TEXTURE_2D, texture[0]) 'Choose the texture TO use.
gl.PolygonMode(gl.BACK, gl.FILL) 'Back Face Is Filled In
gl.PolygonMode(gl.FRONT, gl.LINE) 'Front Face Is Drawn With Lines
gl.Rotatef(180, 0, 0, 1)
gl.Begin(gl.QUADS)
For x = 0 To 43
For y = 0 To 43
float_x = x / 44
float_y = y / 44
float_xb = (x + 1) / 44
float_yb = (y + 1) / 44
gl.TexCoord2f(float_x, float_y)
gl.Vertex3f(points[x, y, 0], points[x, y, 1], points[x, y, 2])
gl.TexCoord2f(float_x, float_yb)
gl.Vertex3f(points[x, y + 1, 0], points[x, y + 1, 1], points[x, y + 1, 2])
gl.TexCoord2f(float_xb, float_yb)
gl.Vertex3f(points[x + 1, y + 1, 0], points[x + 1, y + 1, 1], points[x + 1, y + 1, 2])
gl.TexCoord2f(float_xb, float_y)
gl.Vertex3f(points[x + 1, y, 0], points[x + 1, y, 1], points[x + 1, y, 2])
Next
Next
gl.End()
If (wiggle_count = 4) Then 'cycle the sine values
For y = 0 To 44
points[44, y, 2] = points[0, y, 2]
Next
For x = 0 To 43
For y = 0 To 44
points[x, y, 2] = points[x + 1, y, 2]
Next
Next
wiggle_count = 0
Endif
wiggle_count += 1
xrot += 0.3
yrot += 0.02
zrot += 0.04
End
Public Sub Screen_keyPress()
If (key.code = key.F1) Then screen.Fullscreen = Not screen.Fullscreen
If (key.Code = key.Esc) Then Screen.Close()
End