From f41192a52aa561486b5ca2e3e602f4999666919b Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sat, 22 Aug 2020 19:00:03 +0200 Subject: [PATCH] added cube3d-gfx example --- examples/c64graphics.p8 | 4 ++ examples/compiled/cube3d-gfx.prg | Bin 0 -> 4133 bytes examples/compiled/cube3d-sprites.prg | Bin 7370 -> 7366 bytes examples/compiled/cube3d.prg | Bin 3332 -> 3314 bytes examples/compiled/examples.d64 | Bin 174848 -> 174848 bytes examples/cube3d-gfx.p8 | 95 +++++++++++++++++++++++++++ examples/cube3d-sprites.p8 | 6 +- examples/cube3d.p8 | 6 +- 8 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 examples/compiled/cube3d-gfx.prg create mode 100644 examples/cube3d-gfx.p8 diff --git a/examples/c64graphics.p8 b/examples/c64graphics.p8 index 31cbe6da3..3bd9c287d 100644 --- a/examples/c64graphics.p8 +++ b/examples/c64graphics.p8 @@ -13,6 +13,10 @@ graphics { ; enable bitmap screen, erase it and set colors to black/white. c64.SCROLY |= %00100000 c64.VMCSB = (c64.VMCSB & %11110000) | %00001000 ; $2000-$3fff + clear_screen() + } + + sub clear_screen() { memset(bitmap_address, 320*200/8, 0) c64scr.clear_screen($10, 0) ; pixel color $1 (white) backround $0 (black) } diff --git a/examples/compiled/cube3d-gfx.prg b/examples/compiled/cube3d-gfx.prg new file mode 100644 index 0000000000000000000000000000000000000000..5e4a12d97f1bbd685974708e5d7f5a6b22027d10 GIT binary patch literal 4133 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 delta 1296 zcmaiyO=uHA7=~w4x|wX!O@sYOf2^~KwTTuQQNe(UwoPo>SxFlUo+QO07DQUGil?oI z6%+!NRZ5_N5<1d7)JskkOA(}pAe(yh;K55Ncrc!nBGj2}w@GS(8#2j!^UOQ%_wHRJLiKrbY{Z^?niC6YyVB^{an^-FYj zo@CjGe)@LSfx#9#%tgEalPDTb05lwnMq`mgUvvyzM&R5a8W``7NGOnqkHv0A5sTM3QSxbSO*1laP_ipuLS)h!Z4PbX3a6!L^$S-S|Cnev0sCm-oz%n6IRT8%+j zAL(S+aSI!&h4B;XO&cu?YqhW%HWVK*eeByv znl>gNX<~but-aN4xEa%EF*R*8FpTEEAM8;ZGFPCM-gusl(cTTOeghR$63V=`8Cl zZ57QHzj8*gep|*-amPrxi~J_WVbP3}-hJrNKG=^ru^EyYp`mHt?Y&)WUJ=7}+6Nh8 zfg<47F2GYJQqf)|@&umeu=W-Po5E(^MPV81Pt(8c_+8^N)_%b&E$?YGf@c}0d$tVd wq3;^w1vkjua;%ElwBtsu-uuO7f3}NWNpE(wZ|$!+CHJ@^#_=2e3}+<&0@q{*#{d8T diff --git a/examples/compiled/cube3d.prg b/examples/compiled/cube3d.prg index f8bc292cee7970ecb4125c9693ec657fb9d443fc..4cf0a0bb72f401f9b4f48e4954f0dde9444a90a0 100644 GIT binary patch delta 1740 zcmb_cZD?Cn7``7dxk5{w}J6bDt1iW*!R4Fj00EPcul1_Tv3ey9vjav>LSg- z8~c4rreFaWuYy847oS%W2Zr$AsqkhslCVm{4=C!ax63iBF2HuNMW%;M z!A?i$FlaP^}55&|HEO`;OYNj@Wgh5Y*BTCS{vD=Jn8#Poqu$1o4Zf{ zLA@A@#aQq?c}eMc>Wcb>qg={3N~Jrc@@Pgb-5HI|n+^7@8vD{sRsT`Fc1ul6Y{g$A z*OWI7y3~=c`_@~g@wb&E8}TlbEcdO;EWF6Z>~Dz)nRQJV=||8)2z8v1^}{G5uN@&# z_o2t;praU;MPuLTS2^LGJkl>CJ%=*RwJch@iVCwxuT%<@eD3agWCiJ~D5plY-rUT1 z3oESN@A?WVtfDjb-(tx43L0NV<9EqD_g+UxyA&opo_1GA%hUU-VKU$u6<;Pf&-ESc4Rn+1pMm6$Oj^`{Fe;&3;UnlKrY^E2e0xGA^?ItObmc-ei;X7VE2`VB;2z b(OHTeRONV)yxS5M=dRyqiHgqKJ}C4D3d`08 delta 1718 zcmchXUuaWT9LMj?4L3KbP43B6n>77%+B_^)w}#1>ZLHI3W1B^qOvXSML{_B^EtbJv z(?RbZ#0$xe13Ol58CQBMseh`DfEV;F4J>zz!F=%1X&tQV_GHt{?00T+x3Z?MyWyVv z&iQ?Qzw{`~B-5e228&YffAh)f{d{8a8e1AfP2R zM@PI@TGp8|bp|$^jGT*qA*66LagxEYk!W;e=wxs7Jv@M!{m1ap_Xmf%FiEoGLZ{nI zutpxS{&anEQ_|V8Gaa^R%q(lr%<>VPG33E~N1fie1$c)7hb^E%h5-s3%C~QuA)+?} zanK@elC!p6J1^lRnXv^ojE9!-+!n;Vq#gn7>fkJ6l+*|{p(I8L9QY3}g!OPi8!wSj zuEhaMPw3JGuAb=%XC^pGqmDI5VA4Nx!9Lh!6Vylf{>{61&GPKl8AEPS2dMjy=`NA| z_WE9@?7=iW#|GL=QMbm(yv%EY5^$@SMs?9Bm7gmd5MWx`Twi+94$5>|%;821oKS6} zSi6M{|BG48q{RV_2hKG|rOzY;5Hyn%)K(fBuwom_@KMHZG26=6O|cdW0~zV9NBWP9 zlquu1pzfrxyR6v8GCY(KEoNI8%@l+CW|ShdvYX0LzuH@?anY19DU<{5RsI2CWIy?uZ}+E6@975Kk|Xf;eWbpt+(X(M%3Y*6ltqL;L$H0h z+XH%0JmO~HYEik8xJB+KmRzU!KgsR3ILC)b3J z4(t+#ABI<(uHqkS_q1q})Ooe&q&QxsCF7ky5MW7s)ryw%001Sw}fBT0Og-apxfB==^boYm7ZduDCuu^?3z9 zLf0$#muQwP=ht8~Qp*pRGW;9hD!K}bDcxp#$Qpvq8X|{FaJA|NAo4m)6951J diff --git a/examples/compiled/examples.d64 b/examples/compiled/examples.d64 index 72bd4da3b877c98e2b6de04f4f20d26a930c6ef9..115d6ed5b6d4e85efcf6f00f05531f70ca3801e2 100644 GIT binary patch delta 7933 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 delta 5250 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 diff --git a/examples/cube3d-gfx.p8 b/examples/cube3d-gfx.p8 new file mode 100644 index 000000000..9b34ffcb8 --- /dev/null +++ b/examples/cube3d-gfx.p8 @@ -0,0 +1,95 @@ +%import c64lib +%import c64utils +%import c64graphics + + +main { + + const uword width = 255 + const uword height = 200 + + ; vertices + word[] xcoor = [ -100, -100, -100, -100, 100, 100, 100, 100 ] + word[] ycoor = [ -100, -100, 100, 100, -100, -100, 100, 100 ] + word[] zcoor = [ -100, 100, -100, 100, -100, 100, -100, 100 ] + + ; storage for rotated coordinates + word[len(xcoor)] rotatedx + word[len(ycoor)] rotatedy + word[len(zcoor)] rotatedz + + ; edges + ubyte[] edgesFrom = [ 0, 2, 6, 4, 1, 3, 7, 5, 0, 2, 6, 4] + ubyte[] edgesTo = [ 2, 6, 4, 0, 3, 7, 5, 1, 1, 3, 7, 5] + + + sub start() { + uword anglex + uword angley + uword anglez + + graphics.enable_bitmap_mode() + + + repeat { + rotate_vertices(msb(anglex), msb(angley), msb(anglez)) + graphics.clear_screen() + draw_lines() + anglex-=500 + angley+=217 + anglez+=452 + + while c64.RASTER!=255 { + } + while c64.RASTER!=254 { + } + } + } + + sub rotate_vertices(ubyte ax, ubyte ay, ubyte az) { + ; rotate around origin (0,0,0) + + ; set up the 3d rotation matrix values + word wcosa = cos8(ax) + word wsina = sin8(ax) + word wcosb = cos8(ay) + word wsinb = sin8(ay) + word wcosc = cos8(az) + word wsinc = sin8(az) + + word wcosa_sinb = wcosa*wsinb / 128 + word wsina_sinb = wsina*wsinb / 128 + + word Axx = wcosa*wcosb / 128 + word Axy = (wcosa_sinb*wsinc - wsina*wcosc) / 128 + word Axz = (wcosa_sinb*wcosc + wsina*wsinc) / 128 + word Ayx = wsina*wcosb / 128 + word Ayy = (wsina_sinb*wsinc + wcosa*wcosc) / 128 + word Ayz = (wsina_sinb*wcosc - wcosa*wsinc) / 128 + word Azx = -wsinb + word Azy = wcosb*wsinc / 128 + word Azz = wcosb*wcosc / 128 + + ubyte i + for i in 0 to len(xcoor)-1 { + ; don't normalize by dividing by 128, instead keep some precision for perspective calc later + rotatedx[i] = (Axx*xcoor[i] + Axy*ycoor[i] + Axz*zcoor[i]) + rotatedy[i] = (Ayx*xcoor[i] + Ayy*ycoor[i] + Ayz*zcoor[i]) + rotatedz[i] = (Azx*xcoor[i] + Azy*ycoor[i] + Azz*zcoor[i]) + } + } + + sub draw_lines() { + ubyte i + for i in len(edgesFrom) -1 downto 0 { + ubyte vFrom = edgesFrom[i] + ubyte vTo = edgesTo[i] + word persp1 = 256 + rotatedz[vFrom]/256 + word persp2 = 256 + rotatedz[vTo]/256 + graphics.line(rotatedx[vFrom] / persp1 + 160.w as uword, + rotatedy[vFrom] / persp1 + 100 as ubyte, + rotatedx[vTo] / persp2 + 160.w as uword, + rotatedy[vTo] / persp2 + 100 as ubyte) + } + } +} diff --git a/examples/cube3d-sprites.p8 b/examples/cube3d-sprites.p8 index 56d388edc..1bf101898 100644 --- a/examples/cube3d-sprites.p8 +++ b/examples/cube3d-sprites.p8 @@ -65,9 +65,9 @@ main { const uword height = 200 ; vertices - byte[] xcoor = [ -100, -100, -100, -100, 100, 100, 100, 100 ] - byte[] ycoor = [ -100, -100, 100, 100, -100, -100, 100, 100 ] - byte[] zcoor = [ -100, 100, -100, 100, -100, 100, -100, 100 ] + word[] xcoor = [ -100, -100, -100, -100, 100, 100, 100, 100 ] + word[] ycoor = [ -100, -100, 100, 100, -100, -100, 100, 100 ] + word[] zcoor = [ -100, 100, -100, 100, -100, 100, -100, 100 ] ; storage for rotated coordinates word[len(xcoor)] rotatedx diff --git a/examples/cube3d.p8 b/examples/cube3d.p8 index 84e2117ed..42c44a33a 100644 --- a/examples/cube3d.p8 +++ b/examples/cube3d.p8 @@ -7,9 +7,9 @@ main { const uword height = 25 ; vertices - byte[] xcoor = [ -40, -40, -40, -40, 40, 40, 40, 40 ] - byte[] ycoor = [ -40, -40, 40, 40, -40, -40, 40, 40 ] - byte[] zcoor = [ -40, 40, -40, 40, -40, 40, -40, 40 ] + word[] xcoor = [ -40, -40, -40, -40, 40, 40, 40, 40 ] + word[] ycoor = [ -40, -40, 40, 40, -40, -40, 40, 40 ] + word[] zcoor = [ -40, 40, -40, 40, -40, 40, -40, 40 ] ; storage for rotated coordinates word[len(xcoor)] rotatedx