' ** sterioscopic VERS2.1 FEB/98 BY NICK VAN VLIET 3D SCULPTURE ' ** ' TO VIEW 3D: HOLD A LONG PLAIN SHEET VERTICALLY BETWEEN THE CENTER OF THE ' SCREEN AND YOUR NOSE SO THAT EACH EYE SEES ONE OBJECT AND THE MIND SEES A 3D ' PROJECTION OF THE DESIRED EFFECT. DEFINT H-Z 'INTEGERS DEFDBL A-G 'DOUBLES DECLARE SUB DrawCcircle (xx, yy) 'DRAW CIRCLE CONST PI = 3.141592654# SCREEN 12 'high resolution graphics mode 640X480 RANDOMIZE TIMER 'seed random number generator MaxX = 319 'half width (starts at 0) MaxY = 239 'half height (starts at 0) SegX = 319 SegY = 239 OFFSET = 340 DO 'start of main loop DrawCcircle SegX / 2 - 3, SegY 'contrast background DrawCcircle SegX / 2 + OFFSET - 1, SegY COLOR RND * 14 + 1 'set current color to random (1 to 15) COLOR RND * 8 + 7 'set current color to random (7 to 15) DO DO x1 = RND * MaxX 'set X1 to a random (0 to max) y1 = RND * MaxY 'ditto for Y1 x2 = RND * MaxX 'ditto for X2 y2 = RND * MaxY 'ditto for Y2 LOOP WHILE ((ABS(x2 - x1) < 1) OR (ABS(y2 - y1) < 1)) LOOP WHILE (ABS(ABS((y2 - y1) / (x2 - x1)) - 1) < 1) OR (ABS((y2 - y1) / (x2 - x1)) = 0) DO StepX1 = RND * 2 - 1 'set StepX1 to random (-2 to 2) StepY1 = RND * 2 - 1 'ditto for StepY1 StepX2 = RND * 2 - 1 'ditto for StepX2 StepY2 = RND * 2 - 1 'ditto for StepY2 LOOP WHILE (StepX1 = 0 OR StepY1 = 0 OR StepX2 = 0 OR StepY2 = 0) COLOR RND * 13 + 1 'set current color to random (1 to 14) FOR Times = 1 TO 7 'do 7 sets of lines THICK LINE\ X3 = 319 - x1 'calculate points for X4 = 319 - x2 '16 OBJECTS X5 = x1 + 320 '8 X values X6 = x2 + 320 X7 = X3 + 320 X8 = X4 + 320 Y3 = 239 - y1 '8 Y values Y4 = 239 - y2 Y5 = y1 + 240 Y6 = y2 + 240 Y7 = Y3 + 240 Y8 = Y4 + 240 LINE (x1, y1)-(x2, y2) 'draw the lines \ bottom LINE (X3, y1)-(X4, y2) ' \/ bottom LINE (x1, Y3)-(x2, Y4) ' \/ \ top LINE (X3, Y3)-(X4, Y4) ' \/ /\ TOP PAIR B = 15: A = B: C = 0: D = -2 'd=12 LINE (X5 + C, y1)-(X6 + A, y2) '\/ /\ \ LINE (X7 + D, y1)-(X8 + B, y2) '\/ /\ \/ -3D BOTTOM LINE (X5 + C, Y3)-(X6 + A, Y4) ' LINE (X7 + D, Y3)-(X8 + B, Y4) '\/ /\ \/ /\ 3D TOP LINE (x1, Y5)-(x2, Y6) '\ LINE (X3, Y5)-(X4, Y6) '\/ LINE (x1, Y7)-(x2, Y8) '\/ / LINE (X3, Y7)-(X4, Y8) '\/ /\ BOTTOM PAIR LINE (X5 + C, Y5)-(X6 + A, Y6) '\/ /\ \ LINE (X7 + D, Y5)-(X8 + B, Y6) '\/ /\ \/ -3D BOTTOM' LINE (X5 + C, Y7)-(X6 + A, Y8) '\/ /\ \/ / LINE (X7 + D, Y7)-(X8 + B, Y8) '\/ /\ \/ /\ 3D TOP LINE (280, 0)-(355, 600), 0, BF LINE (0, 0)-(30, 600), 0, BF LINE (603, 0)-(660, 600), 0, BF x1 = x1 + StepX1 * (RND + 1.5) 'adjust with step value y1 = y1 + StepY1 * (RND + 1.5) 'ditto x2 = x2 + StepX2 * (RND + 1.5) 'ditto y2 = y2 + StepY2 * (RND + 1.5) 'ditto NEXT Times cnt = cnt + 1 'count the number of loops IF cnt = 5 THEN 'after 5 loops cnt = 0 'reset loop count FOR I = 0 TO 9000: FOR H = 0 TO 80: NEXT H: NEXT I 'pause CLS 'clear the screen END IF Stroke$ = INKEY$ 'get any keystrokes IF LEN(Stroke$) THEN KeyVal = ASC(Stroke$) 'convert to an integer LOOP WHILE KeyVal <> 27 'QUIT: escape is pressed END SUB DrawCcircle (xx, yy) scale = 5 x1 = 3 * scale y1 = 0 FOR II = 0 TO 360 x2 = 10 * COS(II / 180 * PI) 'SCALE= y2 = 10 * SIN(II / 180 * PI) LINE (xx, yy)-(x2 + xx, y2 + yy), 1 NEXT II END SUB 1