try this...ignore the messiness of the code I basically ripped it out of my quad functions code and cut it down to make what I hope is a simple example. Unfortunately I have left some of the unnecessary bits in but they are commented out....
Type QuadObject Field Mesh Field Surface Field Camera ;parent used for tforming from world space to camera space for each vertex... Field Index[3] ;0-3 for each vertex Field Width# Field Height# Field Vert_X#[3] Field Vert_Y#[3] Field Vert_Z#[3] Field Vert_U#[3] Field Vert_V#[3] Field Vert_R[3] Field Vert_G[3] Field Vert_B[3] Field Vert_A#[3] ;alpha Field Alpha# Field InUse ; true / false. If false then quad should not be shown, and should be available for use as other particles... End Type Graphics3D 800,600,0,2 camera=CreateCamera() Dim quadpositions#(99,2) mesh=CreateMesh(camera) surface=CreateSurface(Mesh) For q=1 To 50 Quad.QuadObject=New QuadObject Quad\camera=camera Quad\Mesh=mesh quad\surface=surface EntityColor quad\mesh,255,255,255 Quad\Index[0]=AddVertex(Quad\Surface,-Width*0.5,-Height*0.5,0,1) Quad\Index[1]=AddVertex(Quad\Surface,-Width*0.5,Height*0.5,0,0) Quad\Index[2]=AddVertex(Quad\Surface,Width*0.5,Height*0.5,1,0) Quad\Index[3]=AddVertex(Quad\Surface,Width*0.5,-Height*0.5,1,1) quad\inuse=True For i=0 To 3 Quad\Vert_X[i]=VertexX(Quad\Surface,Quad\Index[i]) Quad\Vert_Y[i]=VertexY(Quad\Surface,Quad\Index[i]) Quad\Vert_Z[i]=VertexZ(Quad\Surface,Quad\Index[i]) ;Quad\Vert_U[i]=;you will have to put your own values here....;VertexU(Quad\Surface,Quad\Index[i]) ;Quad\Vert_V[i]=;you will have to put your own values here....VertexV(Quad\Surface,Quad\Index[i]) ;Quad\Vert_R[i]=VertexRed(Quad\Surface,Quad\Index[i]) ;Quad\Vert_G[i]=VertexGreen(Quad\Surface,Quad\Index[i]) ;Quad\Vert_B[i]=VertexBlue(Quad\Surface,Quad\Index[i]) ;Quad\Vert_A[i]=VertexAlpha(Quad\Surface,Quad\Index[i]) ;VertexTexCoords(Quad\Surface,i,Quad\Vert_U[i],Quad\Vert_V[i]) Next ;Quad\Visible=True AddTriangle(Quad\Surface,Quad\Index[0],Quad\Index[1],Quad\Index[2]) AddTriangle(Quad\Surface,Quad\Index[0],Quad\Index[2],Quad\Index[3]) For j=0 To 2 quadpositions(q-1,j)=Rnd(-50,50) quadpositions(q-1,2)=quadpositions(q-1,2)+210 Next SetQuadPosition(Handle(Quad),quadpositions(q-1,0),quadpositions(q-1,1),quadpositions(q-1,2),2,2) Next Repeat frame=frame+1 ;do whatever you want to do to move the quads around... For i=0 To 49 For j=0 To 2 quadpositions(i,j)=quadpositions(i,j)+2.0*Sin(frame) Next Next i=0 For quad.quadobject=Each quadobject setquadposition(Handle(Quad),quadpositions(i,0),quadpositions(i,1),quadpositions(i,2),-1,-1,frame,12,1) i=i+1 Next UpdateWorld RenderWorld Flip Until KeyDown(1) End Function SetQuadPosition(QuadID,WorldX#,WorldY#,WorldZ#,Width#=-1,Height#=-1,Roll#=0,Size#=1.0,UseRoll=False) ;This gets called every frame....or at least whenever the camera moves Quad.QuadObject=Object.quadobject(QuadID) If Quad.QuadObject=Null Then Return -1 ;check if height, width is to be changed (ie not -1) If Width#=-1 Then Width#=Quad\Width If Height#=-1 Then Height#=Quad\Height TFormPoint WorldX,WorldY,WorldZ,0,Quad\Mesh If UseRoll=True Then Roll=Roll+135 NewX0#=TFormedX()+Size*Cos(Roll+90) NewY0#=TFormedY()+Size*Sin(Roll+90) NewX1#=TFormedX()+Size*Cos(Roll) NewY1#=TFormedY()+Size*Sin(Roll) NewX2#=TFormedX()+Size*Cos(Roll+270.0) NewY2#=TFormedY()+Size*Sin(Roll+270.0) NewX3#=TFormedX()+Size*Cos(Roll+180.0) NewY3#=TFormedY()+Size*Sin(Roll+180.0) Else NewX0#=TFormedX()-Width*0.5 NewY0#=TFormedY()-Height*0.5 NewX1#=TFormedX()-Width*0.5 NewY1#=TFormedY()+Height*0.5 NewX2#=TFormedX()+Width*0.5 NewY2#=TFormedY()+Height*0.5 NewX3#=TFormedX()+Width*0.5 NewY3#=TFormedY()-Height*0.5 EndIf If Quad\InUse=False Then ;ie make the quad disappear.... ;according to a bug report in the blitz3d bugs forum this may perform slightly differently on AMD and Intel motherboards Width=0.0 Height=0.0 NewX0=0 NewY0=0 NewX1=0 NewY1=0 NewX2=0 NewY2=0 NewX3=0 NewY3=0 Else ;do nothing. EndIf VertexCoords Quad\Surface,Quad\Index[0],NewX0,NewY0,TFormedZ() VertexCoords Quad\Surface,Quad\Index[1],NewX1,NewY1,TFormedZ() VertexCoords Quad\Surface,Quad\Index[2],NewX2,NewY2,TFormedZ() VertexCoords Quad\Surface,Quad\Index[3],NewX3,NewY3,TFormedZ() Return 0 End Function