BasicGL for Blitz

Blitz3D Forums/Blitz3D Programming/BasicGL for Blitz

Here's the Terrain Demo without the LOD popping.

;###################################################################
;                                                              
;                 		Basic GL For BlitzBasic © 2004               
;  		Creator: Albert Khakimov (arkon)  arkon@...             
;  		Support: Korolyov Sergey (ventru) ventrual@...          					      
;  		Sample:Terrain                                              								      
;	  	Version: 0.2                                              									  						
; 	 	Date: 15.11.04                 
;                             									                        										
;###################################################################


Include "../../Constants.bb"
Include "../../keycodes.bb"

Global pMode
Global MatLib, Mat_1, Mat_2
Global Camera, Camera_PV, Light
Global Terrain, Terrain_Map


;3d Graphics initialization
gInitGraphics(640, 480, 32, 0, 0)
    
gCreateText 1, 18, "Press F2 to set polygon mode", 0, 0, 0, 0

;M A T E R I A L S
;------------------------------------------------------------------------
MatLib = gCreateMaterialLib()
Mat_1 = gAddMaterial(MatLib, "snow", "../../media/terrain/snow512.jpg")
Mat_2 = gAddMaterial(MatLib, "detailmap", "../../media/terrain/detailmap.jpg")
gSetTexture2Name Mat_1, "detailmap"
gSetTextureScale Mat_2, 128, 128, 128
gSetBlendingMode Mat_2, 1
gSetDiffuse Mat_1, 1, 1, 1, 1
    
;S C E N E
;------------------------------------------------------------------------
;Set back color
gBackColor 0.4,0.6,0.8
;Ebable fog
gEnableFog 1
gFogEnd 500
gFogColor 0.8,0.8,0.8
;Create Camera
Camera = gDefaultCamera()
gSetPosition Camera, 0, 25, 0
gSetDepthOfView Camera, 800
;Camera Pivot
Camera_PV = gCreateDummy(0)
gSetParent Camera, Camera_PV
gPitch Camera, -15
;Create Light
Light = gCreateLight(0)
gLightStyle Light, 0
gSetPosition Light, 0, 50, 0
gSetParent Light, Camera_PV

;T E R R A I N
;------------------------------------------------------------------------
gCreateCube(1, 1, 1, 0)
Terrain_Map = gCreateHDSBitmap("../../media/terrain/map.bmp", 1)
gHDSBitmapPoolSize Terrain_Map, 1024 * 1024 * 8
Terrain = gCreateTerrain(0)
gPitch Terrain, 90
gTerrainScale Terrain, 2, 2, 0.2
gTerrainHDS Terrain, Terrain_Map
gTerrainTileSize Terrain, 32
gTerrainTilesPerTexture Terrain, 256 / 32
gObjectMaterial Terrain, MatLib, "snow"   
gTerrainMaxCLODTriangles terrain,10000
gTerrainQualityDistance terrain,400
                       

While gKeyHit(KEY_ESCAPE) = 0 And gProgress() = 1

	If gKeyHit(KEY_F2) = 1
            	;Polygon mode
            	pMode = pMode + 1
            	If pMode > 2 Then pMode = 0
            	gSetPolygonMode Mat_1, pMode    
	End If
	
	;Move Camera
	newTime# = gGetNewTime() * 50	
	deltaTime# = gGetDeltaTime()
    	gMove Camera_PV, -deltaTime# * 60
    	x# = gGetX(Camera_PV)
    	y# = gGetY(Camera_PV)
    	z# = gGetZ(Camera_PV)
    	ty# = gGetTerrainHeight(Terrain, x#, y#, z#)
   	y# = y# + ((ty# + 20) - y#) * deltaTime# * 10
    	If y# < ty# + 5 Then y# = ty# + 5
   	gSetPosition Camera_PV, x#, y#, z#
    	gSetRotation Camera_PV, 0, Cos(newTime# / 4.0) * 60, 0      	      

Wend

gCloseGraphics()