'=========================================================================== ' Subject: MOVING IN 3D: DEMO Date: 07-25-99 (14:37) ' Author: Devin Garner Code: QB, QBasic, PDS ' Origin: santa@tir.com Packet: DEMOS.ABC '=========================================================================== DECLARE SUB getdata () DECLARE SUB getkey () DECLARE SUB morph () DECLARE SUB instruct () '********************************VARIABLES************************************ COMMON SHARED vx, vy, vz, srx, sry, x, y, z, xspeed, yspeed, zspeed, past, sx, sy vx = 320 ' viewers X coordinate vy = 175 ' viewers Y coordinate vz = 0 ' viewers Z coordinate srx = 639 ' screens X-resolution sry = 349 ' screens Y-resolution xspeed = 25 ' Speed of X axis yspeed = 25 ' Speed of Y axis zspeed = .5 ' Speed of Z axis '*****************************END OF VARIABLES******************************** '****************************OBJECT+COORDINATES******************************* 'rect = rectangle 'rect=DATA rect,col,col2,x,y,z,x,y,z closest-top-left, farthest-bottom-right DATA rect,7,40,40,20,80,310,25 DATA rect,7,40,40,0,80,310,15 DATA rect,7,560,40,0,600,310,5 DATA rect,7,560,40,10,600,310,15 DATA done '******************************END COORDINATES******************************** instruct ' sub: show instructions 10 CLS getdata ' reads data, and draws it PCOPY 1, 0 getkey ' gets a key from keyboard GOTO 10 SUB getdata RESTORE 20 past = 0 READ comand$ IF comand$ = "done" THEN EXIT SUB IF comand$ = "rect" THEN READ col, x1, y1, z1, x2, y2, z2 x = x1 y = y1 z = z1 morph px1 = sx py1 = sy z = z2 morph px2 = sx py2 = sy x = x2 y = y2 morph px4 = sx py4 = sy z = z1 morph px3 = sx py3 = sy IF vx >= x1 AND vx <= x2 AND vz < z2 THEN IF past = 0 THEN LINE (px1, py1)-(px3, py3), col, B IF vy < y1 THEN LINE (px1, py1)-(px2, py2), col: LINE (px2, py2)-(px4, py2), col: LINE (px3, py1)-(px4, py2), col IF vy > y2 THEN LINE (px1, py3)-(px2, py4), col: LINE (px2, py4)-(px4, py4), col: LINE (px3, py3)-(px4, py4), col GOTO 20 END IF IF vx > x2 AND vz < z2 THEN IF vy < y1 THEN LINE (px1, py1)-(px2, py2), col: LINE (px2, py2)-(px4, py2), col IF vy > y2 THEN LINE (px1, py3)-(px2, py4), col: LINE (px2, py4)-(px4, py4), col IF past = 0 THEN LINE (px1, py1)-(px3, py3), col, B LINE (px3, py3)-(px4, py4), col LINE (px3, py1)-(px4, py2), col LINE (px4, py2)-(px4, py4), col GOTO 20 END IF IF vx < x2 AND vz < z2 THEN IF vy < y1 THEN LINE (px3, py1)-(px4, py2), col: LINE (px2, py2)-(px4, py2), col IF vy > y2 THEN LINE (px3, py3)-(px4, py4), col: LINE (px2, py4)-(px4, py4), col IF past = 0 THEN LINE (px1, py1)-(px3, py3), col, B LINE (px1, py3)-(px2, py4), col LINE (px1, py1)-(px2, py2), col LINE (px2, py4)-(px2, py2), col GOTO 20 END IF GOTO 20 END IF END SUB SUB getkey DO key$ = INKEY$ LOOP UNTIL key$ <> "" SELECT CASE ASC(RIGHT$(key$, 1)) CASE 27 SYSTEM CASE 75 IF left = 0 THEN vx = vx - xspeed: left = 0 CASE 77 IF right = 0 THEN vx = vx + xspeed: right = 0 CASE 97 vy = vy - yspeed CASE 122 vy = vy + yspeed CASE 72 IF forward = 0 THEN vz = vz + zspeed: forward = 0 CASE 80 vz = vz - zspeed CASE 97 ' a vy = vy - yspeed CASE 122 ' z vy = vy + yspeed CASE 72 ' up IF forward = 0 THEN vz = vz + zspeed: forward = 0 CASE 80 ' down vz = vz - zspeed CASE ELSE getkey END SELECT END SUB SUB instruct SCREEN 0 CLS PRINT "3D Demo In QB BY: Devin Garner" PRINT CHR$(27); " Sidesteps left" PRINT CHR$(26); " Sidesteps right" PRINT CHR$(24); " Steps Forward" PRINT CHR$(25); " Steps Backward" PRINT PRINT "press any key to continue" SLEEP SCREEN 9, 0, 1, 0 END SUB SUB morph IF vz >= z THEN z = vz + zspeed: past = 1 'fix error and make it look right if ur pastit sx = (x - vx) / (z - vz) + srx / 2' changes the 3D variables to 2D sy = (y - vy) / (z - vz) + sry / 2' changes the 3D variables to 2D END SUB