Wire Frame Graphics
Posted: Sun Jun 03, 2018 10:23 am
Hi,
Here is a conversion on a QBASIC programme I did in 1989 from Computer News Weekly:
Which is a simple wire frame cube rotating in space, requires Toolkit 2, as I used variables for the screen channels.
I did an enhanced bouncing bouncing cube based on the above:
Here is a conversion on a QBASIC programme I did in 1989 from Computer News Weekly:
Which is a simple wire frame cube rotating in space, requires Toolkit 2, as I used variables for the screen channels.
Code: Select all
10 REMark Computer Weekly Dec 1989
20 REMark QBASIC conversion to QDOS
30 :
100 rx = 60
110 ry = 25
120 cx = 200
130 cy = 200
140 inc = 0
150 t=0
160 cube_speed=5
170 ch=FOPEN('scr_256x200a80x20')
180 IF ch<0:PRINT #0,'Error ';ERNUM :STOP
185 IF VER$=='hba': COLOUR_QL
190 SCALE #ch,500,0,0
200 PAPER#ch,7
210 BORDER#ch,1,255
220 CLS#ch
230 REPeat LOOP
240 cube cx,cy,100,50,120,.1
250 END REPeat LOOP
260 :
270 DEFine PROCedure cube (cx,cy,rx,ry,h,inc)
280 DIM x(3),y(3)
290 t=t+inc
300 FOR i = 0 TO 3
310 x(i)=cx+rx*COS(t+PI*i/2)
320 y(i)=cy+ry*SIN(t+PI*i/2)
330 END FOR i
340 drawcube h,0
350 PAUSE cube_speed
360 drawcube h,7
370 END DEFine cube
380 :
390 DEFine PROCedure drawcube (h,c)
400 INK #ch,c
410 POINT #ch,x(0), y(0)
420 FOR i=1 TO 3
430 LINE#ch,x(i-1),y(i-1) TO x(i),y(i)
440 END FOR i
450 LINE #ch,x(3),y(3) TO x(0), y(0)
460 FOR i=0 TO 3
470 POINT #ch,x(i),y(i)
480 LINE_R #ch,0,0 TO 0,h
490 END FOR i
500 POINT #ch,x(0),y(0)+h
510 FOR i=1 TO 3
520 LINE #ch,x(i-1),y(i-1)+h TO x(i),y(i)+h
530 END FOR i
540 LINE #ch,x(3),y(3)+h TO x(0),y(0)+h
550 END DEFine drawcube
Code: Select all
100 Initialise
110 REPeat LOOP
120 cube cx,cy,xsize,ysize,height,inc
130 IF xflag
140 IF cx<=96: xflag=0:rinc
150 cx=cx-cube_step
160 ELSE
170 IF cx>=378: xflag=1:rinc
180 cx=cx+cube_step
190 END IF
200 IF yflag
210 IF cy>=330: yflag=0:rinc
220 cy=cy+cube_step
230 ELSE
240 IF cy<=48: yflag=1:rinc
250 cy=cy-cube_step
260 END IF
270 END REPeat LOOP
280 :
290 DEFine PROCedure Initialise
300 DIM x(3),y(3)
310 t=0
320 cube_step=1
330 rx=80
340 ry=50
350 cx=RND(100,300)
360 cy=RND(100,300)
370 xsize=100
380 ysize=50
390 height=120
400 inc=.1
410 scal=500
420 xflag=0
430 yflag=0
440 cube_speed=1
450 ch=FOPEN('scr_256x193a120x20')
460 IF VER$=="hba": COLOUR_QL
470 SCALE #ch,scal,0,0
480 PAPER#ch,7
490 INK#ch,0
500 BORDER#ch,1,255
510 CLS#ch
520 END DEFine Initialise
530 :
540 DEFine PROCedure cube (cx,cy,rx,ry,h,inc)
550 t=t+inc
560 FOR i = 0 TO 3
570 x(i)=cx+rx*COS(t+PI*i/2)
580 y(i)=cy+ry*SIN(t+PI*i/2)
590 END FOR i
600 drawcube h,0
610 PAUSE cube_speed
620 drawcube h,7
630 END DEFine cube
640 :
650 DEFine PROCedure drawcube (h,c)
655 LOCal i
660 INK #ch,c
670 POINT #ch,x(0), y(0)
680 FOR i=1TO 3
685 LINE#ch,x(i-1),y(i-1) TO x(i),y(i)
687 END FOR i
690 LINE #ch,x(3),y(3) TO x(0), y(0)
700 FOR i=0 TO 3
705 POINT #ch,x(i),y(i):LINE_R #ch,0,0 TO 0,h
707 END FOR i
710 POINT #ch,x(0),y(0)+h
720 FOR i=1 TO 3: LINE #ch,x(i-1),y(i-1)+h TO x(i),y(i)+h
725 LINE #ch,x(i-1),y(i-1)+h TO x(i),y(i)+h
727 END FOR i
730 LINE #ch,x(3),y(3)+h TO x(0),y(0)+h
740 END DEFine drawcube
750 :
760 DEFine PROCedure rinc
770 inc=RND(1,9)/10
775 cube_step=RND(1,9)
780 END DEFine rinc