2D with Blitz3D

Blitz3D Forums/Blitz3D Programming/2D with Blitz3D

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