Well, I think that is the best way. However, you could easily make a mesh that fits on a terrain using TerrainY(). First, design the add-on for the terrain in a 3d editor as a flat shape. Then, in blitz, loop through all the vertices and place them on the terrain.
Here is the code from my attempt, it loads the same terrain three times.
Here is the code from my attempt, it loads the same terrain three times.
;---------------------------------------------------------------------------------code by bram32bit-- ;old face normals (for function SmootlyAlign..) Global oldnx#, oldny#, oldnz# ;Graphics size and width. Graphics3D 800,600,0,2 SetBuffer BackBuffer() ;-------------------------------------TRACK SETUP---------------------------------------------------- If FileType("height_map2.bmp") <> 1 Then MakeHeightMap("height_map.bmp") ;create terrains track = LoadTerrain("height_map.bmp") track2 = LoadTerrain("height_map.bmp") track3 = LoadTerrain("height_map.bmp") ;green color tex2 = TCreateTexture($00FF00) ;alpha map tex = LoadTexture("height_map.bmp", 2) ;black squares tex4 = LoadTexture("height_map.bmp") ;alpha map2 tex5 = LoadTexture("height_map.bmp", 2) PositionTexture tex5, 0.5, 0.5 ;red color tex6 = TCreateTexture($FF0000) DeleteFile "height_map.bmp" ;assign textures terrain 1 EntityTexture track, tex2, 0, 1 ;green color EntityTexture track, tex, 0, 0 ;alpha map ;assign texture terrain 2 EntityTexture track2, tex4 ;assign textures terrain3 EntityTexture track3, tex6, 0, 1 ;red color EntityTexture track3, tex5, 0, 0 ;alpha map ;place terrain1 ScaleEntity track, 10, 100, 10 PositionEntity track, -256, -100, -256 EntityPickMode track, 2 ;place terrain2 ScaleEntity track2, 10, 100, 10 PositionEntity track2, -256, -101, -256 ;place terrain3 ScaleEntity track3, 10, 100, 10 PositionEntity track3, -256, -101, -256 ;scale textures ScaleTexture tex, 512, 512 ScaleTexture tex4, 10, 10 ScaleTexture tex5, 512, 512 ;force alpha blending EntityFX track, 32 EntityFX track3, 32 ;--------------------------------SETUP CAR---------------------------------------------------------- ;pivot is the parent of the camera c_pivot = CreatePivot() PositionEntity c_pivot, 0, 150, 0 ;-------------------------------------CAMERA SETUP-------------------------------------------------- ;set up camera camera = CreateCamera(c_pivot) CameraZoom camera, 0.7 CameraClsColor camera, 0, 0, 255 PositionEntity camera, 0, 0, 0 ; CameraFogColor camera, 0, 0, 255 ; CameraFogMode camera, 1 ;-------------------------------------MAIN LOOP------------------------------------------------------ While Not(KeyHit(1)) PositionTexture tex, MilliSecs() * 0.0001, 0.5 ;keys to turn <- -> If KeyDown(203) Then TurnEntity c_pivot, 0, +1, 0 If KeyDown(205) Then TurnEntity c_pivot, 0, -1, 0 If KeyDown(200) Then MoveEntity c_pivot, 0, 0, +5 If KeyDown(208) Then MoveEntity c_pivot, 0, 0, -5 ;Q/W If KeyHit(16) Then HideEntity track If KeyHit(17) Then ShowEntity track ;E/R If KeyHit(18) Then HideEntity track2 If KeyHit(19) Then ShowEntity track2 ;T/Y If KeyHit(20) Then HideEntity track3 If KeyHit(21) Then ShowEntity track3 UpdateWorld RenderWorld Color 255, 255, 255 Text 0, 0, "Press cursor keys to move .. " Text 0, 20, "Use Q/W/E/R/T/Y to show hide different terrains" Flip False Wend End ;-----------------------------------------SmootlyAlignToVector()------------------------------------- ;this function applies aligntovector gradually .. Function SmoothlyAlignToVector(obj, nx#, ny#, nz#, mode ) oldnx# = (oldnx# * 0.9 + nx# * 0.1) oldny# = (oldny# * 0.9 + ny# * 0.1) oldnz# = (oldnz# * 0.9 + nz# * 0.1) AlignToVector obj, oldnx, oldny, oldnz, mode End Function ;----------------------------------------MakeHeightMap()--------------------------------------------- ;make a heighmap Function MakeHeightMap(ff$) image = CreateImage(512, 512) oldbuffer = GraphicsBuffer() SetBuffer ImageBuffer(image) LockBuffer ImageBuffer(image) For i = 0 To 511 For j = 0 To 511 c = Cos(i * 4) * Sin(j * 4) * 127 + 128 WritePixelFast i, j, c * 65536 + c * 256 + c Next Next UnlockBuffer ImageBuffer(image) SetBuffer oldbuffer SaveImage image, ff$ FreeImage image End Function Function TCreateTexture%(col%) oldbuffer% = GraphicsBuffer() tex = CreateTexture(64, 64) SetBuffer TextureBuffer(tex) Color 0, 0, col Rect 0, 0, 64, 64 SetBuffer oldbuffer Return tex End Function