0 Members and 1 Guest are viewing this topic.
' On Reflection Demo' =================='' This Demo Was Coded In October 2002 By Shockwave.' The idea for it came about from some discussions on' The Yabasic Forums, I'd Like To Say Thank You To;' Fryer and Parabellum.' Who Gave Me The Idea.'' Contact Address;' Shockwave@ps2-yabasic.co.uk (Email).' WWW.Yabasic.Co.Uk (Forums).'' Also Visit;'' WWW.PS2-Yabasic.co.uk (Rescource Site)' WWW.Yabasic.Co.Uk (General Site).''Coded By Shockwave C) 2002.'#########################################################gosub initialise'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^setrgb 0,40,30,20repeat setdrawbuf dw dw=1-dw setdispbuf dw clear window gosub rotate gosub inf'_________________________________________________________ o=16:gosub construct2 o=24:gosub construct2 o=32:gosub construct2 o=40:gosub construct2'_________________________________________________________ gosub construct gosub rotcontrol setrgb 1,cf,cf,cf text 0,0,m$(mp),"cc"until (and(peek("port1"),16384)<>0)exit'---------------------------------------------------------' Rotations For The Central Cube;'---------------------------------------------------------label rotcontrol tt=tt+2 if tt<255 cf=cf+2 if tt>500 cf=cf-2 if tt>750 then tt=0 mp=mp+1 if mp>15 mp=1 fi zr2=zr2+1xr2=xr2+3yr2=yr2+2if xr2>720 xr2=xr2-720if yr2>720 yr2=yr2-720if zr2>720 zr2=zr2-720return'---------------------------------------------------------' Draw The Cube Reflections;'---------------------------------------------------------label construct2for a=1 to facesgosub draw2next areturn'---------------------------------------------------------' Draw A Face Of The Central Cube;'---------------------------------------------------------label draw2 vx1= tx(f1(a)+o)-tx(f2(a)+o) vy1= ty(f1(a)+o)-ty(f2(a)+o) vx2= tx(f3(a)+o)-tx(f2(a)+o) vy2= ty(f3(a)+o)-ty(f2(a)+o) n= vx1*vy2-vx2*vy1 if n>0 then n=n/100 setrgb 1,r(a)+n,g(a)+n,b(a)+n fill triangle tx(f1(a)+o),ty(f1(a)+o) to tx(f2(a)+o),ty(f2(a)+o) to tx(f3(a)+o),ty(f3(a)+o) fill triangle tx(f1(a)+o),ty(f1(a)+o) to tx(f4(a)+o),ty(f4(a)+o) to tx(f3(a)+o),ty(f3(a)+o)fireturn'---------------------------------------------------------' Draw Large Cube;'---------------------------------------------------------label inf setrgb 1,0,10,20 fill triangle tx(12),ty(12) to tx(11),ty(11) to tx(10),ty(10) fill triangle tx(12),ty(12) to tx(9),ty(9) to tx(10),ty(10) setrgb 1,0,20,100 fill triangle tx(13),ty(13) to tx(14),ty(14) to tx(10),ty(10) fill triangle tx(13),ty(13) to tx(9),ty(9) to tx(10),ty(10) setrgb 1,0,20,140 fill triangle tx(13),ty(13) to tx(16),ty(16) to tx(12),ty(12) fill triangle tx(13),ty(13) to tx(12),ty(12) to tx(9),ty(9) setrgb 1,0,20,140 fill triangle tx(11),ty(11) to tx(15),ty(15) to tx(14),ty(14) fill triangle tx(11),ty(11) to tx(10),ty(10) to tx(14),ty(14) setrgb 1,0,20,100 fill triangle tx(16),ty(16) to tx(15),ty(15) to tx(11),ty(11) fill triangle tx(16),ty(16) to tx(11),ty(11) to tx(12),ty(12)return'---------------------------------------------------------' Draw The Central Cube;'---------------------------------------------------------label constructfor a=1 to facesgosub drawnext areturn'---------------------------------------------------------' Draw A Face Of The Central Cube;'---------------------------------------------------------label draw vx1= tx(f1(a))-tx(f2(a)) vy1= ty(f1(a))-ty(f2(a)) vx2= tx(f3(a))-tx(f2(a)) vy2= ty(f3(a))-ty(f2(a)) n= vx1*vy2-vx2*vy1 if n<0 then n=-(n/300) setrgb 1,r(a)+n,g(a)+n,b(a)+n fill triangle tx(f1(a)),ty(f1(a)) to tx(f2(a)),ty(f2(a)) to tx(f3(a)),ty(f3(a)) fill triangle tx(f1(a)),ty(f1(a)) to tx(f4(a)),ty(f4(a)) to tx(f3(a)),ty(f3(a))fireturn'---------------------------------------------------------' Rotations;'---------------------------------------------------------label rotate'#########################################################'## Rotate And Scale Each Point! (Inner) Store Result ##'######################################################### for a=1 to 8 x1=x(a) y1=y(a) z1=z(a)'######################'## X,Y,Z rotations! ##'###################### xx=x1 yy=y1*cs(xr2)+z1*sn(xr2) zz=z1*cs(xr2)-y1*sn(xr2) y1=yy x1=xx*cs(yr2)-zz*sn(yr2) z1=xx*sn(yr2)+zz*cs(yr2) zz=z1 xx=x1*cs(zr2)-y1*sn(zr2) yy=x1*sn(zr2)+y1*cs(zr2)'########################'## Apply Perspective! ##'######################## x(a+16)=20 x(a+24)=-20 x(a+32)=-xx x(a+40)=xx y(a+16)=-yy y(a+24)=yy y(a+32)=20 y(a+40)=-20 z(a+16)=zz z(a+24)=zz z(a+32)=zz z(a+40)=zz dv=(zz/80)+1 xx=size*(xx/dv) yy=size*(yy/dv) tx(a)=xx ty(a)=yy tz(a)=zz next a'############################################'## Scale Each Point! (Outer) Store Result ##'############################################ for a=9 to points x1=x(a) y1=y(a) z1=z(a)'######################'## X,Y,Z rotations! ##'###################### xx=x1 yy=y1*cs(0)+z1*sn(0) zz=z1*cs(0)-y1*sn(0) y1=yy x1=xx*cs(0)-zz*sn(0) z1=xx*sn(0)+zz*cs(0) zz=z1 xx=x1*cs(0)-y1*sn(0) yy=x1*sn(0)+y1*cs(0)'########################'## Apply Perspective! ##'######################## dv=(zz/80)+1 xx=size*(xx/dv) yy=size*(yy/dv) tx(a)=xx ty(a)=yy tz(a)=zz next areturnlabel initialise'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' This Sub-Routine Initialises The Program.'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'######################'## Open Gfx Screen! ##'###################### open window 640,512 window origin "cc"'---------------------------------------------------------' Define the necessary variables;'---------------------------------------------------------mp=1dw=1 : Rem Double buffering Variablepoints=48: Rem The amount of points in the objectfaces=6 : Rem The Amount of faces in the objectdim x(points): Rem Original X co-ordinate storedim y(points): Rem Original Y co-ordinate storedim z(points): Rem Original Z co-ordinate storedim tx(points): Rem Transformed X co-ordinate storedim ty(points): Rem Transformed Y co-ordinate storedim tz(points): Rem Transformed Z co-ordinate storedim f1(faces):rem Connections definitiondim f2(faces):rem Connections definitiondim f3(faces):rem Connections definitiondim f4(faces):rem Connections definitiondim r(faces):rem Red Componentdim g(faces):rem Green Componentdim b(faces):rem Blue Componentsize=12dim m$(15) m$(1)="WELCOME TO SHOCKWAVES LATEST DEMO!" m$(2)="CALLED: ON REFLECTION" m$(3)="A CUBE DEMO WITH A DIFFERENCE!" m$(4)="THE CENTRAL CUBE IS PROPERLY" m$(5)="REFLECTED AND MAPPED ONTO THE" m$(6)="OUTER CUBE'S FACES!" m$(7)="BRIEF HELLOS GO OUT TO:" m$(8)="PARABELLUM, XALTHORN, FRYER," m$(9)="DOCTOR, JINX, AZ, JOMORROW,"m$(10)="DEMONEYE, SNAKEDOGG, KYATA,"m$(11)="TRICKYKEYBOARD, JIM SHAW, "m$(12)="JACOB BUSBY, ELL, ZING, PYRO,"m$(13)="BONGOTRUMMOR, DREW, COMBATKING,"m$(14)="BRUASSET, BALROQ AND EVERYONE ELSE!"m$(15)="TEXT RESTARTS NOW..."'---------------------------------------------------------' Define Sine Tables for faster matrix calculations;'--------------------------------------------------------- dim cs(720) dim sn(720) for ang=0 to 720 cs(ang)=cos(ang*(pi/360)) sn(ang)=sin(ang*(pi/360)) next ang'---------------------------------------------------------' Read in the object's points;'---------------------------------------------------------for a=1 to 16 read x(a),y(a),z(a)next a'---------------------------------------------------------' Read In Connections and face parameters;'---------------------------------------------------------for a=1 to facesread f1(a)read f2(a)read f3(a)read f4(a)read r(a),g(a),b(a)next a'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' The Object Description As Data!' The Data Below Describes A Cube.'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'Points definition;'~~~~~~~~~~~~~~~~~~'Below are the points of the object defined as x,y,z;data -9,9,9,9,9,9,9,-9,9,-9,-9,9data -9,9,-9,9,9,-9,9,-9,-9,-9,-9,-9data -20,20,20,20,20,20,20,-20,20,-20,-20,20data -20,20,-20,20,20,-20,20,-20,-20,-20,-20,-20'Connection definition;'Below are the faces of the object defined as vertice'numbers, specified in clockwise order. These are followed'by r,g,b values for the face.data 1,2,3,4,30,0,0data 5,8,7,6,30,0,0data 6,2,1,5,0,30,0data 8,4,3,7,0,30,0data 2,6,7,3,0,0,30data 8,5,1,4,0,0,30return