ab 2d8Amos i 3d cube 3a8(Delta) 1f Niektórzy poczâtkujâcy amo-koderzy zabierajâ sië do pisania dem, nie majâc 1fûadnych podstaw, na których mogliby sië opieraê. Takie efekty jak Phongi czy 1fGouardy (tu zaznaczam, ûe sâ do zrobienia w AMOSie) spëdzajâ sen z oczu 1fnaszemu amo-koderowi. Biedaczek chce ale nie wie z jakiej strony to ugryúê. 1fMoûe na poczâtek zajmijmy sië procedurâ (lub jak kto woli rutynkâ), która 1fbëdzie generowaîa szeôcian (czy jak kto woli 3d cube). Juû widzë, jak 1fniekórzy zacznâ krytykowaê mnie, ûe w 1997 roku proponujë 3d cube jak sâ juû 1ftextured tunels, bumpmaping czy textured comanche. Ofkoz to jest prawda, ale 1fmoja procedurka ma ukazaê teoretyczne zasady podczas tworzenia 3d cube'ów. 1fNie kaûdy zaraz phongi musi pisaê. Ten szeôcian wiruje wokóî trzech osi 1f(X,Y,Z) i co wiëcej jest wypeîniany, tzn. sortuje ôciany wg. zasady od 1fdalszej do bliûszej. Nie jest to LightSource tzn. oôwietlany 3d cube dziëki 1fczemu listing jest krótszy. Polecam sië z nim zaznajomiê... przynajmniej 1fpoczâtkujâcym... 2f wasz szalony... 3b Delta/Opium^HV^FNZ 4g'listing of 3d_cube by Delta 4gCls 0 4gDim XR#(8),YR#(8),ZR#(8),ZR2#(8) 4gXM=319 4gYM=199 4gRead XO#,YO#,ZO# 4gFor K=1 To 8 4g Read XR#(K),YR#(K),ZR#(K) 4g If XR#(K)<0 or XR#(K)>XM or YR#(K)<0 or YR#(K)>YM Then End 4gNext K 4gScreen Open 0,320,256,8,Lowres 4gCurs Off : Flash Off : Cls 0 : Palette $0,$90,$A0,$B0,$C0,$D0,$E0,$F0 4gDouble Buffer : Autoback 0 4g_START: 4gX#=(X#-4)*(Pi#/180) 4gY#=(Y#+1)*(Pi#/180) 4gZ#=(Z#+2)*(Pi#/180) 4gIf X#=>360 Then End 4gFor K=1 To 8 4g YS#=YR#(K) 4g YR#(K)=YO#+(YR#(K)-YO#)*Cos(X#)+(ZR#(K)-ZO#)*Sin(X#) 4g ZR#(K)=ZO#+(ZR#(K)-ZO#)*Cos(X#)-(YS#-YO#)*Sin(X#) 4gNext 4gFor K=1 To 8 4g XS#=XR#(K) 4g XR#(K)=XO#+(XR#(K)-XO#)*Cos(Y#)-(ZR#(K)-ZO#)*Sin(Y#) 4g ZR#(K)=ZO#+(ZR#(K)-ZO#)*Cos(Y#)+(XS#-XO#)*Sin(Y#) 4gNext 4gFor K=1 To 8 4g XS#=XR#(K) 4g XR#(K)=XO#+(XR#(K)-XO#)*Cos(Z#)+(YR#(K)-YO#)*Sin(Z#) 4g YR#(K)=YO#+(YR#(K)-YO#)*Cos(Z#)-(XS#-XO#)*Sin(Z#) 4gNext K 4gGosub RYSUJ 4gGoto _START 4gRYSUJ: 4gLocate 1,1 4gFor G=1 To 8 4g ZR2#(G)=ZR#(G) 4gNext 4gSort ZR2#(0) 4gKOL=144 4gLocate 1,1 4gScreen Swap 4gCls 0 4gIf ZR#(1)=ZR#(5) Then 680 4gIf ZR#(1)>ZR#(5) Then 610 4gInk 2 : Polygon XR#(1),YR#(1) To XR#(2),YR#(2) To XR#(3),YR#(3) To 4g[do poprzedniej linii!!] XR#(4),YR#(4) To XR#(1),YR#(1) 4gGoto 680 4g610 4gInk 3 : Polygon XR#(5),YR#(5) To XR#(6),YR#(6) To XR#(7),YR#(7) To 4g[do poprzedniej linii!!] XR#(8),YR#(8) To XR#(5),YR#(5) 4g680 If ZR#(1)=ZR#(4) Then 860 4gIf ZR#(1)>ZR#(4) Then 790 4gInk 4 : Polygon XR#(1),YR#(1) To XR#(2),YR#(2) To XR#(6),YR#(6) To 4g[do poprzedniej linii!!] XR#(5),YR#(5) To XR#(1),YR#(1) 4gGoto 860 4g790 4gInk 5 : Polygon XR#(4),YR#(4) To XR#(3),YR#(3) To XR#(7),YR#(7) To 4g[do poprzedniej linii!!] XR#(8),YR#(8) To XR#(4),YR#(4) 4g860 If ZR#(1)=ZR#(2) Then Return 4gIf ZR#(1)>ZR#(2) Then 970 4gInk 6 : Polygon XR#(1),YR#(1) To XR#(4),YR#(4) To XR#(8),YR#(8) To 4g[do poprzedniej linii!!] XR#(5),YR#(5) To XR#(1),YR#(1) 4gReturn 4g970 4gInk 7 : Polygon XR#(2),YR#(2) To XR#(3),YR#(3) To XR#(7),YR#(7) To 4g[do poprzedniej linii!!] XR#(6),YR#(6) To XR#(2),YR#(2) 4gReturn 4gData 140,80,124 4gData 164,56,100,164,104,100,116,104,100,116,56,100 4gData 164,56,148,164,104,148,116,104,148,116,56,148 4g1150 End 4g'end of listing