Hier mal mein Beispiel für Raytracing: (Echt flott in deinem JavaScript Emu)
1000 ' Screen init
1010 'SCREEN 8,0:SET PAGE 1,1
1020 MODE 0: FOR k=0 TO 15:INK k,k*1.7:NEXT:INK 1,26:INK 15,1
1030 CLS
1040 '_TURBO ON
1050 ' Initialize
1060 DIM T(9),V(15),O(19,7),S(19,7),RI(3),GI(3),BI(3),I(3),Z(3),Y(3)
1070 FOR I=0 TO 9:READ T(I):NEXT I
1080 V(0)=T(0):V(1)=T(1):V(2)=T(2)
1090 V(9)=T(0)-T(3):V(10)=T(1)-T(4):V(11)=T(2)-T(5)
1100 V=SQR(V(9)*V(9)+V(10)*V(10)+V(11)*V(11))
1110 V(9)=V(9)/V:V(10)=V(10)/V:V(11)=V(11)/V
1120 V(6)=-V(9)*V(10):V(7)=1-V(10)*V(10):V(8)=-V(11)*V(10)
1130 V(3)=-(V(10)*V(8)-V(11)*V(7)):V(4)=-(V(11)*V(6)-V(9)*V(8))
1140 V(5)=-(V(9)*V(7)-V(10)*V(6)):V(15)=T(9)
1150 V(12)=T(6):V(13)=T(7):V(14)=T(8)
1160 READ MO:FOR I=0 TO MO-1:FOR J=0 TO 7:READ O(I,J):NEXT J,I
1170 READ MS:FOR I=0 TO MS-1:FOR J=0 TO 7:READ S(I,J):NEXT J,I
1180 MA=1000:MI=0.001:MD=0:PT=4
1190 FOR I=1 TO 4
1200 V=SQR(V(I*3+0)*V(I*3+0)+V(I*3+1)*V(I*3+1)+V(I*3+2)*V(I*3+2))
1210 V(I*3+0)=V(I*3+0)/V:V(I*3+1)=V(I*3+1)/V:V(I*3+2)=V(I*3+2)/V
1220 NEXT I
1230 ' Trace
1240 FOR SY=0 TO 200 STEP 4:FOR SX=0 TO 320 STEP 4:XD=0:YD=0
1250 CX=V(0):CY=V(1):CZ=V(2)
1260 VX=V(3)*(SX+XD-128)/99+V(6)*(106-SY-YD)/99-V(9)*V(15)
1270 VY=V(4)*(SX+XD-128)/99+V(7)*(106-SY-YD)/99-V(10)*V(15)
1280 VZ=V(5)*(SX+XD-128)/99+V(8)*(106-SY-YD)/99-V(11)*V(15)
1290 V=SQR(VX*VX+VY*VY+VZ*VZ)
1300 VX=VX/V:VY=VY/V:VZ=VZ/V
1310 CR=0:CG=0:CB=0:RN=0:RF=1
1320 GOSUB 1760
1330 IF CR>=1 THEN CR=0.99
1340 IF CG>=1 THEN CG=0.99
1350 IF CB>=1 THEN CB=0.99
1370 RI(XD)=CR:GI(XD)=CG:BI(XD)=CB
1380 XD=XD+1:IF XD<4 THEN 1250
1390 GOSUB 1470:XD=0
1400 YD=YD+1:IF YD<4 THEN 1250
1440 IF STRIG(0) THEN GOTO 1460
1450 NEXT SX,SY
1460 GOTO 1460
1470 ' Draw
1490 'MAKE RGB DATA FOR SCREEN8 AND WRITE IT ON THE SCREEN
1500 FOR XD=0 TO 3
1510 CC%=(RI(XD)+GI(XD)+BI(XD))/3*15:IF CC%=15 THEN CC%=1 ELSE IF CC%=1 THEN CC%=15
1520 PLOT (SX+XD)*2,400-((SY+YD)*2),CC%
1530 NEXT XD
1540 RETURN
1760 ' Pixel
1770 TT=MA
1780 FOR N=0 TO MO-1
1790 GOSUB 1870
1800 IF TT>T AND T>MI THEN TT=T:TN=N:LX=NX:LY=NY:LZ=NZ
1810 NEXT N
1820 IF TT=MA THEN 1860
1830 CX=CX+TT*VX:CY=CY+TT*VY:CZ=CZ+TT*VZ:N=TN
1840 GOSUB 2150
1850 IF F=1 THEN GOTO 1760
1860 RETURN
1870 ' Cross
1880 RX=CX-O(N,0):RY=CY-O(N,1):RZ=CZ-O(N,2)
1890 A=O(N,3):B=O(N,4):C=O(N,5)
1900 ON O(N,6)+1 GOTO 1920,2030
1910 GOTO 1920
1920 ' Box
1930 IF VX=0 THEN T1=MA ELSE IF RX<0 THEN T1=-(RX+A)/VX ELSE T1=-(RX-A)/VX
1940 IF VY=0 THEN T2=MA ELSE IF RY<0 THEN T2=-(RY+B)/VY ELSE T2=-(RY-B)/VY
1950 IF VZ=0 THEN T3=MA ELSE IF RZ<0 THEN T3=-(RZ+C)/VZ ELSE T3=-(RZ-C)/VZ
1960 IF ABS(RY+T1*VY)>B OR ABS(RZ+T1*VZ)>C THEN T1=MA
1970 IF ABS(RZ+T2*VZ)>C OR ABS(RX+T2*VX)>A THEN T2=MA
1980 IF ABS(RX+T3*VX)>A OR ABS(RY+T3*VY)>B THEN T3=MA
1990 IF T1<=T2 AND T1<=T3 THEN T=T1:NX=-VX/ABS(VX):NY=0:NZ=0
2000 IF T2<=T3 AND T2<=T1 THEN T=T2:NY=-VY/ABS(VY):NZ=0:NX=0
2010 IF T3<=T1 AND T3<=T2 THEN T=T3:NZ=-VZ/ABS(VZ):NX=0:NY=0
2020 RETURN
2030 ' Ball
2040 AA=VX*VX*A+VY*VY*B+VZ*VZ*C
2050 BB=RX*VX*A+RY*VY*B+RZ*VZ*C
2060 CC=RX*RX*A+RY*RY*B+RZ*RZ*C-1
2070 DD=BB*BB-AA*CC
2080 IF DD<0 THEN T=MA:GOTO 2140
2090 T1=(-BB-SQR(DD))/AA:T2=(-BB+SQR(DD))/AA
2100 IF T1<T2 THEN T=T1 ELSE T=T2
2110 NX=A*(RX+T*VX):NY=B*(RY+T*VY):NZ=C*(RZ+T*VZ)
2120 M=SQR(NX*NX+NY*NY+NZ*NZ)
2130 NX=NX/M:NY=NY/M:NZ=NZ/M
2140 RETURN
2150 ' Shade
2160 SH=O(N,7):REM 0=Silber,1=Stahl,2=Rotes Plastik, 3=Graues Plastik, 4=Blaues Plastik,5=Graues Plastik,6=Chrom
2170 IF SH<>-1 THEN 2220
2180 PX=INT(ABS(CX+100)/PT-(CX+100<0))
2190 PY=INT(ABS(CY+100)/PT-(CY+100<0))
2200 PZ=INT(ABS(CZ+100)/PT-(CZ+100<0))
2210 SH=(PX+PY+PZ) MOD 2
2220 SR=S(SH,0):SG=S(SH,1):SB=S(SH,2)
2230 SA=S(SH,3):SD=S(SH,4):SF=S(SH,5)
2240 SP=S(SH,6):SE=S(SH,7)
2250 JX=V(12)-VX:JY=V(13)-VY:JZ=V(14)-VZ
2260 JN=SQR(JX*JX+JY*JY+JZ*JZ)
2270 SM=(LX*JX+LY*JY+LZ*JZ)/JN
2280 IF SM<0 THEN SM=0
2290 FOR P=1 TO SE:SM=SM*SM:NEXT P
2300 VN=-2*(LX*VX+LY*VY+LZ*VZ)
2310 WX=VX+VN*LX:WY=VY+VN*LY:WZ=VZ+VN*LZ
2320 VX=V(12):VY=V(13):VZ=V(14)
2330 SN=LX*VX+LY*VY+LZ*VZ
2340 IF SN<0 THEN SN=0
2350 FOR N=0 TO MO-1
2360 GOSUB 1870
2370 IF MA>T AND T>MI THEN SN=0:SM=0
2380 NEXT N
2390 CR=CR+(SR*(SA+SD*SN)+SP*SM)*RF
2400 CG=CG+(SG*(SA+SD*SN)+SP*SM)*RF
2410 CB=CB+(SB*(SA+SD*SN)+SP*SM)*RF
2420 IF SF=0 AND RN<4 THEN F=0:GOTO 2450
2430 F=1:RF=RF*SF:RN=RN+1
2440 VX=WX:VY=WY:VZ=WZ
2450 RETURN
5000 ' Picture data
5010 DATA 20, 40, 20
5020 DATA 0, 0, 0
5030 DATA -8, 9, -3
5040 DATA 6
5050 DATA 6
5060 DATA 2, 0, 2
5070 DATA .2, .2, .2
5080 DATA 1, 2:REM Shader lower ball
5090 DATA -2, 2, 2
5100 DATA .2, .2, .2
5110 DATA 1, 3:REM Shader left grey ball
5120 DATA -6, 4, 2
5130 DATA .2, .2, .2
5140 DATA 1, 4:REM Shader blue ball
5150 DATA -2, 2, -2
5160 DATA .2, .2, .2
5170 DATA 1, 5:REM Shader right grey ball
5180 DATA -6, 4, -6
5190 DATA .2, .2, .2
5200 DATA 1, 6
5210 DATA 0, -2, 0
5220 DATA 20, 1, 20
5230 DATA 0, -1
5240 DATA 7
5250 DATA .9, .9, .9
5260 DATA .5, .4, .6
5270 DATA .7, 6
5280 DATA .0, .9, .0
5290 DATA .5, .4, .6
5300 DATA .7, 6
5310 DATA .9, .0, .0
5320 DATA .3, .6, 0
5330 DATA 0, 0
5340 DATA .9, .9, .9
5350 DATA .3, .6, 0
5360 DATA .6, 8
5370 DATA .0, .0, .9
5380 DATA .3, .6, 0
5390 DATA .6, 8
5400 DATA .9, .9, .9
5410 DATA .3, .6, 0
5420 DATA .6, 6
5430 DATA .0, .0, .0
5440 DATA ,3, .6, 1
5450 DATA .9, 8