Page 1 of 1

Spin v1

Posted: Sat Jan 31, 2015 9:25 am
by DrChip
REM Spin v1
REM i didnt finish the tilt and touch, yet.
REM iPhone 6 Plud / iOS 8.2 b4
REM enjoy...



'Screen Area
scw = Screen_Width()
sch = Screen_Height()
csw = scw/2
csh = sch/2
graphics

GOSUB initialize

Loop:
refresh off
graphics clear 0,0,0
GOSUB Controlls
GOSUB background
IF c=0 THEN
mm=mm+.05
END IF
size=10+19*SIN(mm/2)
r=100
b=0
g=0
GOSUB rotate
GOSUB object
draw COLOR 0,0,0
refresh on
GOTO loop
END


Controlls:
IF AccelY <1 THEN
yr=yr-5
END IF
IF AccelY >1 THEN
yr=yr+5
END IF
IF AccelX >1 THEN
xr=xr+5
END IF
IF AccelX <1 THEN
xr=xr-5
END IF
IF AccelZ <1 THEN
zr=zr-5
END IF
IF AccelZ >1 THEN
zr=zr+5
END IF
IF Touch = 0 THEN
mm=mm+.1
END IF
IF Touch = 1 THEN
mm=mm-.1
END IF


IF xr<1 THEN
xr=xr+720
END IF
IF yr<1 THEN
yr=yr+720
END IF
IF zr<1 THEN
zr=zr+720
END IF

IF xr>720 THEN
xr=xr-720
END IF
IF yr>720 THEN
yr=yr-720
END IF
IF zr>720 THEN
zr=zr-720
END IF
RETURN


background:
ang=ang+1
lm=lm+.03
rd=40+40*SIN(lm)
gn=40+40*SIN(lm/4)
bl=40+40*SIN(lm/7)

IF ang>360 THEN
ang=ang-360
END IF
FOR a=0 TO 360 STEP 30
cv=20*SIN(a+ang*PI/180)

x1=(560*(SIN((ang+a)*PI/180)))
y1=(560*(COS((ang+a)*PI/180)))
x2=(560*(SIN((30+ang+a)*PI/180)))
y2=(560*(COS((30+ang+a)*PI/180)))

fill COLOR (cv+rd)/255,(cv+gn)/255,(cv+bl)/255
'TRIANGLE csw,csh, x1+csw,y1+csh, x2+csw,y2+csh
trix(0)=csw
triy(0)=csh
trix(1)=x1+csw
triy(1)=y1+csh
trix(2)=x2+csw
triy(2)=y2+csh
fill poly trix,triy count 3
'COLOR 0,0,0
'TRIANGLE x1+csw,y2+csh, x1+csw,y1+csh, x2+csw,y2+csh
trix(0)=x1+csw
triy(0)=y2+csh
trix(1)=x1+csw
triy(1)=y1+csh
trix(2)=x2+csw
triy(2)=y2+csh
fill poly trix,triy count 3
NEXT a

RETURN

object:
'insides
r=0
g=0
b=100
f1=1
f2=2
f3=3
f4=4
GOSUB quadb

f1=8
f2=7
f3=6
f4=5
GOSUB quadb
f1=8
f2=9
f3=4
f4=12
GOSUB quadb
f1=7
f2=12
f3=3
f4=11
GOSUB quadb
f1=6
f2=11
f3=2
f4=10
GOSUB quadb
f1=9
f2=5
f3=10
f4=1
GOSUB quadb
f1=1
f2=4
f3=9
GOSUB trib
f1=4
f2=3
f3=12
GOSUB trib
f1=9
f2=8
f3=5
GOSUB trib
f1=8
f2=12
f3=7
GOSUB trib
f1=3
f2=2
f3=11
GOSUB trib
f1=6
f2=7
f3=11
GOSUB trib
f1=2
f2=1
f3=10
GOSUB trib
f1=6
f2=10
f3=5
GOSUB trib
r=100
g=0
b=0
'Fronts
'f1=1
f2=2
f3=3
f4=4
'gosub quad
f1=8
f2=7
f3=6
f4=5
GOSUB quad
f1=8
f2=9
f3=4
f4=12
GOSUB quad
f1=7
f2=12
f3=3
f4=11
GOSUB quad
f1=6
f2=11
f3=2
f4=10
GOSUB quad
f1=9
f2=5
f3=10
f4=1
GOSUB quad
f1=1
f2=4
f3=9
GOSUB tri
f1=4
f2=3
f3=12
GOSUB tri
f1=9
f2=8
f3=5
GOSUB tri
f1=8
f2=12
f3=7
GOSUB tri
f1=3
f2=2
f3=11
GOSUB tri
f1=6
f2=7
f3=11
GOSUB tri
f1=2
f2=1
f3=10
GOSUB tri
f1=6
f2=10
f3=5
GOSUB tri
RETURN


