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:
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