Home » Archimedes archive » Acorn User » AU 1993-06.adf » !3DGraphic_3DGraphic » PerspDemo

PerspDemo

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1993-06.adf » !3DGraphic_3DGraphic
Filename: PerspDemo
Read OK:
File size: 03BE bytes
Load address: 0000
Exec address: 0000
File contents
   10REM     >PerspDemo
   20REM By  Dave Acton
   30REM For 32-bit machines
   40REM (c) BAU June 1993
   50:
   60MODE 0
   70OFF
   80ORIGIN 640,512
   90PROCinit
  100bank=1
  110MOUSE TO 0,0
  120REPEAT
  130 FOR ang=0 TO 359 STEP 5
  140  WAIT
  150  SYS "OS_Byte",112,bank
  160  bank=3-bank
  170  SYS "OS_Byte",113,bank
  180  CLS
  190  MOUSE mx,my,mb
  200  zoff=30+my/10
  210  IF zoff=0 zoff=1
  220  d=mx+800
  230  PRINT"d=";d'"zoff=";zoff
  240  PROCshow(ang)
  250 NEXT
  260UNTIL FALSE
  270END
  280:
  290DEF PROCinit
  300DIM vert(7,2)
  310FOR v=0 TO 7
  320 vert(v,0)=(v AND 1)-0.5
  330 vert(v,1)=((v AND 2)>>1)-0.5
  340 vert(v,2)=((v AND 4)>>2)-0.5
  350NEXT
  360ENDPROC
  370:
  380DEF PROCshow(ang)
  390FOR v=0 TO 3
  400 PROCdraw(v,v+4,ang)
  410 PROCdraw(2*v,2*v+1,ang)
  420NEXT
  430PROCdraw(0,2,ang)
  440PROCdraw(1,3,ang)
  450PROCdraw(4,6,ang)
  460PROCdraw(5,7,ang)
  470ENDPROC
  480:
  490DEF PROCdraw(v0,v1,ang)
  500PROCplot(4,v0,ang)
  510PROCplot(5,v1,ang)
  520ENDPROC
  530:
  540DEF PROCplot(code,v,ang)
  550LOCAL x2,y2,z2
  560x2=vert(v,0)*COSRAD(ang)+vert(v,2)*SINRAD(ang)
  570y2=vert(v,1)
  580z2=-vert(v,0)*SINRAD(ang)+vert(v,2)*COSRAD(ang)
  590PLOT code,d*x2/(z2+zoff),d*y2/(z2+zoff)
  600ENDPROC