tri:

'Draw Triangle Face (1 Triangle)

vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
IF (vx1*vy2-vx2*vy1)<0 THEN
light=-(tz(f1)+tz(f2)+tz(f3))*10
fill COLOR r+light/255,g+light/255,b+light/255
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
draw COLOR 0,0,0
draw LINE tx(f1),ty(f1) to tx(f2),ty(f2)
draw LINE tx(f2),ty(f2) to tx(f3),ty(f3)
draw LINE tx(f3),ty(f3) to tx(f1),ty(f1)
END IF
RETURN
quad:

' Draw Quad Face (2 Triangles)
vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
IF (vx1*vy2-vx2*vy1)<0 THEN
light=-(tz(f1)+tz(f2)+tz(f3))*10
fill COLOR r+light/255,g+light/255,b+light/255
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
'TRIANGLE tx(f1),ty(f1), tx(f4),ty(f4), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f4)
triy(1)=ty(f4)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
draw COLOR 0,0,0
draw LINE tx(f1),ty(f1) to tx(f2),ty(f2)
draw LINE tx(f2),ty(f2) to tx(f3),ty(f3)
draw LINE tx(f3),ty(f3) to tx(f4),ty(f4)
draw LINE tx(f4),ty(f4) to tx(f1),ty(f1)

END IF
RETURN

trib:

'Draw Triangle Face (1 Triangle)

vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
IF (vx1*vy2-vx2*vy1)>0 THEN
light=-(tz(f1)+tz(f2)+tz(f3))*4
fill COLOR r+light/255,g+light/255,b+light/255
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
END IF
RETURN

quadb:

' Draw Quad Face (2 Triangles)
vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
IF (vx1*vy2-vx2*vy1)>0 THEN
light=-(tz(f1)+tz(f2)+tz(f3))*4
fill COLOR r+light/255,g+light/255,b+light/255
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
'TRIANGLE tx(f1),ty(f1), tx(f4),ty(f4), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f4)
triy(1)=ty(f4)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
END IF
RETURN


rotate:

' Rotate And Scale Each Point Store Result

FOR a=1 TO polys
x1=x(a)
y1=y(a)
z1=z(a)

'X,Y,Z rotations!
xx=x1
yy=y1*cs(xr)+z1*sn(xr)
zz=z1*cs(xr)-y1*sn(xr)
y1=yy
x1=xx*cs(yr)-zz*sn(yr)
z1=xx*sn(yr)+zz*cs(yr)
zz=z1
xx=x1*cs(zr)-y1*sn(zr)
yy=x1*sn(zr)+y1*cs(zr)

' Apply Perspective!

xx=size*(xx/((zz/100)+1))+csw
yy=size*(yy/((zz/100)+1))+csh
tx(a)=xx
ty(a)=yy
tz(a)=zz
NEXT a
IF Touch=1 THEN
xr=xr+1
yr=yr+2
zr=zr+3
IF xr>720 THEN
xr=xr-720
END IF
IF yr>720 THEN
yr=yr-720
END IF
IF zr>720 THEN
zr=zr-720
END IF
END IF
RETURN

initialize:

' This Sub-Routine Initializes The Program.
pi=3.1415
'Define the necessary variables!
size=15 ' how big do you want it?
polys=12 ' The amount of polygons in the object
DIM x(polys+1) ' Original X co-ordinate store
DIM y(polys+1) ' Original Y co-ordinate store
DIM z(polys+1) ' Original Z co-ordinate store
DIM tx(polys+1) ' Transformed X co-ordinate store
DIM ty(polys+1) ' Transformed Y co-ordinate store
DIM tz(polys+1) ' Transformed Z co-ordinate store
p=0
scx=0


'Define Sine Tables!!

DIM cs(721)
DIM sn(721)
FOR ang=1 TO 720
cs(ang)=COS(ang*(PI/360))
sn(ang)=SIN(ang*(PI/360))
NEXT ang

' Read in the object!

FOR a=1 TO polys
READ x(a),y(a),z(a)
NEXT a
'The Object Description As Data!
'The Data Below Describes A Cube.
DATA 0,5,5,5,0,5,0,-5,5,-5,0,5
DATA 0,5,-5,5,0,-5,0,-5,-5,-5,0,-5
DATA -5,5,0,5,5,0,5,-5,0,-5,-5,0
RETURN