This is the code I ended up with after making the modifications I mentioned above:
main.bmx
Chris
main.bmx
Strict Framework brl.blitzgl Import brl.pngloader Import brl.system Import brl.linkedlist Import brl.random Include "terrain.bmx" Global TWidth:Int Global THeight:Int Global SWidth:Int = 800 Global SHeight:Int = 600 Global SDepth:Int = 32 glSetup() Global Test = TTerrain.Create(0,0) Function glSetup() bglCreateContext( SWidth, SHeight, SDepth, 0, BGL_BACKBUFFER | BGL_DEPTHBUFFER ) glViewport(0,0,SWidth,SHeight) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0,Float(SWidth)/Float(SHeight),0.1,100.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glShadeModel(GL_NICEST) glClearColor(0.0,0.0,0.0,0.0) glClearDepth(1.0) glEnable(GL_DEPTH_TEST) glDepthFunc(GL_LEQUAL) glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) Return True End Function Function glRender() Repeat glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() For Terrain:TTerrain = EachIn TerrainList Terrain.Render() Next FlushMem bglSwapBuffers Until KeyHit(KEY_ESCAPE) End End Function glRender()terrain.bmx
Global Terrain:TTerrain Global TerrainList:TList = CreateList() Const TERRAIN_STEP = 16 Const TERRAIN_SIZE = 255 Const TERRAIN_SCALE = 16 Type TTerrain Field X:Float, Z:Float Field Height:Float[255,255] Field ID:Int Field HeightMap:TPixmap Method Render() 'glTranslatef(Terrain.X, 1.0, Terrain.Z) glTranslatef(Terrain.X-TERRAIN_SIZE/2.0,-60.0,Terrain.Z-TERRAIN_SIZE/2.0) For Local xx = 0 To (TERRAIN_SIZE-TERRAIN_SCALE)-1 Step TERRAIN_STEP glBegin(GL_TRIANGLE_STRIP) For Local zz = 0 To (TERRAIN_SIZE-TERRAIN_SCALE)-1 Step TERRAIN_STEP glVertex3f(xx+TERRAIN_SCALE,Terrain.Height[xx+TERRAIN_SCALE,zz],zz) glVertex3f(xx,Terrain.Height[xx,zz],zz) Next glEnd() Next End Method Function Create:Int(xx:Int, zz:Int) Terrain:TTerrain = New TTerrain Terrain.X = xx Terrain.Z = zz Terrain.ID = Terrain.ID + 1 For Local xxx = 0 To TERRAIN_SIZE-1 For Local zzz = 0 To TERRAIN_SIZE-1 Terrain.Height[xxx,zzz] = Rnd(50) Next Next ListAddLast(TerrainList,Terrain) Return Terrain.ID End Function Function Load:Int(file:String, xx:Int, zz:Int) Terrain:TTerrain = New TTerrain Terrain.X = xx Terrain.Z = zz Terrain.ID = Terrain.ID + 1 Terrain.HeightMap = LoadPixmap(file) For Local xxx = 0 To TERRAIN_SIZE-1 For Local zzz = 0 To TERRAIN_SIZE-1 Terrain.Height[xxx,zzz] = ReadPixel(Terrain.HeightMap,xxx,zzz) Next Next ListAddLast(TerrainList,Terrain) Return Terrain.ID End Function End TypeHope that helps,
Chris