
** ROTATE 3D POINT ************************************************************

ROTATE:
	MOVE.W	XVINKEL(PC),D5		; X ANGLE
	MOVE.W	YVINKEL(PC),D6		; Y ANGLE
	MOVE.W	ZVINKEL(PC),D7		; Z ANGLE
	LSL.W	#1,D5			; X ANGLE *2
	LSL.W	#1,D6			; Y ANGLE *2
	LSL.W	#1,D7			; Z ANGLE *2
	MOVE.W	(A3,D5.W),D3		; COS(XGRAD)
	MOVE.W	(A2,D5.W),D4		; SIN(XGRAD)
	MULS	D1,D3			; Y*COS(XGRAD)
	MULS	D2,D4			; Z*SIN(XGRAD)
	SUB.L	D4,D3			; Y*COS(XGRAD) - Z*SIN(XGRAD)
	LSL.L	#2,D3			; 4*(Y*COS(XGRAD)-Z*SIN(XGRAD))
	MOVE.L	D3,Y1			; Y-COORDINATE AROUND X AXIS
	MOVE.W	(A2,D5.W),D3		; SIN(XGRAD)
	MOVE.W	(A3,D5.W),D4		; COS(XGRAD)
	MULS	D1,D3			; Y*SIN(XGRAD)
	MULS	D2,D4			; Z*COS(XGRAD)
	ADD.L	D4,D3			; Y*SIN(XGRAD) + Z*COS(XGRAD)
	LSL.L	#2,D3			; 4*(Y*SIN(XGRAD)+Z*COS(XGRAD))
	MOVE.L	D3,Z1			; Z-COORDINATE AROUND X AXIS
	MOVE.W	(A3,D6.W),D3		; COS(YGRAD)
	MOVE.W	(A2,D6.W),D4		; SIN(YGRAD)
	MULS	D0,D3			; X*COS(YGRAD)
	MULS	Z1,D4			; Z*SIN(YGRAD)
	SUB.L	D4,D3			; X*COS(YGRAD) - Z*SIN(YGRAD)
	LSL.L	#2,D3			; 4*(X*COS(YGRAD)-Z*SIN(YGRAD))
	MOVE.L	D3,X2			; X-COORDINATE AROUND Y AXIS
	MOVE.W	(A2,D6.W),D2		; SIN(YGRAD)
	MOVE.W	(A3,D6.W),D4		; COS(YGRAD)
	MULS	D0,D2			; X*SIN(YGRAD)
	MULS	Z1,D4			; Z*COS(YGRAD)
	ADD.L	D4,D2			; X*SIN(YGRAD) + Z*COS(YGRAD)
	LSL.L	#2,D2			; 4*(X*SIN(YGRAD)+Z*COS(YGRAD))
	SWAP	D2			; FAST DIVISION BY 65535
	EXT.L	D2			; Z-COORDINATE AROUND Y AND X
	MOVE.W	(A3,D7.W),D0		; COS(ZGRAD)
	MOVE.W	(A2,D7.W),D4		; SIN(ZGRAD)
	MULS	X2,D0			; X*COS(ZGRAD)
	MULS	Y1,D4			; Y*SIN(ZGRAD)
	SUB.L	D4,D0			; X*COS(ZGRAD) - Y*SIN(ZGRAD)
	LSL.L	#2,D0			; 4*(X*COS(ZGRAD)-Y*SIN(ZGRAD))
	SWAP	D0			; FAST DIVISION BY 65535
	EXT.L	D0			; X-COORDINATE AROUND Y AND Z
	MOVE.W	(A2,D7.W),D1		; SIN(ZGRAD)
	MOVE.W	(A3,D7.W),D3		; COS(ZGRAD)
	MULS	X2,D1			; X*SIN(ZGRAD)
	MULS	Y1,D3			; Y*COS(ZGRAD)
	ADD.L	D3,D1			; X*SIN(ZGRAD) + Y*COS(ZGRAD)
	LSL.L	#2,D1			; 4*(X*SIN(ZGRAD)+Y*COS(ZGRAD))
	SWAP	D1			; FAST DIVISION BY 65535
	EXT.L	D1			; Y-COORDINATE AROUND X AND Z
	RTS

******************************* prospettiva (convert 3d to 2d **********

	SUB.W	XCENTER(PC),D0			; OBJECT WITH CENTER IN ORIGO
	SUB.W	YCENTER(PC),D1
	SUB.W	ZCENTER(PC),D2
	BSR.B	ROTATE				; ROTATE 3D POINT
	ADD.W	ZCENTER(PC),D2
	BSR.W	CONVERT				; CONVERT FROM 3D TO 2D
	ADD.W	XCENTER(PC),D0
	ADD.W	YCENTER(PC),D1

CONVERT:			; da 3d a 2d (prospettiva)
	MULS	ZOOM(PC),D0
	MULS	ZOOM(PC),D1
	DIVS	D2,D0
	DIVS	D2,D1

XVINKEL:	DC.W	0
YVINKEL:	DC.W	0
ZVINKEL:	DC.W	0

Y1:		DC.L	0
Z1:		DC.L	0
X2:		DC.L	0
