Stole some functions from here. Modified the functions to work with unspecified number of vertices. I deliberately altered the quad shape to demonstrate.
; Quad (rotating) Graphics3D 640,480,0,2 SetBuffer BackBuffer() HidePointer cam=CreateCamera() MoveEntity cam,0,0,-6.5 MoveMouse 320,240 ; container for quads quad=CreateMesh() surf=CreateSurface(quad) EntityFX quad,1+2+32 ; texture for quads ;tex=LoadTexture("testimage.png") ;EntityTexture quad,tex ;For d=1 To 500 ; q=AddQuad(surf,Rnd(-10,10),Rnd(-10,10),Rnd(25)) ; QuadColor surf,q,Rand(255),Rand(255),Rand(255) , Rnd(1.0) ;Next mainquad=AddQuad(surf,0,0) ; ================================================== Repeat If KeyHit(17) ;[W] w=Not w WireFrame w EndIf If KeyDown(57) ; [SPACE] RotateQuad surf,mainquad,1.5 EndIf mx#=mx#+Float(MouseXSpeed())/16.0 my#=my#-Float(MouseYSpeed())/16.0 MoveMouse 320,240 PositionQuad surf,mainquad,mx,my,0 RenderWorld Color 100,100,100 Text 20,40,"[MOUSE] = move main quad" Text 20,60,"[SPACE] = rotate main quad" Text 20,80,"[W] = Wireframe" Text 80,130,"Angle# = "+rotang ; reference box Color 200,0,0 Rect 320,140,100,100,0 Flip Until KeyHit(1) End ; ================================================== Function AddQuad%(s%,x#,y#,z#=0) Local o%,v% v=AddVertex(s,x-1,y-1,z ,0.0,1.0) AddVertex s,x+2,y-1,z , 1.0,1.0 AddVertex s,x-1,y+1,z , 0.0,0.0 AddVertex s,x+1,y+1,z , 1.0,0.0 AddTriangle s,v+0,v+2,v+1 AddTriangle s,v+1,v+2,v+3 For o=0 To 3 VertexNormal s,v+0,0,0,-1 Next Return v End Function Function QuadColor(s%,i%,r%,g%,b%,a#=1.0) Local o% For o=0 To 3 VertexColor s,i+o,r,g,b,a Next End Function Function PositionQuad(s%,i%,x#,y#,z#=0.0) Local dx#,dy#,dz# , o% dx=x-VertexX(s,i) dy=y-VertexY(s,i) dz=z-VertexZ(s,i) For o=0 To 3 VertexCoords s,i+o,VertexX(s,i+o)+dx,VertexY(s,i+o)+dy,VertexZ(s,i+o)+dz Next End Function Function RotateQuad(s,i,ang#) For v% = i To i+3 RotateZ(s,v,ang#) Next End Function Function RotateZ(s,v,ang#) VertexCoords s,v,(Cos (ang#) * VertexX(s,v)) - (Sin (ang#) * VertexY(s,v%)),(Sin (ang#) * VertexX(s,v)) + (Cos (ang#) * VertexY(s,v%)),VertexZ(s,v%) End Function Function RotateY(s,v,ang#) VertexCoords s,v,(Cos (ang#) * VertexX(s,v)) + (Sin (ang#) * VertexZ(s,v%)),VertexY(s,v%),-(Sin (ang#) * VertexX(s,v)) + (Cos (ang#) * VertexZ(s,v%)) End Function Function RotateX(s,v,ang#) VertexCoords s,v,VertexX(s,v%),(Cos (ang#) * VertexY(s,v%)) - (Sin (ang#) * VertexZ(s,v%)) ,(Sin (ang#) * VertexY(s,v%)) + (Cos (ang#) * VertexZ(s,v%)) End Function