�     >PerspDemo
� By  Dave Acton
� For 32-bit machines
(� (c) BAU June 1993
2:
<� 0
F�
Pȑ 640,512
Z	�init
d
bank=1
nȗ � 0,0
x�
� � ang=0 � 359 � 5
�  Ȗ
�  ș "OS_Byte",112,bank
�  bank=3-bank
�  ș "OS_Byte",113,bank
�  �
�  ȗ mx,my,mb
�  zoff=30+my/10
�  � zoff=0 zoff=1
�  d=mx+800
�  �"d=";d'"zoff=";zoff
�  �show(ang)
� �
� �
�
:
"� �init
,� vert(7,2)
6
� v=0 � 7
@ vert(v,0)=(v � 1)-0.5
J vert(v,1)=((v � 2)>>1)-0.5
T vert(v,2)=((v � 4)>>2)-0.5
^�
h�
r:
|� �show(ang)
�
� v=0 � 3
� �draw(v,v+4,ang)
� �draw(2*v,2*v+1,ang)
��
��draw(0,2,ang)
��draw(1,3,ang)
��draw(4,6,ang)
��draw(5,7,ang)
��
�:
�� �draw(v0,v1,ang)
��plot(4,v0,ang)
��plot(5,v1,ang)
�
:
� �plot(code,v,ang)
&� x2,y2,z2
0*x2=vert(v,0)*��(ang)+vert(v,2)*��(ang)
:y2=vert(v,1)
D+z2=-vert(v,0)*��(ang)+vert(v,2)*��(ang)
N(� code,d*x2/(z2+zoff),d*y2/(z2+zoff)
X�
�
00000000  0d 00 0a 14 f4 20 20 20  20 20 3e 50 65 72 73 70  |.....     >Persp|
00000010  44 65 6d 6f 0d 00 14 14  f4 20 42 79 20 20 44 61  |Demo..... By  Da|
00000020  76 65 20 41 63 74 6f 6e  0d 00 1e 19 f4 20 46 6f  |ve Acton..... Fo|
00000030  72 20 33 32 2d 62 69 74  20 6d 61 63 68 69 6e 65  |r 32-bit machine|
00000040  73 0d 00 28 17 f4 20 28  63 29 20 42 41 55 20 4a  |s..(.. (c) BAU J|
00000050  75 6e 65 20 31 39 39 33  0d 00 32 05 3a 0d 00 3c  |une 1993..2.:..<|
00000060  07 eb 20 30 0d 00 46 05  87 0d 00 50 0e c8 91 20  |.. 0..F....P... |
00000070  36 34 30 2c 35 31 32 0d  00 5a 09 f2 69 6e 69 74  |640,512..Z..init|
00000080  0d 00 64 0a 62 61 6e 6b  3d 31 0d 00 6e 0c c8 97  |..d.bank=1..n...|
00000090  20 b8 20 30 2c 30 0d 00  78 05 f5 0d 00 82 16 20  | . 0,0..x...... |
000000a0  e3 20 61 6e 67 3d 30 20  b8 20 33 35 39 20 88 20  |. ang=0 . 359 . |
000000b0  35 0d 00 8c 08 20 20 c8  96 0d 00 96 1b 20 20 c8  |5....  ......  .|
000000c0  99 20 22 4f 53 5f 42 79  74 65 22 2c 31 31 32 2c  |. "OS_Byte",112,|
000000d0  62 61 6e 6b 0d 00 a0 11  20 20 62 61 6e 6b 3d 33  |bank....  bank=3|
000000e0  2d 62 61 6e 6b 0d 00 aa  1b 20 20 c8 99 20 22 4f  |-bank....  .. "O|
000000f0  53 5f 42 79 74 65 22 2c  31 31 33 2c 62 61 6e 6b  |S_Byte",113,bank|
00000100  0d 00 b4 07 20 20 db 0d  00 be 11 20 20 c8 97 20  |....  .....  .. |
00000110  6d 78 2c 6d 79 2c 6d 62  0d 00 c8 13 20 20 7a 6f  |mx,my,mb....  zo|
00000120  66 66 3d 33 30 2b 6d 79  2f 31 30 0d 00 d2 15 20  |ff=30+my/10.... |
00000130  20 e7 20 7a 6f 66 66 3d  30 20 7a 6f 66 66 3d 31  | . zoff=0 zoff=1|
00000140  0d 00 dc 0e 20 20 64 3d  6d 78 2b 38 30 30 0d 00  |....  d=mx+800..|
00000150  e6 1a 20 20 f1 22 64 3d  22 3b 64 27 22 7a 6f 66  |..  ."d=";d'"zof|
00000160  66 3d 22 3b 7a 6f 66 66  0d 00 f0 10 20 20 f2 73  |f=";zoff....  .s|
00000170  68 6f 77 28 61 6e 67 29  0d 00 fa 06 20 ed 0d 01  |how(ang).... ...|
00000180  04 07 fd 20 a3 0d 01 0e  05 e0 0d 01 18 05 3a 0d  |... ..........:.|
00000190  01 22 0b dd 20 f2 69 6e  69 74 0d 01 2c 0f de 20  |.".. .init..,.. |
000001a0  76 65 72 74 28 37 2c 32  29 0d 01 36 0d e3 20 76  |vert(7,2)..6.. v|
000001b0  3d 30 20 b8 20 37 0d 01  40 1a 20 76 65 72 74 28  |=0 . 7..@. vert(|
000001c0  76 2c 30 29 3d 28 76 20  80 20 31 29 2d 30 2e 35  |v,0)=(v . 1)-0.5|
000001d0  0d 01 4a 1f 20 76 65 72  74 28 76 2c 31 29 3d 28  |..J. vert(v,1)=(|
000001e0  28 76 20 80 20 32 29 3e  3e 31 29 2d 30 2e 35 0d  |(v . 2)>>1)-0.5.|
000001f0  01 54 1f 20 76 65 72 74  28 76 2c 32 29 3d 28 28  |.T. vert(v,2)=((|
00000200  76 20 80 20 34 29 3e 3e  32 29 2d 30 2e 35 0d 01  |v . 4)>>2)-0.5..|
00000210  5e 05 ed 0d 01 68 05 e1  0d 01 72 05 3a 0d 01 7c  |^....h....r.:..||
00000220  10 dd 20 f2 73 68 6f 77  28 61 6e 67 29 0d 01 86  |.. .show(ang)...|
00000230  0d e3 20 76 3d 30 20 b8  20 33 0d 01 90 15 20 f2  |.. v=0 . 3.... .|
00000240  64 72 61 77 28 76 2c 76  2b 34 2c 61 6e 67 29 0d  |draw(v,v+4,ang).|
00000250  01 9a 19 20 f2 64 72 61  77 28 32 2a 76 2c 32 2a  |... .draw(2*v,2*|
00000260  76 2b 31 2c 61 6e 67 29  0d 01 a4 05 ed 0d 01 ae  |v+1,ang)........|
00000270  12 f2 64 72 61 77 28 30  2c 32 2c 61 6e 67 29 0d  |..draw(0,2,ang).|
00000280  01 b8 12 f2 64 72 61 77  28 31 2c 33 2c 61 6e 67  |....draw(1,3,ang|
00000290  29 0d 01 c2 12 f2 64 72  61 77 28 34 2c 36 2c 61  |).....draw(4,6,a|
000002a0  6e 67 29 0d 01 cc 12 f2  64 72 61 77 28 35 2c 37  |ng).....draw(5,7|
000002b0  2c 61 6e 67 29 0d 01 d6  05 e1 0d 01 e0 05 3a 0d  |,ang).........:.|
000002c0  01 ea 16 dd 20 f2 64 72  61 77 28 76 30 2c 76 31  |.... .draw(v0,v1|
000002d0  2c 61 6e 67 29 0d 01 f4  13 f2 70 6c 6f 74 28 34  |,ang).....plot(4|
000002e0  2c 76 30 2c 61 6e 67 29  0d 01 fe 13 f2 70 6c 6f  |,v0,ang).....plo|
000002f0  74 28 35 2c 76 31 2c 61  6e 67 29 0d 02 08 05 e1  |t(5,v1,ang).....|
00000300  0d 02 12 05 3a 0d 02 1c  17 dd 20 f2 70 6c 6f 74  |....:..... .plot|
00000310  28 63 6f 64 65 2c 76 2c  61 6e 67 29 0d 02 26 0e  |(code,v,ang)..&.|
00000320  ea 20 78 32 2c 79 32 2c  7a 32 0d 02 30 2a 78 32  |. x2,y2,z2..0*x2|
00000330  3d 76 65 72 74 28 76 2c  30 29 2a 9b b2 28 61 6e  |=vert(v,0)*..(an|
00000340  67 29 2b 76 65 72 74 28  76 2c 32 29 2a b5 b2 28  |g)+vert(v,2)*..(|
00000350  61 6e 67 29 0d 02 3a 10  79 32 3d 76 65 72 74 28  |ang)..:.y2=vert(|
00000360  76 2c 31 29 0d 02 44 2b  7a 32 3d 2d 76 65 72 74  |v,1)..D+z2=-vert|
00000370  28 76 2c 30 29 2a b5 b2  28 61 6e 67 29 2b 76 65  |(v,0)*..(ang)+ve|
00000380  72 74 28 76 2c 32 29 2a  9b b2 28 61 6e 67 29 0d  |rt(v,2)*..(ang).|
00000390  02 4e 28 f0 20 63 6f 64  65 2c 64 2a 78 32 2f 28  |.N(. code,d*x2/(|
000003a0  7a 32 2b 7a 6f 66 66 29  2c 64 2a 79 32 2f 28 7a  |z2+zoff),d*y2/(z|
000003b0  32 2b 7a 6f 66 66 29 0d  02 58 05 e1 0d ff        |2+zoff)..X....|
000003be