building 3d terrain editor Your Ideas welcome

Blitz3D Forums/Blitz3D Programming/building 3d terrain editor Your Ideas welcome

binary Editor with lod tiles

Graphics3D 1024,768,32,1

ClearWorld(1,1,1)

Global Player=CreateSphere(32)
PositionEntity player,4,4,4
Global MAPRANGE=50;CHANGES THE NUMBER OF TERRAINS IN VIEW
Global brush,cam
Global Maxheight=20;change max height

cam=CreateCamera()
lgt=CreateLight(2)
LightRange lgt,200
PositionEntity cam,10,5,10
RotateEntity cam,0,45,0
CameraRange cam,1,1000
brush=LoadBrush("grass1.png");PLACE ANY TEXTURE HERE
;BrushFX brush,1
Dim Vertx#(11,11)
Dim Verty#(11,11)
Dim Vertz#(11,11)
Dim Maparray.Map_area(100)

Type Map_tile
    Field Maptile
	Field Active
	Field tile_id[100]
	Field Brush_id[100]
	Field tilex
	Field tiley
	Field tilez
End Type

Type Map_Segm
	Field Active
	Field Maptile.Map_tile[10000]
End Type

Type Map_sect
	Field Active
	Field Mapsegm.Map_segm[100]
End Type

Type Map_area
    Field Active
	Field Mapsect.Map_sect[100]
End Type

For times4=1 To 10
maparray(times4)=New Map_area
For times3=1 To 10
maparray(times4)\mapsect[times3]=New map_sect
For times2=1 To 10
maparray(times4)\mapsect[times3]\mapsegm[times2]=New Map_Segm
For times=1 To 100
maparray(times4)\mapsect[times3]\mapsegm[times2]\maptile[times]=New Map_tile
maparray(times4)\mapsect[times3]\mapsegm[times2]\maptile[times]\active=1
Next
Next
Next
Next


For tiles=1 To 100
read_Maptile(tiles)
log_maptile(tiles)
create_maptile(tiles)
Next
tiles=0


For x=1 To 10
For z=1 To 10
tiles=tiles+1
PositionEntity maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\maptile,x*10,0,z*10
Next
Next

;create_skybox()
Print maparray(1)\mapsect[1]\mapsegm[1]\maptile[1]\tile_id[32]

While Not KeyHit(1)
If KeyDown(200) Then MoveEntity cam,0,0,.02
If KeyDown(208) Then MoveEntity cam,0,0,-.02
If KeyDown(203) Then TurnEntity cam,0,.05,0
If KeyDown(205) Then TurnEntity cam,0,-.05,0
EntityParent lgt,cam 
Hide_it
UpdateWorld
RenderWorld


Flip 0
Wend
End



.Sector1
Data 3,3,2,1,1,1,1,2,3,3
Data 3,3,2,1,1,1,1,2,3,3
Data 2,2,2,1,1,1,1,2,2,2
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 2,2,2,1,1,1,1,2,2,2
Data 3,3,2,1,1,1,1,2,3,3
Data 3,3,2,1,1,1,1,2,3,3


Function Read_Maptile(tiles)
Restore Sector1
For times=1 To 100
Read maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\tile_id[times]
maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\tile_id[times]=maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\tile_id[times]
Next
End Function

Function log_maptile(tiles)
For high=1 To Maxheight
times=0
For x=1 To 10
For z=1 To 10
times=times+1
If maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\tile_id[times]=high Then 
vertx#(x,z)=-6+x
verty#(x,z)=high/2-1
vertz#(x,z)=-6+z
vertx#(x,z+1)=-6+x
verty#(x,z+1)=high/2-1
vertz#(x,z+1)=-6+z+1
vertx#(x+1,z+1)=-6+x+1
verty#(x+1,z+1)=high/2-1
vertz#(x+1,z+1)=-6+z+1
vertx#(x+1,z)=-6+x+1
verty#(x+1,z)=high/2-1
vertz#(x+1,z)=-6+z
EndIf
Next
Next
Next
End Function

Function create_maptile(tiles)
maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\maptile=CreateMesh()
surf=CreateSurface(maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\maptile,brush)
For x=1 To 10
For z=1 To 10
v1=AddVertex (surf,vertx#(x,z),verty#(x,z),vertz#(x,z),0,0)
v2=AddVertex (surf,vertx#(x,z+1),verty#(x,z+1),vertz#(x,z+1),0,1)
v3=AddVertex (surf,vertx#(x+1,z+1),verty#(x+1,z+1),vertz#(x+1,z+1),1,1)
v4=AddVertex (surf,vertx#(x+1,z),verty#(x+1,z),vertz#(x+1,z),1,0)
t1=AddTriangle(surf,v1,v2,v3)
t2=AddTriangle(surf,v3,v4,v1)
Next
Next
UpdateNormals maparray(1)\mapsect[1]\mapsegm[1]\maptile[tiles]\maptile
End Function

Function Hide_it()
For times=1 To 100
If EntityDistance(maparray(1)\mapsect[1]\mapsegm[1]\maptile[times]\maptile,cam)>maprange Then 
HideEntity maparray(1)\mapsect[1]\mapsegm[1]\maptile[times]\maptile
EndIf
If EntityDistance(maparray(1)\mapsect[1]\mapsegm[1]\maptile[times]\maptile,cam)<maprange Then 
ShowEntity maparray(1)\mapsect[1]\mapsegm[1]\maptile[times]\maptile
EndIf
Next
End Function

Function create_skybox()
    mesh = CreateMesh()

    ;front face
    brush = LoadBrush("front.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,-1,+1,-1,0,0
    AddVertex surface,+1,+1,-1,1,0
    AddVertex surface,+1,-1,-1,1,1
    AddVertex surface,-1,-1,-1,0,1
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush

    ;right face
    brush = LoadBrush("right.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,+1,+1,-1,0,0
    AddVertex surface,+1,+1,+1,1,0
    AddVertex surface,+1,-1,+1,1,1
    AddVertex surface,+1,-1,-1,0,1
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush

    ;back face
    brush = LoadBrush("back.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,+1,+1,+1,0,0
    AddVertex surface,-1,+1,+1,1,0
    AddVertex surface,-1,-1,+1,1,1
    AddVertex surface,+1,-1,+1,0,1
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush
 
    ;left face
    brush = LoadBrush("left.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,-1,+1,+1,0,0
    AddVertex surface,-1,+1,-1,1,0
    AddVertex surface,-1,-1,-1,1,1
    AddVertex surface,-1,-1,+1,0,1
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush

    ;top face
    brush = LoadBrush("top.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,-1,+1,+1,0,1
    AddVertex surface,+1,+1,+1,0,0
    AddVertex surface,+1,+1,-1,1,0
    AddVertex surface,-1,+1,-1,1,1
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush
   
    ;bottom face 
    brush = LoadBrush("bottom.jpg",49)
    surface = CreateSurface(mesh,brush)
    AddVertex surface,-1,-1,-1,1,0
    AddVertex surface,+1,-1,-1,1,1
    AddVertex surface,+1,-1,+1,0,1
    AddVertex surface,-1,-1,+1,0,0
    AddTriangle surface,0,1,2
    AddTriangle surface,0,2,3
    FreeBrush brush
    
    ScaleMesh mesh,200,200,200
    FlipMesh mesh
    EntityFX mesh,1 ; make fullbright
    Return mesh
    UpdateNormals mesh
End Function



arrow keys move camera

editing the binary data within sector1 changes the map detail by raising quads