Thanks for the endorsement Tracer. (SpriteMasterPro in my sig-link)
Something pretty simple to try out here.
It's a very fast single-surface approach. Not pixel perfect though:
; Single-Surace Quads
Const numquads=50
numQI=numquads*4-4
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 numquads
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
For r=0 To numQI Step 4
RotateQuad surf,r,0.5 + Float(r)/500
Next
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,"No. of quads = "+numquads
; 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+1,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#)
Local x#=VertexX(s,i) , y#=VertexY(s,i) , z#=VertexZ(s,i) , v%
For v = i To i+3
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)
Next
PositionQuad s,i,x,y,z
End Function