Grid meshes

Blitz3D Forums/Blitz3D Programming/Grid meshes

Baystep Productions(Posted 2005) [#1]
Any ideas on how to make a grid mesh that I can "deform" in game. Speed is hardly important. It's just, I want to level a terrain in a certain area when something is built on it. IE: A house gets built, so make the land its on flat.


Banshee(Posted 2005) [#2]
You could use this method: http://www.blitzbasic.com/Community/posts.php?topic=52387

Or alternatively you can construct a terrain manually using vertices by laying them out in a grid and stitching polygons inbetween the vertices - you could use the above example as a meens to learn how to do that.


puki(Posted 2005) [#3]
You could create the mesh in a 3D package or internally using Blitz's own mesh/vertex commands.

You can dynamically deform it by calling a function to count the surfaces in the mesh to then 'GetSurface' the mesh to a new surface, count the vertices then loop the vertices and deform as and where you like.

Knowing which vertices to flatten will be the only thing you really need to work out.


puki(Posted 2005) [#4]
The actual mesh:

; Top bit added by puki (for demonstration purposes) - 1/11/04
Graphics3D 640,480,16,2

cam=CreateCamera()
PositionEntity cam,0,0,2

; set the size of Ziltch's square, now use it as a normal entity
; so, as Ziltch said, it is scaleable.
ground=createsquare(25)

PointEntity cam,ground

While KeyHit(1)=0

TurnEntity ground,1,0,0

RenderWorld
Flip

Wend
End

;===================================================================

Function createsquare(segs#=2,parent=0)
; by ADAmor Ziltch. Oct 2002
; v2 Feb 2003
;v3  may 2003 fixed rounding bug

    mesh=CreateMesh( parent )
    surf=CreateSurface( mesh )

    l# =-.5
    b# = -.5
    tvc= 0

    ;create all the vertices first
    Repeat
      u# = l + .5
      v# = b + .5
      AddVertex surf,l,0,b,u,1-v
      tvc=tvc + 1
      l = l + 1/segs
      If l > .501 Then
        l = -.5
        b = b + 1/segs
      End If
    Until b > .5

    ;create polys
    vc# =0
    Repeat

      AddTriangle (surf,vc,vc+segs+1,vc+segs+2)
      AddTriangle (surf,vc,vc+segs+2,vc+1)

      vc = vc + 1
      tst# =  ((vc+1) /(segs+1)) -Floor ((vc+1) /(segs+1))

      If (vc > 0) And (tst=0) Then
        vc = vc + 1
      End If

    Until vc=>tvc-segs-2
    UpdateNormals mesh
    Return mesh


End Function