Cool, I have dones as you said, and yep, it works, awesome, here is the code, and many many thanks.
I will tidy up, make generic and document for all to use
I will tidy up, make generic and document for all to use
; Standard, used for 3D Calculations Type vector Field x# Field y# Field z# End Type ; Mesh (or emitter) for lettersprites Type text3D_lettermesh Field mesh% Field surface% field ent% end type ; Sprites Type text3D_lettersprite field index% field pos.vector field movex# field movey# end type ; 640x480 global nScale#=.005 Graphics3D 640,480,32,0 SetBuffer BackBuffer() camera=CreateCamera() ;cameraclscolor camera,255,0,0 CameraRange camera, 0.1, 0.2 CameraClsMode camera, False, False EntityOrder camera, -1 mylettermesh.text3D_lettermesh = Text3D_CreateLetterMesh("letters2.bmp") cube=createcube() positionentity cube,0,0,3 maincamera=createcamera() positionentity maincamera,0,0,-6 scalemesh mylettermesh\mesh,.005,.005,1 ;PositionEntity mylettermesh\mesh,0,0,.1 ;moveentity camera,0,0,-5 ;for mycount = 1 to 2 restore robdata read x$ n%=0 for z%=1 to len(x$) if mid$(x$,z%,1) <> " " for b%=0 to 23 myletter.text3D_lettersprite = Text3D_AddLetter(mylettermesh,n%,b%,0,rnd(0,255),rnd(0,255),rnd(0,255)) Text3D_SetLetter(mylettermesh,myletter,asc(mid$(x$,z%,1))) Text3D_PositionLetter mylettermesh,myletter,rnd(0,39),rnd(0,24) next end if n% = n% + 1 next ;next nStart%=millisecs() While Not KeyHit(1) ;TurnEntity mylettermesh\mesh,0,0,.3 ;if keyhit(57) nCount%=0 for o.text3D_lettersprite = each text3D_letterSprite nCount%=nCount%+1 r%=r%+1 if r>255 then r=0 ;Text3D_ColorLetter mylettermesh,o,rnd(0,255),rnd(0,255),rnd(0,255) Text3D_PositionLetter mylettermesh,o,o\pos\x+o\movex,o\pos\y+o\movey if o\pos\y > 24 then o\movey=-o\MoveY if o\pos\y <0 then o\movey=-o\movey if o\pos\x <0 then o\movex=-o\movex if o\pos\x >39 then o\movex=-o\movex next ;end if if keydown(200) moveentity maincamera,0,0,.1 end if if millisecs()-nStart% > 1000 nFPS=nCounter nCounter = 0 nStart=millisecs() end if turnentity cube,0,1,1 UpdateWorld RenderWorld text 0,0,nCount% text 0,16,nFPS nCounter = nCounter + 1 Flip Wend End function Text3D_SetLetter(mylettermesh.text3D_lettermesh,myletter.text3D_lettersprite,nAsc%) nAsc% = nAsc% - 33 ny% = nAsc%/8 nx% = nAsc% - (ny%*8) u# = nx% * .125 v# = ny% * .125 VertexTexCoords(mylettermesh\surface,myletter\index,u#,v#) VertexTexCoords(mylettermesh\surface,myletter\index+1,u#+.125,v#) VertexTexCoords(mylettermesh\surface,myletter\index+2,u#+.125,v#+.125) VertexTexCoords(mylettermesh\surface,myletter\index+3,u#,v#+.125) end function function Text3D_CreateLetterMesh.text3d_lettermesh(strTexture$) t.text3D_lettermesh = new text3D_lettermesh t\ent = createpivot(camera) moveentity t\ent,0,0,.1 t\mesh = createmesh(t\ent) t\surface = createsurface(t\mesh) Tex=LoadTexture(strTexture$,4) brush=CreateBrush() BrushFX brush,3 BrushTexture brush,tex PaintMesh t\mesh,brush freebrush brush freetexture tex return t end function function Text3D_AddLetter.text3D_lettersprite(t.text3D_lettermesh,x#,y#,z#,r%=255,g%=255,b%=255) ;nOffset#=.5 mytempletter.text3D_lettersprite = new text3D_lettersprite ;X# = X# - 20 ;Y#=(14-(Y#*1.25)) i%=AddVertex(t\surface,x#-1+nOffset#,y#+1+nOffset#,0, 0,0) AddVertex t\surface,x#+1+nOffset#,y#+1+nOffset#,0, .125,0 AddVertex t\surface,x#+1+nOffset#,y#-1+nOffset#,0, .125,.125 AddVertex t\surface,x#-1+nOffset#,y#-1+nOffset#,0, 0,.125 AddTriangle t\surface,i%+0,i%+1,i%+2 AddTriangle t\surface,i%+0,i%+2,i%+3 UpdateNormals t\mesh mytempletter\index = i% Text3D_ColorLetter(t,mytempletter,r,g,b) mytempletter\pos = new vector Text3D_PositionLetter(t,mytempletter,rnd(0,39),rnd(0,24)) mytempletter\movex=rnd(-.5,.5) mytempletter\movey=rnd(-.5,.5) return mytempletter end function function Text3D_ColorLetter(t.text3D_lettermesh,l.text3D_lettersprite,r%,g%,b%,gradient%=false) vertexcolor t\surface,l\index,255,255,255 vertexcolor t\surface,l\index+1,255,255,255 vertexcolor t\surface,l\index+2,r%,g%,b% vertexcolor t\surface,l\index+3,r%,g%,b% end function Function Text3D_PositionLetter (t.text3D_lettermesh,l.text3D_lettersprite, x#,y#) l\pos\x = x# l\pos\y = y# l\pos\z = 0 nOffset#=.5*nScale X# = X# - 20 Y#=(14-(Y#*1.25)) x#=x#*nScale y#=y#*nScale nInc#=nScale VertexCoords t\surface,l\index,x-nInc+nOffset,y+nInc+nOffset, 0 VertexCoords t\surface,l\index+1,x+nInc+nOffset,y+nInc+nOffset, 0 VertexCoords t\surface,l\index+2,x+nInc+nOffset,y-nInc+nOffset, 0 VertexCoords t\surface,l\index+3,x-nInc+nOffset,y-nInc+nOffset, 0 End Function .robdata data "0123456789012345678901234567890123456789"