tile based terrain system
Blitz3D Forums/Blitz3D Programming/tile based terrain system
| ||
hey all, im making a tile based system, so that i can have roads on maps and stuff. Im currently using the following code to do it:
Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()
AntiAlias 1
Type map
Field width, height
Field t.tile
Field tsize
End Type
Type tile
Field brush, index
Field r, g, b
Field isOver
End Type
text1 = LoadTexture("images/text1.png")
text2 = LoadTexture("images/text2.png")
m.map = New map
m\tsize = 1
m\width = 4
m\height = 4
index = 0
Restore map
For i = 0 To (m\height - 1)
For i2 = 0 To (m\width - 1)
m\t.tile = New tile
m\t\index = index
m\t\brush = CreateBrush()
Read what
Select what
Case 1 BrushTexture m\t\brush, text1
Case 2 BrushTexture m\t\brush, text2: m\t\isOver = True
End Select
index = index + 1
Next
Next
Global terr1 = Terr_Create(m)
ScaleMesh terr1, 10, 1, 10
Global cam = CreateCamera()
MoveEntity cam, 0, 50, 0
PointEntity cam, terr1
RenderWorld: Flip
WaitKey
End
Function Terr_Create(m.map)
Local mesh, u#, v#, stp#, z#, x#, h1#, h2#, h3#, h4#, br, surf, cnt, index, texture
tilex = m\width
tilez = m\height
mesh=CreateMesh()
u#=0
v#=0
stp#=m\tsize/Float(tilex)
index = 0
For z#=0 To tilez-1
u=0
For x#=0 To tilex-1
h1#=0
h2#=0
h3#=0
h4#=0
For m\t.tile = Each tile
If m\t\index = index
surf=FindSurface( mesh,m\t\brush ) ; Find a surface in the mesh that contains the same brush
If surf=0 surf=CreateSurface(mesh,m\t\brush) ; If it can't find one create a new surface
Exit
EndIf
Next
If surf = 0
surf = CreateSurface(mesh)
EndIf
cnt=CountVertices( surf ) ; Get count of vertices
;Add vertices including tile coords
AddVertex surf,x,h1,z,0,0
AddVertex surf,x+m\tsize,h2,z,1,0
AddVertex surf,x+m\tsize,h3,z+m\tsize,1,1
AddVertex surf,x,h4,z+m\tsize,0,1
;Add second set of tex coords to fit grid
VertexTexCoords surf,cnt,u,v,0,1
VertexTexCoords surf,cnt+1,u+stp,v,0,1
VertexTexCoords surf,cnt+2,u+stp,v+stp,0,1
VertexTexCoords surf,cnt+3,u,v+stp,0,1
;Finally add the two triangles
AddTriangle surf,cnt,cnt+2,cnt+1
AddTriangle surf,cnt,cnt+3,cnt+2
u=u+stp
index = index + 1
Next
v=v+stp
Next
UpdateNormals mesh
;CenterMesh(mesh)
Return mesh
End Function
.map
Data 1,2,1,1
Data 1,2,1,1
Data 1,2,2,2
Data 1,1,1,1
it generates a terrain mesh all fine and dandy, but the actual tiles are to 'distinct' how can i make it so that the grass and the path blur into each other? the only awy i can think of doing it is by making an animated texture that had lots of frames for directions of the path, with a blur alpha map sort of. then i could multitexture using the alpha mask. surely there is a quicker way of doing this however? thanks all, aCiD2 |