Rotating a 'quad' .. How to?

Blitz3D Forums/Blitz3D Programming/Rotating a 'quad' .. How to?

Got it working. Thankyou kindly Antony

; 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]
		rotang#=rotang#+1.5
		RotateQuad surf,mainquad,rotang
	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+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#)
	x#=VertexX(s,i+0)+1 : y#=VertexY(s,i+0)+1
	VertexCoords s,i+0,rotX(x-1.0,y-1.0,ang),rotY(x-1.0,y-1.0,ang),VertexZ(s,i+0)
	VertexCoords s,i+1,rotX(x+1.0,y-1.0,ang),rotY(x+1.0,y-1.0,ang),VertexZ(s,i+0)
	VertexCoords s,i+2,rotX(x-1.0,y+1.0,ang),rotY(x-1.0,y+1.0,ang),VertexZ(s,i+0)
	VertexCoords s,i+3,rotX(x+1.0,y+1.0,ang),rotY(x+1.0,y+1.0,ang),VertexZ(s,i+0)
End Function

Function rotX#(x#,y#,roll#)
	Return Cos(roll)*x+Sin(roll)*y
End Function

Function rotY#(x#,y#,roll#)
	Return -Sin(roll)*x+Cos(roll)*y
End Function