home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / E / TFF-A32R.LZX / AmigaE3.2a / Src / Tools / Vector / Vector.e < prev   
Encoding:
Text File  |  1992-09-02  |  5.0 KB  |  174 lines

  1. OPT MODULE
  2.  
  3. EXPORT PROC polygon3d(list:PTR TO LONG,col=1)
  4.   DEF n,i,sx,sy,ox,oy,f=FALSE
  5.   n:=ListLen(list)/3
  6.   FOR i:=1 TO n
  7.     sx,sy:=vec3d(list[]++,list[]++,list[]++)
  8.     IF f THEN Line(ox,oy,sx,sy,col) ELSE f:=TRUE
  9.     ox:=sx; oy:=sy;
  10.   ENDFOR
  11. ENDPROC
  12.  
  13. EXPORT PROC init3d(phi=75,theta=40)
  14.     LEA    sintab(PC),A0        /* uses A0,A1,D0 */
  15.     LEA    c1(PC),A1
  16.     MOVE.L    phi,D0
  17.     LSL.W    #1,D0
  18.     MOVE.W    0(A0,D0.W),6(A1)
  19.     ADD.W    #180,D0
  20.     MOVE.W    0(A0,D0.W),2(A1)
  21.     MOVE.L    theta,D0
  22.     LSL.W    #1,D0
  23.     MOVE.W    0(A0,D0.W),4(A1)
  24.     ADD.W    #180,D0
  25.     MOVE.W    0(A0,D0.W),(A1)
  26. ENDPROC
  27.  
  28. EXPORT PROC setpers3d(irho=1000,id=400)        /* for average size rho:d = 5:2 */
  29.     LEA    rho(PC),A0
  30.     MOVE.W    irho.W,(A0)
  31.     MOVE.W    id.W,2(A0)
  32. ENDPROC
  33.  
  34. EXPORT PROC setmiddle3d(x=160,y=128)
  35.     LEA    midx(PC),A0
  36.     MOVE.W    x.W,(A0)
  37.     MOVE.W    y.W,2(A0)
  38. ENDPROC
  39.  
  40. c1:    INT    $00c2
  41. c2:    INT    $0045
  42. s1:    INT    $00a3
  43. s2:    INT    $00f5
  44. rho:    INT    2000
  45. d:    INT    900
  46. midx:    INT    160
  47. midy:    INT    128
  48.  
  49. EXPORT PROC vec3d(x,y,z)
  50.     MOVE.L    x,D0
  51.     MOVE.L    y,D1
  52.     MOVE.L    z,D2
  53.     MOVE.L    A4,-(A7)
  54.     MOVE.W    c1(PC),D3
  55.     MOVE.W    c2(PC),D4
  56.     MOVE.W    s1(PC),D5
  57.     MOVE.W    s2(PC),D6
  58.     MOVE    D0,D7            /* EXPECTS X,Y,Z IN D0-D2 */
  59.     MULS    D5,D7            /* TRASHES ALL REGS BUT A5-A7 */
  60.     ASR.L    #8,D7
  61.     MOVE    D7,A0            /* TEMP1 = X*S1 */
  62.     MOVE    D1,D7
  63.     MULS    D3,D7
  64.     ASR.L    #8,D7
  65.     SUB    A0,D7
  66.     MOVE    D7,A2            /* XE = Y*C1-TEMP1 */
  67.     MOVE    D1,D7
  68.     MULS    D5,D7
  69.     ASR.L    #8,D7
  70.     MULS    D4,D7
  71.     ASR.L    #8,D7
  72.     MOVE    D7,A0            /* TEMP1 = Y*S1*C2 */
  73.     MOVE    D0,D7
  74.     MULS    D3,D7
  75.     ASR.L    #8,D7
  76.     MULS    D4,D7
  77.     ASR.L    #8,D7
  78.     MOVE    D7,A1            /* TEMP2 = X*C1*C2 */
  79.     MOVE    D2,D7
  80.     MULS    D6,D7
  81.     ASR.L    #8,D7
  82.     SUB    A0,D7
  83.     SUB    A1,D7
  84.     MOVE    D7,A3            /* YE = Z*S2-TEMP1-TEMP2 */
  85.     MULS    D6,D0
  86.     ASR.L    #8,D0
  87.     MULS    D3,D0
  88.     ASR.L    #8,D0
  89.     MOVE    D0,A0            /* TEMP1 = X*S2*C1 */
  90.     MULS    D6,D1
  91.     ASR.L    #8,D1
  92.     MULS    D5,D1
  93.     ASR.L    #8,D1
  94.     MOVE    D1,A1            /* TEMP2 = Y*S2*S1 */
  95.     NEG    D2
  96.     MULS    D4,D2
  97.     ASR.L    #8,D2
  98.     ADD    rho(PC),D2
  99.     SUB    A0,D2
  100.     SUB    A1,D2            /* ZE(D2) = -Z*C2+RHO-TEMP1-TEMP2 */
  101.     MOVE    A2,D3
  102.     MOVE    A3,D4
  103.     MOVE    d(PC),D0
  104.     MOVE    D0,D1
  105.     MULS    D3,D0
  106.     DIVS    D2,D0
  107.     ADD    midx(PC),D0        /* SX(D0) = D*XE/ZE+160 */
  108.     NEG    D1
  109.     MULS    D4,D1
  110.     DIVS    D2,D1
  111.     ADD    midy(PC),D1        /* SY(D1) = -D*YE/ZE+128 */
  112.     MOVE.L    (A7)+,A4
  113.     EXT.L    D0
  114.     EXT.L    D1
  115. ENDPROC D0
  116.  
  117. sintab:    INT    $0000,$0004,$0008,$000D,$0011,$0016,$001A,$001F
  118.     INT    $0023,$0027,$002C,$0030,$0035,$0039,$003D,$0041
  119.     INT    $0046,$004A,$004E,$0053,$0057,$005B,$005F,$0063
  120.     INT    $0067,$006B,$006F,$0073,$0077,$007B,$007F,$0083
  121.     INT    $0087,$008A,$008E,$0092,$0095,$0099,$009C,$00A0
  122.     INT    $00A3,$00A7,$00AA,$00AD,$00B1,$00B4,$00B7,$00BA
  123.     INT    $00BD,$00C0,$00C3,$00C6,$00C8,$00CB,$00CE,$00D0
  124.     INT    $00D3,$00D5,$00D8,$00DA,$00DC,$00DF,$00E1,$00E3
  125.     INT    $00E5,$00E7,$00E8,$00EA,$00EC,$00EE,$00EF,$00F1
  126.     INT    $00F2,$00F3,$00F5,$00F6,$00F7,$00F8,$00F9,$00FA
  127.     INT    $00FB,$00FB,$00FC,$00FD,$00FD,$00FE,$00FE,$00FE
  128.     INT    $00FE,$00FE,$00FF,$00FE,$00FE,$00FE,$00FE,$00FE
  129.     INT    $00FD,$00FD,$00FC,$00FB,$00FB,$00FA,$00F9,$00F8
  130.     INT    $00F7,$00F6,$00F5,$00F3,$00F2,$00F1,$00EF,$00EE
  131.     INT    $00EC,$00EA,$00E8,$00E7,$00E5,$00E3,$00E1,$00DF
  132.     INT    $00DC,$00DA,$00D8,$00D5,$00D3,$00D0,$00CE,$00CB
  133.     INT    $00C8,$00C6,$00C3,$00C0,$00BD,$00BA,$00B7,$00B4
  134.     INT    $00B1,$00AD,$00AA,$00A7,$00A3,$00A0,$009C,$0099
  135.     INT    $0095,$0092,$008E,$008A,$0087,$0083,$007F,$007B
  136.     INT    $0077,$0073,$006F,$006B,$0067,$0063,$005F,$005B
  137.     INT    $0057,$0053,$004E,$004A,$0046,$0041,$003D,$0039
  138.     INT    $0035,$0030,$002C,$0027,$0023,$001F,$001A,$0016
  139.     INT    $0011,$000D,$0008,$0004,$0000,$FFFC,$FFF8,$FFF3
  140.     INT    $FFEF,$FFEA,$FFE6,$FFE1,$FFDD,$FFD9,$FFD4,$FFD0
  141.     INT    $FFCB,$FFC7,$FFC3,$FFBF,$FFBA,$FFB6,$FFB2,$FFAD
  142.     INT    $FFA9,$FFA5,$FFA1,$FF9D,$FF99,$FF95,$FF91,$FF8D
  143.     INT    $FF89,$FF85,$FF81,$FF7D,$FF79,$FF76,$FF72,$FF6E
  144.     INT    $FF6B,$FF67,$FF64,$FF60,$FF5D,$FF59,$FF56,$FF53
  145.     INT    $FF4F,$FF4C,$FF49,$FF46,$FF43,$FF40,$FF3D,$FF3A
  146.     INT    $FF38,$FF35,$FF32,$FF30,$FF2D,$FF2B,$FF28,$FF26
  147.     INT    $FF24,$FF21,$FF1F,$FF1D,$FF1B,$FF19,$FF18,$FF16
  148.     INT    $FF14,$FF12,$FF11,$FF0F,$FF0E,$FF0D,$FF0B,$FF0A
  149.     INT    $FF09,$FF08,$FF07,$FF06,$FF05,$FF05,$FF04,$FF03
  150.     INT    $FF03,$FF02,$FF02,$FF02,$FF02,$FF02,$FF01,$FF02
  151.     INT    $FF02,$FF02,$FF02,$FF02,$FF03,$FF03,$FF04,$FF05
  152.     INT    $FF05,$FF06,$FF07,$FF08,$FF09,$FF0A,$FF0B,$FF0D
  153.     INT    $FF0E,$FF0F,$FF11,$FF12,$FF14,$FF16,$FF18,$FF19
  154.     INT    $FF1B,$FF1D,$FF1F,$FF21,$FF24,$FF26,$FF28,$FF2B
  155.     INT    $FF2D,$FF30,$FF32,$FF35,$FF38,$FF3A,$FF3D,$FF40
  156.     INT    $FF43,$FF46,$FF49,$FF4C,$FF4F,$FF53,$FF56,$FF59
  157.     INT    $FF5D,$FF60,$FF64,$FF67,$FF6B,$FF6E,$FF72,$FF76
  158.     INT    $FF79,$FF7D,$FF81,$FF85,$FF89,$FF8D,$FF91,$FF95
  159.     INT    $FF99,$FF9D,$FFA1,$FFA5,$FFA9,$FFAD,$FFB2,$FFB6
  160.     INT    $FFBA,$FFBE,$FFC3,$FFC7,$FFCB,$FFD0,$FFD4,$FFD9
  161.     INT    $FFDD,$FFE1,$FFE6,$FFEA,$FFEF,$FFF3,$FFF8,$FFFC
  162.     INT    $0000,$0004,$0008,$000D,$0011,$0016,$001A,$001F
  163.     INT    $0023,$0027,$002C,$0030,$0035,$0039,$003D,$0041
  164.     INT    $0046,$004A,$004E,$0053,$0057,$005B,$005F,$0063
  165.     INT    $0067,$006B,$006F,$0073,$0077,$007B,$007F,$0083
  166.     INT    $0087,$008A,$008E,$0092,$0095,$0099,$009C,$00A0
  167.     INT    $00A3,$00A7,$00AA,$00AD,$00B1,$00B4,$00B7,$00BA
  168.     INT    $00BD,$00C0,$00C3,$00C6,$00C8,$00CB,$00CE,$00D0
  169.     INT    $00D3,$00D5,$00D8,$00DA,$00DC,$00DF,$00E1,$00E3
  170.     INT    $00E5,$00E7,$00E8,$00EA,$00EC,$00EE,$00EF,$00F1
  171.     INT    $00F2,$00F3,$00F5,$00F6,$00F7,$00F8,$00F9,$00FA
  172.     INT    $00FB,$00FB,$00FC,$00FD,$00FD,$00FE,$00FE,$00FE
  173.     INT    $00FE,$00FE
  174.