From 66f483e9206060648b029a7e45759e77241eebc9 Mon Sep 17 00:00:00 2001 From: Anton Lydike Date: Thu, 23 Apr 2020 15:17:52 +0200 Subject: [PATCH] Initial commit, basic shading --- .gitmodules | 3 + README.md | 10 +++ default.nix | 7 ++ images | 1 + main.c | 71 ++++++++++++++++++++ march.out | Bin 0 -> 85480 bytes marcher.h | 83 ++++++++++++++++++++++++ render.bmp | Bin 0 -> 1440026 bytes src/camera.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++++ src/point.c | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/scene.c | 121 ++++++++++++++++++++++++++++++++++ 11 files changed, 648 insertions(+) create mode 100644 .gitmodules create mode 100644 README.md create mode 100644 default.nix create mode 160000 images create mode 100644 main.c create mode 100755 march.out create mode 100644 marcher.h create mode 100644 render.bmp create mode 100644 src/camera.c create mode 100644 src/point.c create mode 100644 src/scene.c diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3c9ded2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "images"] + path = images + url = gitlab@git.datenvorr.at:anton/images.h.git diff --git a/README.md b/README.md new file mode 100644 index 0000000..d53ca61 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Raymarching in C + +## Compiling: + +```fish +# load requirements +nix-shell +# run gcc with flags +gcc (pkg-config --cflags --libs gtk+-3.0 | string split " ") -lm -Wall -Wextra -o march.out main.c +``` \ No newline at end of file diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..ad62a24 --- /dev/null +++ b/default.nix @@ -0,0 +1,7 @@ +with import {}; +stdenv.mkDerivation { + name = "raymarcher-dev-env"; + buildInputs = [ + gtk3 pkgconfig gdb + ]; +} \ No newline at end of file diff --git a/images b/images new file mode 160000 index 0000000..0ab4ae2 --- /dev/null +++ b/images @@ -0,0 +1 @@ +Subproject commit 0ab4ae2be9f993f26759fc03d3186a51d2770d45 diff --git a/main.c b/main.c new file mode 100644 index 0000000..9a22d72 --- /dev/null +++ b/main.c @@ -0,0 +1,71 @@ +#include +#include +#include "images/images.h" +#include "marcher.h" + +#define SCENE_MOD 2 + +// this is the circle distance function definition +double circle_dist(Point x, SceneObject *self) { + double r = self->args[0]; + return pt_dist(pt_mod(x, SCENE_MOD), self->location) - r; +} + +Color circle_color(Point hit, Point direction, SceneObject *self) { + Point obj_direction = self->location; + + pt_sub(&obj_direction, pt_mod(hit, SCENE_MOD)); + + double angle = pt_angle(direction, obj_direction) / M_PI * 180; + Color color = self->color; + + if (angle > 90) angle = 180 - angle ; // clamp angle to 0-90 + color = color_mix(color, color_new(0,0,0), 1 - (angle / (double) 90)); + + return color; +} + +SceneObject circle_new(Point loc, double radius) { + SceneObject so; + so.location = loc; + so.args = malloc(sizeof(double) * 2); + so.args[0] = radius; + so.distance = circle_dist; + so.get_color = circle_color; + so.color = color_new(255,0,0); + return so; +} + +int main(int argc, char* argv[]) { + int threads = 1; + Camera cam; + cam.fov = 90; + camera_set_looking_at(&cam, pt_new(-.6,0,0), pt_new(-.5,1,0)); + + if (argc > 1) { + threads = atoi(argv[1]); + } + + printf("threads: %d\n", threads); + + // create basic scene with up to 10 objects + Scene scene = scene_new(800, 600, 10); + scene.max_steps = 64; + scene.threshold = 0.02; + + scene_add_obj(&scene, circle_new(pt_new(0,1,0), .2)); + + //scene_add_obj(&scene, circle_new(pt_new(0,2,0), 0.5)); + //scene_add_obj(&scene, circle_new(pt_new(0,-2,0), 0.5)); + //scene_add_obj(&scene, circle_new(pt_new(0,-4,0), 0.5)); + + Image *img = render_scene(&scene, &cam, threads); + + image_save_bmp(*img, "render.bmp"); + + image_destroy_shared(*img); + scene_destroy(scene); + + return 0; +} + diff --git a/march.out b/march.out new file mode 100755 index 0000000000000000000000000000000000000000..812fa0d473215c2e0f0fb9493af9764240a37ce3 GIT binary patch literal 85480 zcmeFadwf*Y)jxdBOlEQ>m$_sDnS=obn1lqFWJm%8xj2C!Lx~y{FbE1EAt4eVCIP}d z3M$hO1s`qEQj3==Pan0kr53HN;i6)_p;e1_ybt1qswiIbe!u(dGnqtq>iheB-p~7w zhtEEHt+m%$d+oJv>+EwTY?xAhj!9J&<1#4|6=IF9kRa)IMaiAg%@a~elw>8O3{eIv zR&XUC8GIoL8Tld;3UL{^rlX1(IpucA@?EA7FybL*N`<(0=SJYzfjh9Cco^G{xEV`y;88WzO|saWm(h0f|ac!S1cYg zYC&U7)96ukqgz+DF1Wn7X=Si+ajb4Bz{JxsWoE$m2$$S@bpO^Z|!iI#LFb2dOU-uVf?# z67}{$`mvW7n_#v{fkfm_owl%E!QTcTA*7PV>w|xOVt=6H z-|-@PfxK%Fq|V;g*C3pZUUUZj>NC)@&OkqL2K^_`K%aRAJtb$L4><#U;~D6E&OpyQ z1AXop=*Q1s|Fkpk=bwRIaR&MqXV8De8TdISeMr5p%g?~?2V)vW*uin39wGw-9i!aY zldfQ<)wL`R6mfb5m3i~(mMmL3ueqhFsb$_gWnTT#`W9tgEi%Da6Jvx}W7X2SWz|*n zP0Io!^Mks)LGD4Rg8q08U8Zi?g3A|Hx9HOva)KJe>S`9xYpicwu)G!vLbvj|`ei+F zT}e+Gl=UDiq1Mq#?UH3RO7j&>ElO4OvSy{Zekt2jtryOl*Vt6Qw54`l^`gbf!dA9= z+WGSum$y_awaXe8E>%`mfd;%8c++Ay3O=e{O!j%TRrL)@b4ydpvIb?zlB!0fwz^?i z^Fn1wRYSwFYGujtrGmJ!slH_)1X-!{@RBMRQQNd|p)$36+N8syKstT7bDyna|e0A-}!s;b;!P=240!>w`mQ*!WFIw0Xs9Cro zuyE-LuBfAn&x%`){|}YKt7xbytZ81=T)VQQ?uwPG>WWuaU$J7vf`-+jR<~X}sy4W2Om)-Z;uRxXYe%Ee#Q}`t;YAq9 zg~jzixG)U2v&F02|;SX|p&6>JD_losX}VYKxY zty#QiRQ-x8s++5t8(YVWZYZf)*|fB^e$nMMD}yVGMvW317i32V^To~;Uu{)WQA5pw zrqzWttyL?=jx1VPR8?3vwzzr4lE$%B4aJQCV*-sF{lkjKG_6>9Mb+xn^;axf+&HEv z7_4q?tQobWp{~BVVa4bb!2o7SAT~>iO7chcHho2P^U}sEY8KZoS^&dWHrLgSS=?B( zsJ3p*f~8A}RyG90B*yG4F8X2h|1US}_-2nODQ;Rc=JKZ6MOAeR7O$$gytZk@=#oWa zTZ`(7>#kU`I8awz9Vp31rP$-K)z>e;`eedxogn_11!R#JY278<#S^e!Vgba({7vNC z?|n$iv+A)Go0ZLaF-pzK_p%(Bl3rhr5Wu3`h;qv4{0V}ecuOYbP0FoO{=~8nsQTW_ zxWTwi#nI#Ag$hY$93WK)k;*u_5eu+jejMEhDM?=xM>k?O(i`LGM(ja)YaBg3?r4jn z(6uqZ=^|>D%MzjBkuoJ-QN-2(smGT>Z_j_nlqr^LAg9os7K4~TQ=Io2ldw}^AeIo2rfmx*(!IW}M5 z&k^SmbF4z({~*q#xOT@ShXs(r~O(;8zjnl5lJ{@R1))i#&T-IPz9_<2xrR zW=wmmvl9_^__2KzB75xp68N~!EXaKB7+8k&%-M+I3B0$s_d<*4Cfma#bRDhTdZ4y8 z-!X6#3q=3?UGQJ|vB>s)Zw^OJg!e_y4y%ubpZ&hY71NL?HT0HmoAA}8P_;Z`W;pV0 zbUhmUsO5c7)JqQtdwTO9zpiw~%!|TTez+A<;m9}P_Nksv9Zn?IT)+02W7(bl-83z) z#$OR`-{kKUY-RrWU`j10P!#0AqMP8G+OT8&Bcx{-^vY-h>C+tR50c)MFZnB?GeAcj zW&XzUNR7WW9J$Be2GzBWWexsDM_z+J$l6E>N6P#m7*gcOYwhHsj-#-@aNDuAh zC<~9>zjAbV-}~n1Vkn&!nWFp+8kDlJC)X8D?igPau6`}N?``um^QB6-x+{7Pn8FeB z#z)lSuZBA&oIOHOq6Q|<9q`yA7qil&1-X4zZ3!9V5 zHV+DSgjGPH&3WOCou;ta)IP%>-0bXWlI|F+J)UWi?@A-jN1iH=9Ei@=HCKltM=)l6 z=(m*5*hMLh{M3ekqO6$&pbo(5>C2~ut3R67G2!`EOH**K?fZ7AERVTV6+%zhR%_BW%B&m41K5_PonsKf5K z-v#zgulnX+gZXui|9#*1Fd>eFJ0@q% zIZ%4BG4?P-a={snti>dYybyhaypjE!(;j2uIIi8vc6W^WCXdbkBpUsSQ|J*4$p^U) z{hgy3v*dLYM;l;UdyC&gS6HCz?0>gp4kB+7@kr!(N;8ST)+q{aSg4f8VtB1b?{txa0n{xu){S$I-h^ zp~aw)pptM?j4(cz_|?ES9xxyOqfoh*+izYJT5mw1FfdvzIMm~BhcRJ2@a7+L73EGK3j7#c_Wp zY^@#I!`6$x#3*4H!xe^uuX{CV;F>Z!%30nY-Qmdn3={o?zDpV_&RW6qy)KAJ+9~HX z*N4M8tE9ez8G01d_b@}Br%?yNY7mb`PUr+<9zPAPH(_;`oZHVp@(}PZfWHDwuLDP_ zn{8j8E;~M3B|4;RB+1Tj1_a}9v6iw=wF+nNEAP&QP#H7$2eIAnqMm`2bp5yyqWZBqv zg^k|h_rpdHY>Xd+J#ECg7{(mcbPLNOo%9bTev1FgBauh;eKb&g+AMw;c5hN@0mIM?g0&ojg_0~!jbPw#k?xr zi^ZwyfkEi?2N`hd6Z?{r#$@=v3rw~__kRpb8pQG#3ry}Bf)(#^m@L+i(+4JOLiB~t zq>&c^4I+*du^r>b8h?nvqcaSbR&d?-iBQd{M`VZ&5Na|$tK28TIh5*H^meEO2~p^$ zj?0c9V8b?_`vi*1{S|=z3225tj61?ZQ5#gcu=L?x?)Qm6(&=ywXT82~gi+%WI6gQB zTi2BzIx${gWlgv}Asg!?;7xwMLK%s`VA)V<@Kne^7?gYbJ`_6g?(rWcGa}QVP_W5= z6gaF*_4`Gx6QV1G?XCnri)=>G5%5Om=tY?6Ec*x!M!retjh?NSZStScway@u>qh@6 z9rZ$;YlolbNod|4!Ns6hgvzAST=)V`g)inF5}p8r03BYLyC1lKfct=}#jz-=ljZ@{pgcqZ^Mh?|4X9$Fb41#~%f$X9lAz zUk!#koT1(<-6I{--C4SCbkl_A*!_;Y zJ>t=ZEoSeszD_8Ix=o@0Lrd=$P`3Cv13=j#+9`+Y7AXMgQBhop81SGk`sE1@-ODTk zVHIRV9&Vo#taTJv`hm8Bosw!3rE?GQS%loGz@4dY4x*Ikz7+q1(5r|bM_&zQV*AE+ z)A_0660Ee5N5hdfqA!9LZr>sXa80-Hayg@opTOEuNC&7+cBIf6VdHRz+gq? zRE{v-^g&WN6-3um=K&d>Uil%P{=$q%=wsh>b%|lfaZgok$f?TcxUIk;wL{dw=F0`(Fo;_OHwbUS z)kopD=S9cqBJ`pd=(@#d+ZO*Wp$yYXG_8G)XiK>LAyL4A?&CnuW&MH!lPVaF>=D(3 zG0;Uj(LUBt-f^ccz7d17#ouZqHZjx3kn;WLG3?agUe!#CELW!SQBqcdh1m%YbkAwb zy&GloXK?17zIs$MS3HW}C_R(=HX8pH$mRY;xa+eNzBvYR6s~v|L_A;vt34uG~gEi|3f%xCmIM~li@M_D4=&!=&=wz7B(8gWvJpzCS!v9z*CqV2E{rwPlXngOHuwN$7=7r{GZ&qMw23bEHp6eVpZo2)&N- zxi7JfDA9c^5V!plJP3g&k0sZa@DU|isiO$zr0K|w?ScrFa$IZXxbH25%Deq00=o&(~LN}qbYI=6LXXBZ)%59~OIEAzAG1rQ_v!x0WR^2#wt zQCLA5H#5w(8})IPmyVFNd#*df9cy6;cP@m7MuL5ouonjP!?TIujJf)Dh_Sv&4ufSi z{`n5q5HRo<%e9yu)Tge))hvcDR}F+CL47#S@VDw7Or-~}Jje#pi7$L0$8z`wW4Q#) zMc_K0`!Ys)Q8=;&%LoqA^dKj;d~w+lUTwt?fqT%&`q`MiC=&<}X2$rzp!4frr`H z=rKHIcOMyC`5`|lD~)uan{eLtLKqQ$k3elZibr-{{hVX-Rd^5%ceG%&L7%~;BHD18 z#l91lMf0(+uy#HjMP4e4e2sy2SEe!0&`c%zc2w95T?`CPfJD3Jvun8v!9V(X3}A~9 zkm-S1xTDV!=z_|nF_kbuiEhmWY!2HfV45-2H z0rV6gECqmY!Z|9>V>n8*>cRKnOYGbtgw|(C7_&qqREtp;UBMj>ENyTc-0lGxF(ho5 zKu1w61Qr=7I#seCmh6T$=0amh)DIRhmB_;mYQz`-;UWJ~K|ozP0e%*Qd;D8yTLpQesEbU=-fDcr5fZ=N9!lR++b0Uz$8b}^T-i?Mw zZ}bNxffd2UH~K@8Knn$-LK1c&r$^^AmmY9 zsAG%aCyvLM$8{ajRk}2dKqEP-bve3;1R=+R3TQKigD~PA!&3-(;P~A-|D%GRU5qB( zBf6NgR4mVE5)0U*om>d8a{LXsGNogASLxV~*AIxk@Qye{ck%@PSg9yH){H2YxJ96m z4={CB^f9Im#iJV_Rr(OYWA{?OzFzGDjyO3kD~r4rd4tQ3uj{a|E(mT~*9hA|*y9fg z0(KUi@Q}Yk5FRo{{XPEqQpD(^M&L#t2^G6hEoahUM36A3I@F7^k2JV;EM!Ep4EbMULKF`sH_HKX6>V5*;BBg!=l(rH7@oK2Axs4~8-y^S?vM(D z62({&;$uhrK!Y&$#F^Wj`WmK3>zl-Zl^8HV=mxOG zpQ{6#biR&0yPULS)PEz>Rl+hQ`otSTWdmbq{TPf3Q;;1bHDSj%lgeef%2_>CwnC*0 zS~~Se#F_dISP-}zq8H}N;JXsrl}K0&@Q8phxi7kd&jZ-mcEUEegF9P^k={lk`a9)TaHm+e*@_CVQvC^5Ll5l{YedhCR)2u!<+8|$o>p(cml9BWkDrb2 z?s4PsNbmIjYpc6AFoo8}S?wgQTYU-^!0Nb+Ru{u+F!bJ#%U=88hWy)af3P9Hn`#Vh zC|9B%zbXc|JaCBXqunSq`bgigkI$0Zb=(+`BO^uL*{gcX3=pFmdhdAKlX#=o#-filsfWu#D-VA>0-S+{$H`hGNEVl zKY7JiEN_A%dM}nA;{|Hm+Oi+aw30m*T@L=(V)-^0qj!M9j--2fE|y#i;}^@Xph%q4 zl;GJm@>FDoKOs`=$FsS|N3XYAoUl@yyo2Th3GY)l#X~?FU*CL@M6_vMvilFhif{XYw&1_^Novq`msd`9zxrvI>${-Ul+!w2p#D{ zeK>D_tWxt-zREyN4wwE!>~XllJg}SL&vm#ed^`$4Ybt_Jv$0c+@Bo#c)$k40XZSwi zVKyULK@UbOSDeM>1r~^`|3%2!mnXF2uq(1Z>Uj^(cRI%4usPV(oZHpx>uUCNH9NbS zwXPz3YV_!s5H`lQqCeN4YC~{Ye`ukPV;_BBu+GO<1#z2>I0X~WJ6mClBaeq1=&zkX z=)_=o`!cPpeI*~(Hel_<10cZ(|AkMl1g43*^H?VY#87GQJJ+8du6`lrC3cNh_->jR zuWj(Dj!&-Su_YQaSf3+MjXevA1M5Eg%u?@&f>NZ zk`s^yV2Z?L;K#8~wC!E^7gM8qCzbmL_mSu~cyun^__2uWrd<8S`W#5XO4Ksf?^)py zK|4r+Tk!1}DsAv<$2@o&29kJoEm-TLBnh~iM}i?fpQ#}#ZsfQt5NHMwh8$tie@7GnTB`q z8xMliX9!5)_Ort6O&Wrnm!nmj6dU=1@xVo5`j4IK_pQ(4Ysu3MY|OfFd#fk9307cf zI{s|99nFm{2ResmZW}-336%J<3uC7or(5DENE|m|cIpFrCAc|;@R}$${8;Ctw2&B5 zKEOr&bvXAyxJe~?16`M^m>UN0g4*72s#_G7X)FdGu)o~fZ);#!_Y@= zUXZv^N?_R#bA{_5XA!!H=bT20jeuxK9D*JUZu~}dT)z%>{|!kIG3Xok7BX&GUHl?^ z*MU>~2l&n7gN(-i?qf{I7dtrhz#7;ZLJ3-R3X*J98&Md@*6~8oy|Rclv*;-4xM2GZ zX*-T@V+WwLU-(8pzY#$e+EIzYZg~)@q9%+nj3NdP8Z7_u8O`3!^PG(b5z*=|7|?7` zkCPfX5NN4yGdZ3F@8rgZE#4 z#OWL{7(L?QnWGJ0J!@L%-XFYijRn|v&uWNzX&SI%y375 zIlcq@0-pkw=e^5yD7^1Gb9BS=umGE@Z{#b+H=O1CK;w%tXy{6RHO$R^?D6Fvz)Va? z{d+!qixKzD=Vu4dVbli>fInS7dEh4x{N#Zj?EzK6hJkC^lB&9ezMA?a3zs(6FI(E| zYgy)NsA>WYKU4Ho`4-f-;Kzr9lGNfmmtC8r|8#Uw9K1rnWWuG}14CfwGFVqPNLi^&I#*fQw5(;JFT0`Mw_sJv z!sh(^{3NAm;nJFg_*G_|FT1`qyWZE>sx;&GYV%rGDcNX9Zg%Ym)X0>Vq?fE#W-Mx2 zSXBc7U(>?IWlb%VrYCBax2#HvD}@34RV#j=Sd*k&jNf(|j4eU|4e({x6l9~cZdr>@ zQcq(NYBrj#NG`M&V!HMD3zjtMEf@EY4xc#N6DXVU%^;hOx7EsgR%q<6FTDMnH@2Ov z^Bp~VP5OOP-&}p8#Ak=FQ{wt$gDiizNL+6}e9O(e9+!M=GFRGkKKu@#pLrbr7686D zS57>oe+n9UrmJf+XlaMLx{e|r{A^cOI)>E)$Y&rwj+`fp=RDWdbtm%3Kf#Cm1>}5p zV!<|8hI|zAM&x1Sn~*O=z7u&SLYxngmm|kd_LMcq(~;kYd<62V{snpDUm@Ru{MQI4 zpGSVyOI=-Fi=teQd!aqC=Grk?%wv_@b-pA>@BS{to93p2ynoxU?1dA^u_om+@Ocb@hdc+UivMr6g)w z)kG)hc%7{5Mjs3(qr6VfuPA<$lRx-mR~Jus6ua{ryXR+)Tk`?3Nm&ldr zcIS1bNp??%d6M0?C85-wdyS>k9^7a(wc2x`21QT{+0p}#KKazsPKYoFyA<+;l*d(q z^d!<6(B_Z;fiviw-czS8%c%1f$WE4R=%77Y*oJFp&qhm`J!D#wBt+2^X-=|IjH=2Y za~sBTxvcjzvcWYyC6!$8u7%v6Ax9tf_S>RvcM0BI;CktBFRrnc+DkSjmf7c zK!I1l5$hU=vTnX7$i}=a0?doF8qmr>!>@G2#WBaXGV=_+GP`prtRbCe`l~^Io}6WN zpXnL9#_`1y@X?t6D@p%PHddG}JDrKta{_u6LeHH)M$ddx`gFY4X|C4z|z0L$hxfSx_ zx3JJV4SKl_7QJ#Tkn=jyBy?m;Dr^#HW+IN|-1|aQ4 z>NKtFg`2j4&2(LoP*j>M#>8183jwV`*&k5$Da*Qb!9l9&a{DeAw;O3MQm1N~ z3F@q#`nk64f{uAOYWb+A4$Mc>Z|sZ8?2TpiRvK4hpI;F#-3fl~RZi?x`#ItN_qj9G ze$=wk9<{)MNT-n6tkXa<&rm^y7m-dOwOKC)J}VBtpjWy1oZb@V(JC~VDtoCnUrVxi zfGO#8bA%2)1+#ZyKegk$Er7QC$2PQ?TkV_8Q|()kwj=E{PqVj~O;HfbKr92X48%FT z@bk$ut(TqRK1*ot1n3J}Xdi?5H2b5Fx(y6=ol7yIy?h#AhtH%r^l^tka; zX0I@9HU=Ws*(brb3w#%l4_6t|QPAE6%~&_%_hwVbo;%qdoNOzm_l4v3pB>PXi?NfAkHqemd&KGYR!0M~(r3B> zYaiw|(jlb7NJo&4VyL0;j$VZq$c1t$n5Tjn>l)Hgq$tt}Q#pjzoPmc5=f%%{eGI$< z+qNU-T*x+b&;Kd0{XNY6JwWu_T-R&4EiF88|?^6 zJ{)0)%cvhelNFc2_f41HK3ScDZ*4?-HK`9TF9mMcbwc9LC55D>|8Fzn@3Hr;WwcYT z{~Vdml6kGnSIGPtng2rOcgg&InLjG?7iIpQ%)gMi)uq?dSLQh~A1(89WIjvgwKDH* zZ*P3++hvaN@q-dl3agGdA&JxT(8fDV@AEcG+Cc9pAL-+ z2}T3&t%d8CY`++)M*Dvi=Wot!j(fGO0hJ_(_hOp*EGQ{2qa7@si)6ZlJV$bIH*1M? zm|jUa64i?nF8~*T59~_LX;}nIpq0&y?9m=2 z{5@fxmQ35a2p|1w(qFPB#@BpT+tkXgl&H&n?)cMwh}6~3Z&9D zg;r_mg`my1T|~AdwGzl8+YxF@QE70at)AMP0%@_GkLH-u)cGiBwb_XDRYwD9v;B$M zGSo64SJ~F$ZuY2dbjU{AGOUJXuQ~+CX4^%S$yOJGVXMtUBv;MAa=P8dcUI;+H4kh% zZCh#RFk#Lv+k0diuC9a3ZrdD|6sp`I_S&wXZAHSiPTK;Oj8Y4r;GmLJg(5X9ijor& zoMWIPWe#WwX%irtvIey!xJgw~uf}aEAo~gcX2qc;r1FCb?M?DH^ltl{a5@c6P)v`2 zFQE@bOnIPN(y7vv3GLRY5m2q#^|(7JxetI#+%}`w^$Bk$d4nFsmBJg@#0_$ffju#Z z+al`>3TSr&w$5q=pQ0tAf!2%H1J<-DglALKsohF=jy`nmfRJ^rK6LISeA#+v$ko;p zo|gvMpjJ(t^Tz-#(H^2~)y05AS{1Ze7gA?fyMu5o;d1S9%GMFC(0)#M5#bryF-Tb# z6Ry+}NMFJ(nvZ5&2Q2Y-P#v^3vB}zgj3{f16#|NOKC4_#Sko3##VV?BYPXYT9pQ9s zBGp|<*rPS$ZrvCGr%yYN{F~T2xu}MYv})hro>o96jY_SW4s(QzNj2wB5=?wED>{xY5lo8dBN|q*K$I`S-Q653OMion(MYgrn{ZFNS{OnL z6E)yY>(4upX}8jlEwo9|t|E5_2Zg5l?K-kJl~lUz8GwB_5EVx#G4BLruK|)c{Ca?j z;7=SuMyHY-O3ZPf{uIHGONNwhaZ3zPiDLQ->`u(5ioShtGvAW<0_yabcXG;WS-6>R zBdBQE&}Y7#lV8(9WW7st3EDIWG^@4+Oc|d+IDsSGyysd_Jx@Tr;+X)d>bU{1$;0r+ ztR(gUsnh&$3Z}L85;gDZ4^Yt-L(06rfn<%-#C+%`z)melu_xXD?9u*2{==UG_GwGW z^DN<9Z7pS=>yN-EsO=~J^Q4z(bI9`|y%5q|dDB7>=HLo z@K2VC+e?5@0gGU@sF-xC_AA`Q;AGp4#=UD0>6|z_y48zOXVtz2W9Dz6v_v((@)?-* zz34USR`k8-b;6py7rjB)sqaNc348Rt=uN^tP3%Q)5zf`bR`fREpeA;rcLiKM)X zFya+F4fGD2GEucjOQ>)oOGwz_A|_%EGsBjYBN^u*GwE@Q3`)RoGlLRm!gNZhB5pD1 zF^$P2!WZ)hJP4$Y@N9*!h2zpBW1Yo#U`Z|Rdk0A}?iq_`tkj939&-Yor&7<;Va7c6 zEt%txnHluhJNgl}YKhug6xYKY3*kiV819yjanpFSy^5P1jZdQWs*-#H)jED-{~lQK zXLzP@>`a+S_(}v`j@w++oBSzx?$UWqlIK31XCrxjFL=x+`eJ0}J6We?7WA9{g?2iF zPGMvcjCYQ7Qn6WsBb|j#c7VAZ4@1t;nKZ?G4e4Vt*?!9}QJBJ;c@q5StaH3fjv~0$ zc}2fRKu^@T(xtwLo1K3c0E7j|EF?JABDit7O?e*!ajqfa>|@f{ovsTp4xAY#TODOw z|AK#=9v#!5f_5ir)MvgDkFzen>zAzeX*4-4PpqnGPXTtO4cD5W&0U8krUjhYfE9Nd z9FUeT+LhpLK!ei?oUD_I`K?$whROm)vl(D?7o=|iEm6Ax_dcxgHUN54%&$YOyJ*n8 zp!9tWu;xB1@fjc)jf#6h3YjzN7579NH)O?JilOTsJ?IrMq=f)G-C>O{xIN&WF1QsB z*vkdGrkFoX1OJ#ojA7IM4cO(`vy62=lfT}e2NpyjGZpwKOa4I(T z3PCx3Y!tXG4*wiBEj93vVqsZk2va+KfSSdE%u*r)b;SHIEa>AObTbOF{tnnY2*aRn zk@t5XIDLSFeHW`*Dwky|?C9H|+Py%4!Nk5xRQqUPn(Gn_q`u2kJI998^$isDy+XBD zpv>bkQLb5+^SMlvYtiL$b=Om&{eCD#f3POeAJi-Q!zdYSlu)Z68YSaF$ow;Uyzg4o zy#W?vzJfv5w@vNah>}F@Rd9U2$9> znx}4Ii{kk(>9=eX_AT0Ub>6p-u~0DWI0!+{*Bavo_dW~-&$sqx0W0o9aKGn!`+Gn% zcOH>0y9FcF={im~nN)jUU>?^j`q`?wsln&Emt~1+#{U4z#WN7)?oAgDn;K*7MD0s) ze*|tz)Ls;K_Dbq+AfOK~`p7QOfta=6qUJ>HYTV7=veBoUTx`V9d4jw`fDpLYDT&%& zfQWKhFUmpumqBDJbRlZiM_!`#A>dRt$>2{0oH>IHxXqM7XJzKovA0X)BwK%nL^iY8 zzm>?hSVcW|N#sg6IP*=@fLDcKjSx!IM#B8epP|02sjAT2FEQZ`m_MLg9f<~d8H_33 zDbShg^+8#lH-Le)#+!-$S?9eNR?PA8k5*jj9fe6Y!Fvbb5&biGkf!#(6`88`UyJc# zQu}|06~nCd{}Ut=)c#MSH5Rph0(4r{{vU%gQSHzF*+5hKe}gJ)YX3CMjwH4JCiH5u z+P?)XDQf?Fp)6JHe;H;0w#r1U1G6!?8TR!X?VARRF$Yn%Wir449`EC-?Os5xDoA<% zp}IK771tnW^gf|u39kEKm-k5>(_DW*1H4b^Sc>Z+RO5YG$DFR4VXXHV9ZOdnD`BSh zuxdUJHCR|p<}Td4&#M0CkSA&nlKv!a$#20o{r!FKK<&xrLP`H@9Ug!_=%1s*g=j52FEQABkws!#0+^JX;28Qgn197^2XxP9~QQ~p` z1NsL}5{S<|46PYB+5RW6<+?Yrnlk%AAVK$ZmP`>yiF-MbbL=mpB;P^Q8iLGuTeJF;L%rTcA+rGe)<3V_Ua|B5B&Ii>(v^BZXr+VG zuGM`Cq=B;?Tx;6gZRojymxz+h?kXa49M^+ktGk8GzErSncW)>8-Jp<3venMWG58_{`NJMZ5ISX?jIls zWnc9uu@i;Rn_^NPB~v;~W3qFPM-d~2M9l(<*!}1sJIg`zAxou~1i@H8Mv+Q)+1nth zFJCa+`xr>kAN{zdkpu?`!IM1I`w_naS8Z+>(#vb!Rz=pk*n1_3&x7` z1Q5;l3soBo%yp?9MK`OqR`|O~v)A(x$#B~@agT6`QD(F-){|IdG zbqVPgg3+fhkwX$q_7^c}y@xTp6z_g4BdRxmX=w8H1Gm{b8}|h7JdAjYcM8U%)f+-v z620tk&3id~XY<|wsU+|1urb*?3*$V+do#49dank>?hONWct1xaPVd!_a(O?5Q`5Ye zkac_CfGz1>A9(tBtI>;ny%|_PGrV7;O&;&}(3a`_Jt$e;!;tOgZGt^s?**9L{k{K& zoddi)XBg5bwFr>Gy5{J=;45+H$=2pe;ka70{XMy%sj) zdG~>5nD=W)4fk$A8%KE0hUFu?Y>UP%x$@wC2CKRCuam)EeJUeObqv*Pv zZw2CX^N2X-JAruIJR{EeULZa<1MHkGf#kaQWS*m_0t>p@sZQ0g5*MG&b4)rGa`E{* zCqc);u0NC0qGJ^a;O>UbJFTU~w7EjaTE-$fs9oy*|Laac?cDaTT3+mWz7f+6J3e}`Z zklX9x(Q!_ZZfB>9XU93CFhfz_L7Z@-`k{%LnHUCxcyyL?i#<)8o#pJ*=mIwn&vI@P z?oix3J-e$29a6z|u{b+NNl6*5J>F||a5h~mT?^t zs!y*LE~NPh&OIpcG%5L(^eZUlsZ;W;0#rQ9^in%r-KD_=`41_%BR!^fd0-)3$F zG0h6=o%zYmlR(^GkS(PTVa0tnoR*(zdIk78e;iwd%nSv%Gj7*~)Z5Ra#J*$Sm# zXxbep2rA}$D#$gjqJlN>U`aut)5fJ)C@7K&4pCdNodq8ElW1kZD0?0dpL;!;Sui>^ z3?$dR9104?B(n#C@Cl9W!`l#)+G&cN5K0~doTxc~^dU2)_40V80#MCKG`+-3fwVhP zp|{{H=V26x&L|isnxTl!C>Sr01a}jLOTh#;xit3?%1;#Cme0t(Oja+1&qYOZLPhGm*3Z$qoAmMCgo3TrZNJGy?z=d7(b znO2#%?OvZ-zobr4C#JAP41QK2nk zQvkjovKB}V7Arr}@ZRDhZb7Me+fEoP>Iob57(jk^J==|X_{--DkwiT)g!NnnD#OI# zy~X3}IWS#O?ltN$0E~WdsUt1_W8nVh0V!C#laPd?jFREK#p4_B7HrEK7ZPe? z0CbB>&3E6;dOio!Sy0QLUj|Afw_P+~M#8qE>#Q(aJqu&`SJL8?LcF8WSs_t5$EO=f=-9a-U#&|1JfOvX`ChPH z^8E}dhwFS$sTABN>38|?C>5i#Dp(@@TX0Y^?U<}6%LLN}HuLSJdd*7kuq^&LUQ-3T zBw`x?q)fIx3$0iDPhz^O-c(NJOXURnxiB8&9fLgh>yP{|p;hkyER5S!Nn4p4#B%}oXCdm^f3zA9eLX*@WJs*T6OW{=2 zp2&rde~gKj_)#cwb;qs!V96r!>Gt4VE9(K7s4oUtrW9kcLbm zi$ko|=4~g|<;+V4?iTBr1<{F_5eiplHC-%g{E>eyQl4v!qHK~z#DMFBO<;Ceo4 z0${2E_X4D%!9cKPY!Ji#SwqwSN~Nf&KIMFha(%b~Vq1~Ku;>4jbw3f#+cyBbhBUml zxES`PZ50?Jx5z4j@bN0B#Ne`Q3w@yl^3??#WwOGMQt;$bfcPQw~7>Z4L9 zw4yzyVN>$1!c0jU5E6B$27o@)2`)=w7Cdqbm|*L$>yalQNHifSd0oKPOVJq64=W=t z)t!DZI=U!p9G!W1eG%Vda3#*00I^>fVg>*!#bp|lvNa20=YffR5I86~&x1GyAFPmb zPv<{zHVmQ0w+xL2(AcfFyk{*{g4y~X7$f?Wk$WEC9noltq^L0@oZ z9P4p|br<`g_lye|6~?BK=&s&uO7SHa0iPRG5sYMA4qsD22XCilGH2$zAMqNbx6T-$u@)D3(Seb#NMlc$Nv{R2P91t z`-^jQh{}}vjdf?o5FhF;$|6Tb{QiRK7F#b*o z3w>*V^YFC<@A?%L<_<}PbkaNr&E?3|A@ZWSnFNZAYQk4WRIm825=vFl4&5yx1dj~pMHrqPlM&@cpU zB53u01hJ$XjS>INqe9T7;Lknjm%4*-TDBMlIbIHfBs_2=AZ7E=JSk^5pJ3(!oJAU+ zHLHxb4u(&G~_TWH)`8fP;bPQe87qO+3v zS;JE5f|z{_P4x-XuOIDGXBK{pr7@{rK0`B1C&m9gooG+w^!iJ2NJxS#E_Da1%;wX4 zl6?T}RuCF#)@m%r6i*n(W4toNb}?=LI2D2PdIbywn|;!_Z{9 z-?nfBALAIIvIVw0rCg;Mp*w5JcN=1& z?h?k_f!cn9l*h-?izKVb01&>2%XYWzI*5tK($~Pvqqx9QgBxw;#L^#2&n*oJ5&f}= z^Bn7r5?CXdm+H*)r>yj&0$o5gfNUWT*Dtl00gFn9qRX?90%<{=yXUj;%D755aQ>Rm zawYG{v5=4gF~A6FY>k!&puXr`F!2ar*h>IrqK=D@is=qR)MNmLsOe&huxcYXucTEA zPis|INVgTPu$jM%Aqex0_{6$R1~k<&^f#<-GpsfMqiWj~mSs7;t^NaS_`PAZAz?BA zL)5VP4RF3jtM~qAt6ee2{wJ&Hu#Azia}2`*D$W57sVH>S0Bz)-kEe;V1jArO(A#?uJ58*vh#3y7zYZ0x2F8yXE@ zo}sbL@^@$)RtlzZFm)_a(P$tXw#7V5s(*>|PovRrB3Gf?#uQcwG~8=?l#+rG~s@+p$AFEb5& zha~Kq2w*(Y@ZO?5>|=KiE7I*#4Zx$DtJvBtf1!Om#j1v?Dx|<9$=!42dScxzPqC;t zPc9Y~1BfZU&F0LLinl@O^;BGX+I493=@efnSc_OM-t|0hV@X6ZoK$ARNzr}@N`b!_A>%Kw*8E;RPq_z^*)lm?Prvc*5>AC1;)0Y zQ9;^=z>kt9w*8FxH02ruPK`+Vw%<=~zlT@r+kQW}?VnhkQ-!k>TaMWFTl*+V3sTNz zJQUdS1Z@xS-K6nrZrd2uq&bYxMA7t_%;ht}SUq18*6wZ>|%CTls~_VWi-i;UN?n;lUpy zHq|VM%AZH*;la;@(1kFy9I0d{N-J4}@ZbUw9^4A@4y3$`MkDAQ5z@sC;C&rcY!_vW zhgeY~m~g1Grl>{$C)N+|%{gL?Ub1H5wEzx4^FAc}4XZb$g$dhsuEt3%A4O#7p%k<3 z_W~ikG6RU!J>4zqJrP%LZ!THy*0rMEk5DIrTU=uX$Y20_(z__hOtP(YD2mxr0E!J?kFa#W zYB7F(iK=g6^(!QI&#v4W>q@NIyH^{2+N(qGQzs#GE+@_WJiWpg@Sss)vG*9=q)*tb zYr7|`A!2ZbIAO)4;k(%bNK*H}(j3meW&2lkN z4FE$hk8>+N{erU(%(?=e93*fZQhvX+~yZTQf%{wSBq`_1m2t9EQiI* z7(APe^4)9oV@=Wb1&88TZZlZg5F#9pD>!Hr9M(ewF@o^+SavJbzi+VY)I$V)XcZVM zCb#_Wbrx><#*@2#&@;(}?apO=C0lp+N75bYjxVvVkK*uBJwhj zbpX~7c?QVs0Co~N2;?yUj}UnP$cF$vAaWlN7migONW<;`G8#ZJ(s08n!62RIO(Z7uucqv5Jrk+B|AhZm@bQckD@6(ih{;K5u>Mcr2`GzBAy-0^ui=DV73fo zPfTuXLD_IRz3e*^_&P+SJbsB{x;~X3>?ozrSV3On5J5O!_)cye349)4?sB) zE@908u0R^zTU0J#yEj0UXz2!{5(B_#fVfNxod2L*`T~#lymw1Zqoq83KV3_|H#8c+ zpA3x)9kuX8tffV4DZV{eFIs!?;E>K|0KHqg9qsuAl4$MU0Q{8*Tl*G(qe#Phi~gXs ze=sUB0H0o`Vp{0fOWR_teO7Y*FRcw4OPZK+i5dsml!Kf(vr^6M^GW>SkZG3xV^kuB z@T?$tl+w#HK>wLOzWHW+auv}2Vt6kAl%sPclWU5D)62~5hFnv`S~(e9Q^eahrF0h} zCR0e)#kZ!SqL6qOq?DSRC_GD7ag`{)sn^;=Fsh**?lbs?|WC(XmI=3&&hSF1t|91$EO!h?T z-s%mJq}(CyTo-sEC``5YB?I4yMA%98K@_(6@U1FRZmnW+h^?dySO_VPZTyo|7XyYX z`ekxtCPHx$UlZetioolVQNAf2B3|-}+kkDASjfc{tJocs(Z5F@Y60t2vTb;mA})LbF+owrHMTUNbl}UNedI$xhm<`FJ)s4L zPXcY&AZ*b{fp#hWSL|R6(LYmXGDQDOoq?|V0{y5BOr(;B`-O1F=ey$0uH)xgy2^n= zsIngFs*%oFj*ip@iI1tx=j_BV(Q*VbDDa+C@|a$k`1(Vy@dCAo?;f;4`D&%fhOez= z^FyoA``Jd1^>QgUGgdj@KaS%!kD6x?zuJ5N75^D&%sRYdijo2_#=uzn3yH}@l=*B@@pxm?x2IR`GB05)t_DFf(KKP@OnHkE0^B57}y1* ztOBKgl>Y{H2a*_PiCLpb`wI9;()cx8V%8*ng*PS}%Lr1=Q;4$?`-zjqYk;>Qq4yKL zg7PA;=SjI76!FRVH^9C^3It{M$@lD*70L!>Fh-=MSy@k@(!5f^n(V(j5&G?-g?X}t zcfuxK>JEFU(L#Gaws3F`e%^w_7TR-Y`yyZqNI?tj0a6|Wwuh7^P>M-O8H!Kyk@WW2 zC$N2Ufmb5w?Q@9MYzKY=65Hn#ln;QtM+(~K6zv;~Y2ZW3Z7KxGLG{ysPC*LXF75wM zO|~bZ$tKa{KW2uYA^tl9eyXK+s!25Y=g@o&(l`XDi6+tJr-A;1B!r}irhM9+D=R+?HOgocJZMd~{*SDsC{_!L$5o@uLygZt z@-UKkdVE+iD+YjxBQ9$n{ps;baGpd8yd*h$K0O9wQ&#c+3(Bp@qNQskb9b=7&lyHG zp}Ze^2C+gN;K2f(F>V3iJi%L0=Dq)3x2XW6o+$c{|KGf;_&?w8f7y-VOUe} zxnvp%rZ;saoB64j<{A9L;sUjhD*)Z5$adw0v7(?7>J&S?1s34H<|#;xV;C6EfT*M( zE3R;SkHVkfXE||&vwIYd$M0`s;jgD+4UI1puO_F)m2QtOwQSoXteO$W@aK32b)-^I z6<7FNkHWAL7$sdlULRRvP~oovU}*c#;WWr_pNF1nm0s*Gdr{pn8-|MI-I9^d3H1l` zbfn<5QY95B{w=I4P1Lne79ijem%4*aDYOfY ziRXc)&dkLpix#&~I04GWA}OQ)2nkDyb(EAxlqfEB2Rm~dCvZxCPT+OmUWqhr>GCC@ zWzPiLGr%858a`1<50=uLjHx258VH5`kOGyGMNY<~6-u*G9$zKB6lC~T}Z?2r?Dkb*z!G!zeWn={%2eK{OeNYiDF@V zpifA&t6a8D-7#vK>__v&O!nj0k$ACzH0DXkikMhjJ}|-==Cg$X>%f9tTM0%boBq-2 z$v8}(I_TR&@P&D-sQ;KdB$O5EIe@(R_T~{am-#QlWNd1|iZm3x2zlN$)NC>pdLq$&yL*0Xs5NMf)j-b+Q zz#>Q@tTGQB#U1w)@DoUZt+ERGiJxDIFB$dEEGtuC$Nq&tj1BTI%7l9onr3sXgq~sRESfp`vpootFR|9K78o2UtWQA4L*RB4+CV(#DR0 z8<514h}jz8lgOjM|Bf`~W~nkys;q=Uj*`A&lnfsYRY-vcB^$pPJ=2rOe#v7t0Am9( zJ8gGCt#}ey32n=%@oC8&+koPpL~iO?TaPD^sjHzjp;nyExBIR%ef!@EX$@-K4ufAZ$LRy!o?}m`J*hROvy#2)N?oX!BHT0T)5uEa zd5&9C>z2j-OVlLg{0S}`V=yV_UW4tEI{yR(Q|@Ca@=vY3Z9%}V27NgGL7?_x7Cxbdi?OUJYMbi9-&%C3X{y=Y&z@~} zgH=&oDxhRioEaGSeHF9)tmJXY)8KBiUrA1$h%$7I1kpnALtk<-g;bzg zYD_~3*lZHDOmh>($In7PQ1~`O?UqaFmcx^(s!nrLn|+Wn&CMT6JKS-+&OYkUOq~IL z(2%Oqazy540p-%&sAqg8elJS}_&W(kyYK;7g0Od*+pyS!zZ7KmqK-__5{p64>b8i# z^zT<3YuMSDRPBu?@aJrBCLBD|dV2T5@rlC4-Ci{tR*e;&jCZo$9^quT*zmPBMzqFe zxF^YQ4}O@f_Zv0o=B11hys3su?7F8M|4(gS0v^|KocU&kZ#=xj1H5!mASsf%Ft|vN zlt>vM2!c2WfWUwPWKvIqxiADU1I~eiiA9@I60NaOZ}Gw*?t9q;?d>FRpb)z#J2Ro(p_`biJy zI@g-svk$2LTPGbx_o>U)8;X^h0`FW`>LQ8_8?D`>>PoL{+H7n>m)VRm5mKzKb&ESo zEN*1^A%w_(lXT(D%L4bWBwN$vse5mcF1u9$=$)->AKZ%DNF?g`dRJk-x2>XeL;{M% zJKWl%p1eI8c;k)INMb~t*S_W5hm~>dv|S1aZvMn!44hq6EHrL6aHi437NN(5&_s9M z8fdN?4t(^3ulYz zhKYQ>R4f(Zvkmx^`gE~zIy=#rNhDaPhH`Eym!HoyOlNcDg@#P7+^7zQZ_MTr)8%B! zLNoB^R;Uh<6Yu{;seCqXa`TDe%tTRT8%v9`DMgY^k(ux=9 zC7Dd6qm!f<#ROmwTT)aLz!1Kr>Y$cVyp(cEKrF*@2*;ueoT2J~hNE)29c0qk46>N5 zfU)9$!HuuDm!b)!?}zal#LC%6u`ZdV(-QbPe5KEh$rzZDi=guaI@#5^lzP9Q8$@xNVAv<{{ zIo~wjx_7T?FPhud6y2w*LHm(!l9szAUYJksU7S6)=S(&}KY6CP?Z8Z1a&OyIabJ9P z;@p`tMK`l5?U7OyQv!ba92?;R3aJEaH~CX$j=v^MB}zYKrrErk;eW&;*&n$2J6p`m zrQ?%}t%?0-Glkj7J^L09oI5wa*pft#6(^?~GNq}zTN_%VEqkKPP1T)LngYJ5F_WBf z%a@*RIomQbbLMO&liRy@abh~YcWUzNLUZ!$*||ib4HlG~YM9L~OqA2;;@17q=4!6) zyNWpzyX)A0p!rN;eqn#QtcE-ee9PYKo^)=u<-kNk9I}Bq?6QhEp_?Hx zQXcPau0N?}5mRvJPCT2_&TKXhM+gv}Q~MOaaGlEWwP@ctF*Dnc&KG9lM2CBc{B*vc z!DJy0N1D-@neucgTbeAS;z@(UOM$6E9QVP$m`LSP43?4@E7}tq=MDF({FBT7iZh1? zFJ)&^x`@tcnRL>Jbo& zHq|2Vz`8r52PJ1_PVqFVsoXHjw$Y9|Ko0tRy zc5FP8)*8YV5|gT-2y{e}h)*k>pqBYK!sw)h4H$$0(hQ)36Xoo5sUe%YUxh}y2?0@# zGq@=nu!96V^>(`!el4IfYvth)%X z&t4IL{HO>And5UI%aMe_gQxDo(dhHD*dwUv~L#n5?m#V=@>L{>@ z;<68hw`oRbI{;=xI*3HpquehkT`muQ$lgfIZyB?2T>2QS)(uh_eK!6PFC(^u>V zFIA&^sUYF6F@9Cnt`GlaIB*R@!oGCBZ6&2a7nGE^`}%Z$p=#Bg2kkpZm+zz>?l3#N z@i99PuDetpjV`n8JHnw3t=%VtuPwIFXx~Z&!;uDE$w52truzD*eOGupDzL+^zeF#W zI8=vr1k!c`$sD!oDFIg`%lhoSOf;~;J_i0f4x)<3?5zMd_u4DSdizOmGM$Z4B|zj+ zx=rTrDD@lx?;?|nWLBKmN9$dn7uYCwM6QX8?(Dm z&n@Vx;N7OK@k(9fZF*R7!8=HB@-nO78@@m_k^OsXS{u2j*pe{>?@^98K%*80rUv;H zdu<=8IHQ`AjxLK(|CceKs@wtzMW#SW#Vu?@7N4)u?g9RXvImvl4Sh<%^g~v+5gm?h z#;CkH1{Y!9sag>V&u!jBP7}coKKVd6G>$6jl)pUiP85r5tcgAS$`F6d*n{^lm6Shj z?D-p4?1`Y_&<9NHSzd`fd5S&j#_Z;BXtVZteNg2%!up-zkfW{aD+suCY?2M z=#OkyQ;V-ykr%0ADlo=Vi+!jH)}yBuaJbYr;qP#&L_m*VMsXL>F}s)C>5Hfne&bXC zRjdiE4jxp5H-v7BAX2KjP*bpfon+R8gR`3`LsN-07wwxb+BaUbH(a!L_S!ox+FLK$ zt3q$0smQ)i0Wc;qaK3sb)33~7Bl<89zGUC5QmXtV`#$h$xnQr3tdEdyRskq-sU9Nj z2-9o;)lqz{OWP~S&-a-ex%6>Y4z>pc-U9_<@})F*LukTiEx2<%6$ot$kO5%S(R2$v z^jTKy4Y2N27ws)q>`f5;yuGR4UiFJaaOFHr$ZFLr>VATHB)EG$QMOgowl=gacn7sF zc>6|73{$~YrP>v!^ zja=%jw;RHtJ+NMK_6RtT6~Lo3(IcmyA%L{sL3>rVedm+*?u+)_ z7wooPdq3p*wfEU;FW9$2v|qFD`3Jk{lD+EWgZA29g*t|~_eFc7k{k2cQ{cI&PPtvG zgxqf>EiaL;#aGHf>U8j~^%y2MqiZqA*b0H|J{76|5QACIEQ7u4VKafy=dHl9<#t;* z^z}#3@GGb}QddV~Xw7TsGI9_F?eIF8Ayc8y9yNkVb7PS!xW6UTN3Ds>DP;zNO?8np zg%3nGRx&I1r7#UE48LtKYZ-p{@RuGBkum|1lBzLunn-U5-4j7*RlNlCrqD=mJEo_R z#z=3}{#mLZLNPefq=phk%Es{6SUB>G(!&>wm+QqhDySJS+<=I%N3BZ~;Tof_{p&T| z)e2qf_2@nWRo{-TYsNK%D|JP#MaFbx-B>(u zuViQ@4ccJiCi@m8DaO!Ot>AkCz}9WpVBd(_8!y_suaR@P<(j>>*KWRO-$fDavMRd+ za|hs?do}Va8VTBq3P=6%RaARRICS~E(y-z`&+Mu89dH%5;6JgTB^!B|Cp4RD71lLq z;jYlXM0TLt_S@$pFJiD#o8Ve{ZHlWBZE0FR4r_q6#?%Bc*n_)43gJN*bm&cL?YH}B zwXRzoJ`~1u;07>ySSfOwQ6wA8!vU84WiW`aVWQS0iR1V;+=iZkLC(zr1v({d22UbTe()u=9Z~u&PArxc% zUC4q+gixsr`X+H7>Fc?L<;KgTu1B^yVBZ6^+`^vY(<*RNeAMB6Z#cLE%j^xx+^0m6 z$hY;#+Nk|wr-|ko{l;K(05djp=@|8IIP~uGgwZaP@-x95l)Y{Qjl4+ALO-$s;mAw2 zT0AnhU-`+o{V(G7@=xjvCX_R%_c#MbX$P)CM?8rhy8;qaUiLVJ(26K*BNW_OXRF~7 zj{Ga--Q#79#|!yIvLkX;bHQC3#d?>Ae@;#KV9_txFk1@e%g59zw92Bps^o%2!~OeP zbf^-wp?fxJOvJ8h)gi_a;59=(~Vv&i!E=2d#H3ekeVB zxo!i`pY#SEO^6YI!27=<#TLMYl)W;vB5mVu)s_WMRaU`sb|c7c!s3Be#58EI{$3r9 z99OfQTYqS8x)1Z1E2;OyLq=Z%C^6*xr_`sZfZ#dMgJL$5$8{}(BkxNvZb{`^_ z$Lj5E;n03;{cSULtSeGW((t5OH_%Fzwzons7lrS&m5HAu9K}<$RNVxQPvJ!l+6sOD zd1w)}d_^x@(6xuiwxJ2#?|MV@5L?St*6&rG27;J05{P`~LcP76R=jE!)(Edc;T-m+ zV#|X7jiZr8*mv}TEe+kR_PKpk-;UBU3=5MBVSG1OY4LMl8(Kc5hWlQzdJK1}F4T|3 zke;?jWC|sg{SQi%<8D!|)~pM!Qfu((Y^pLE2nQ#&aC;+_R{DhU9I?bbPVP3xzjfXa1e7Ka2h-0Kh~q?T;3&*}|vb>pMp3@%XAa+Kk8S`E=STSx(QO zQ^0c|hyL`=!7~%}THZN4eWxe!*_@M0rIM+nlP=_EfKgB8XDz2VnJ<*^s12w@QZYfs znZWZJl{r(MnbjQP3)LJ@-9$VwRi0(y%F})&U}tl){#<>1!%V51OC8GKNmL=5K$ad= z9KxgehPFNR4H^8)Bq!<{23zVI@T}wzUS~kjhV)QRCw_BzAW^K;kjImq^mKk6NRaG5 zfM*wYF(HL49(QF@4S3$sfcFT{u3V`IY$0FH(L*uRSDF+~5V&EskT2mGY`y?wX}Z{e zznDl(AEI{+vhnGL)Iusjx&SgUSE9!?d8pIL=H~Kv9*ieTxK+-TQb2Y)>ZJ*#o_tx9 z$OZFLmXpp-r*ip9&!lqDu%ljmZ~!}LJPD?5BaN$jiE;t#r^_=rg=ZlYJRL8Vbf*~> z#Zn3#Xhg+>D{6t|sSE2M&q;kqy>meE*FQ$_9c#eva_)Qh?w9zTE z(H7%#DY44=#H5A)@d9;IdODsdwpb2zIf;c{LwQ#VAhI#@QXa3ho=edKIuMoePA)z} zkdns84^5?VXbdb3_gv!)#Vf5$;wdF820GELb6bL|XS8W#b7^ff_@2NNiH&0PJdt0Z zakI^<&ZV=JS=p+a=%pJ~N@0;>?wg|0nrDl?y`d9ap z?q!#mvDrf%q(azzrZg!p@Q@xbW>hs0EnS9@I&<;qGO06>pP9foCJE6ktYcWM>YH3@ zfr`PJ+xD;~l#et1Np-c>rWu!16vm>lv+?9!3&u=JK+n7TP4~XE7?QKp#!~4)EsBuG zl+M>ZMA~9SR1IX^xfS7bN3a!7=i}sm`3(^Azu81XA%#xH1A1=^;CGn1srS2vhX;q9 z*x;aZyklV8864^wP!=&lN?V*$9xFXlvNBFK@65+biAhI2Be(E)n*L^=c(gdp=;b6F znqzf?S08wE4IZVZ*iZ^yFROsPO)Xx@UKbru$@*v?r6ys1zw>Sx!E8W#CQOBdBrsHfTvz2$&# z1_w#O4>cwVc~fKekv^wmtY^d-kM;D&5X0cYVAZO-T>3h4cyvUo4h=S1?CcnbIi15@ z9kDLwa7Sm~=#Ww(-kKmW=IDJj5`KtY(l8kEr7pn|S-b?M;+Rv2FS@x84G)fuI|E%^ zN1Tq)*s*G@x!ZuQf*0j(a*5Y*$cWQ3;EaxR=@&R0oS#5;gV#V1HAp(V5dfVO z6Bzy!@DeHL6~RdpOcY>g3B(JlJ4Vi{I2+G7=TuwND+q|g1x-nB2B7sy{b|e@rrb?A zHaHSi;eIj>y=(zvp_lbAehWp&kb(?l zKj`Rm9B$sp&dg%$E3rBe(TWxqJyM>TSv(GolN7)(rslGRJcX?s#Q|0A*>W~9Wo63f zmgY9HHy*929OegjhY|Imu@!|Rrt?L-LgCPh5G0kA%+o74mNA~O3OH^?M9-0~fmqMc zo~~hMV6?wqzjy;xFPK(Z6vq$>;{^<6yvvd=EQ)E6lg}^mJs57DVnX-vaw)X{@e-=R z1-PYD!BH>fxV0VYIS!i{9F1A}{T&BE5Pg~=11plwp?Nhxsp<6E52cv8P3ALsihZ-w z@mz{}6_u5Y#$dKG*84j~Vp@HzEtQrJ55_uTJ%a;oQ9An3=SRk!s0%*O(rf^zKy> zz8nKo?hW^JAB#Cd9m8D%^d`@&?oGU;?0TCGh+9W`2D;%o7kI{zL1@k{IBDol`4D!9OOF9kux=z&h!p{p?vSQMN&Q_% zMMv6U!*x6OgK4o`J@7J4yqL&lxi`8`&>L+SqDmJ1>KY4z7re4+);_bSONv{8_h)CN z-lW3%Dy^cwJJtfJqah-pT02-!q^QpXBxCy3hK7EQ^>p+j5DdX77^7Fim?jSx6Eo!; znSskXiPy;Z@xz1tJ)I6&D7!^olI^Qk@Aba+l8hE(gIJoSQImVgM2j(aHCay8F3i-L ztwFs(S6?j7HeeQ(P8Awx8hvPwcu9)vMS6#jI?ZT-11IF~=51G8ru#d?g5#D%fwd zyp*!*5qe#dy`)Pw$5FbYyGu;~`#XlayTDn;nt^;Nn_i^x3|r_;$6piD6cp~+QE$pp2u;nLj48(n+d}-o#6U*f zY#D#z!0v*E`gA@&MMdM(He+2hE_w!fXh8Km2vcxPW@Q?yW)>E97^+K(L!<@RK*#Ye zt;|_?9_7EWK$@||VwR=Fc5Vd=kWH2OT;Gte@5Sdj(@F+?8Qx7V*7k6#i8PNpZVc!88#N@FvucuddJsT@$wNKI9hK{TZ zIa+qnAS^m~ecMrM7X(4Gj=+e7x>L|sx=b(lVmXdElxjcLwMqen{JczUr3Jd5J4c86 zX`*U6s0&M=*ocJ?g@2ZkNjt`gMa&z?=~_AMA1VXcEdOalQ>4pa-Gd1k+{C#&Jgee@ z5S7W%jz=0X*&%LlZuIBA@KboB+NImU&R9o3T9=}6X?3b)WOq!>YtY5o($vflvscqh#kp%t`Q^d4D7nth#9?FJHlS2H9BVVNTkUw_NQ2n6e=L!Y$`{S zODx5)p~b5vb<2o3rWV80KiJqo3_zEXoMe&Uh>5%Q_&h_?i*4FI&~6&5^?B}UtmpdG z&WBp3^~eenp}&-$Hl|*5@TcNfZmDfk6;)KrO_O>CVg%Pr5)s<1jM{oiz~ISDs}@oe z2=nB*wY#aT#wxvW1V&HJ07Paa40OdF7#!}aTCKWo4>}`5b9ydEjwY! z_##FbrsOU;wXqI&!K|_L7bOe~4s=zF4aXs>rPuK|mc0w^(iC}k0fdpHT0~3LT9U5g zL$S(wmmE5U@e$03Xo+7YS7FJJg=rWu)E<#pKZ-G^Z9>JB zqy2*&F-xsY%2>)Mca@=Wr~D(9y-D&0m`AzmR4b0b0p$m^iFBP9#UyzIW7JJYx)>Q9 z8X6p?1*~jrVY_@LRV-46n~*q7%b!|NG2V~EuerKLrU96JjgrDJ46ydc&K`CLvsltk zFT#t?EK(G77vt!m_pst;T)Sp^DM}V2D--2DScM3P?Cp$=W4r4}4{Regh-m^mD|BU@ zRo2ICS!PHE$}R zwq1&%PT1cv=lkMmVSTO;o4Cv3;g#LwoEzJ#Q|$bK&d@oos^2I(>$|&tEpm0z;7CqN0(4< zH5*dbUvdlRxInsASeGIi^8Q|rnodQozOG08{2x}+Qcfh;^ExE)r*2i(w>-Q9mh{P^ zhPU~Gw@>eWoT+|jsIRA!rK!C-!G{F6e_l5ILKnDWKw}_WgJdO%sKEfnmB?XkiXxdjFk$O!U z*vH^IIK8e`1Lta}{XCKn(J51(06s(>l?JWfXYy}y3YEU)yho+@TUzUHc50I6ImKZR zmj%Ab3=faLW4_j(@6gbm+jWZm5U|J`1J)@47Z|1cLvoK*2!*Yr)TQ*mL(iN zW{SrI{F*_X6wuAlI}6e>KENX>%PB^ZfPZRGCk2#ocRd+}>8WGUV@wH?W zHUaB|fX^C^rv!9!JmGOZy4B_FI{h@Kn05*nVvZDm1P(I}<4}F3K^J!Y3cuep{7wky zD*G`X112U?T0{s~!vf;nRdvB}3n&bO))PncP5<9xe1_*cI7QD2_~m+CBw#rLe#4+f z1 zCj=Ds@O}acdl;2~Q>Njk1)O12$a*Aj+1u{ZOUWa${H~E@SU?c~?Rng%-NPb{tKE;k z*}tA&+^X>(;WS`P2thw`-B_lF`PHK`gsDN$TbpB3GseJ-x zjo_!eCg7bj;f+-(`7_K7LFR86{FbW%5y72`mNKT&lio@_ji5Dwlw8FnS6HFr9qo$u z<#mjEqt88e?F0v`58kSA&v6P)^0Da4wbVgNsCKXwf?B@Y>_h!s=INrAuPFLZ3)NhO zw|ubBhx&e|a#3H0_g^vf%N5@89c2%194dU9ZuwK3`mQbH=HD8kiCTSGmX|2;dWhm) zqSktiJISf9Omg#=43UpaULqfvyhI+E0+x(4i|riNAm1_cXf=6zHyx%nZ zw1Dl5QsL0s?$iE~)M7=l7mQ@X0)CHCXx&riB-6f0bD*i2z`MAk6rp6KF+?b^v<8za z0UzPAL?-Y}e15&+Cz<`+Tp|=$TCE5rBb`Eoe%D{ z8vxg`N>Qo!71eGB|PEX#I{ z;opDplub+74_3;4(zmQ)!F6smb;ku1J^?Espr{SveD<6uOq!>VRl*??Fo^A}SK&c1 zR9Fldoi|+;c$jer$^t&%A`|#;dDp}zc30*NQup011_FybU{EU#P_@#ic|)x{K6Nis z?ap(3=Unv)e9#P_Q?-VIT?(T%14y|YY>Pfi(~z}+j!?!WHcH!9k9d3~PF%Ev-EL;5 zDL=rukF!>nDvxicGsV5887IBXIH{#^{{~FS|H&NOGm&pIZas5#-*a;z7}13N!Ac$k zpq4K|d)gedgzBLR^>t<r2{Z{=|>hOPThY+FXFf6r3+K{_H9*H2PDV9B@?(}%RziSSprzrR$mh3iCkv5Kv1 z9j_JPf3;4xy{FoR?_&^$?|B4^j5@5XD~)QRej!`792+ zt@BwNXx^J}N+MksIK_Ar@N>p|P6~KUdR;wMmYkTZPt4WK;V+r}&zovu0{)4q=Cpvq zn1+4qvg9h&oEEl~^jpk$C(d`I3o|4QxPQGwKFaeF`SjIB7Wx4re9B#shP_0ui<6H` zIL4cwD9&?=@g|@=Y=pNu<`n`Tq2eO+sRz1HR6r?;$6ETH`&Wqm(UkL%%uD2>cQ28T zA}p(&D>`N>92HQSuLFTwN`bwFV}6B~+PZ%8a?R*6rx*tUzTco?0{#x8mKNs@rbuua zwnm?f#GZ^ue!<{RJsCOqq~}$DAjG+kY1%oZ>AAr3jPr?sq7f1DFAeFafP0OGPYHN0 zqjZxbCt8I%gsopHReje~6%+7AQ`JKP-fmDa0S_3|LjsBj+6hRmB2dgv5W5g#h&?h&=UHc zOoTbqlS`@l?QAK3#;MrVzj6LmgFmh8ts=J@s^x-B1Yx+_Xw4B&Y+0+w&8Gr;ISvcQ zordE>0=hX4`_9h1{KkZz6vq7GljkcExFK)p@xNfj{0pZ6Yy1@kg&|OGCIkl*;-gF` z642X60{@8bL7I=9ujQzawLC5BzjK+}jAlGmVOdgv^z0HN{e?GZ{wJBI7{nRQiz)=~ zm4-0FCP@dNKmv<0nKd4_KKL{|2*NVh-soIV>fm zVrcdceBFV!?3hp4rCf=(^thCM-pG7PKoN#U#<)k1+MB$)Mw4Va!t!%`PdSc1=8P~^ zNUvU{>@_2fj|IFptP8dpBA*B&M4g7nH^>UvgN7_FplC}kQTKQ>fP>gskauwEJF|E* z-+VWx*s*A8Z&xkwVTlg}F`Z+Wo)A##TiRE3bD>dFcsRx2q(KdN^^PxV@$IdK?1X?K z(bCm!;6l4i;o&w04;YkBwIg~T)0*W}2BM#UmQ_oQAtwb7*}4dZoPg4xrKQ$I7P;<6 zIEAwk@LdLVLcrZzk@9_#!8fGT1%U*V+7+F?Tl@Q~%>5&#mLUO!G3IvCoL5X8o)sg_ z;%?*HQj+Fy-l9&e43rnLZd1d^!wmjj1?5+ga05&-R3Q~GW>6=E(MJtxM8M|^$|oXt zi9G%wU`d->nG@!m&-!=-JQ|m}zRQ#ti_a}N7K3fvG52!1ly#CT6q*xE8?<^a3oLdE z%kpZmiwg*`4-xU-#bozzYFlNi^`^^`6;WY<-YN+55^cTW3UPV3Dgn0})F}aXFp9>` zsIQmu;}{c;^@ig~0o@$E>sGShf3J~{ELa%cW*B<9U$x5m92fpFr)ZvlFB;S-0Yw?t zYo3>5OgR3l;doL&H%I^G{aKBK)I4GMeZ$bVdGmbxgPe*TO8zqjzx4Y1ZA|k{PN{l< zKh3x$X63)7L%sD0PNn)k;{2Cu@VZCbzk8^EaUJJWIB2Z*x0W7OEk!@gEbt6Vz|S&D zJ9^29(tICw=__ zIGz&F&C!2t zq#rhOzeqnkdtZBP(bvp}tbp~~L2tQ`6|`RQ#fPjdAwT+M)-_+eZT+h+K5QKe`|){$ z^`#Yl_=pu*>4#r#P5R_i^~Lks z3Rd+MvUu=TqoE&uL&k&WH(xw>9>g9zzk}ex^ZTM6{B1QDz2Cdc`a#8?F$HaB`Qhok z4nO>P;Dh)a-Bat@0adQI0wnx%HTYj<{Mz;H6=FcYi~j+uqUQkL{glFc`}cX^iGOPj-yjd|4((AzD3nyS@|XSzm@67>NWi*kf-ZijKA}yc9s8t z`n4?Da;c}cn7F?fZPDa<9epFQUDNX#()t+ld6xP77cTGx#=osm(>HMZ{tn~stk?KP zrvDz}Z{DEsZ({uaX8hhw8sEhD6`01ahdsZrU*k`Mj;=L~|Jg0=DlhzRWBh5Rf1A2% zS$6@yF1X2x)UqGuvk(zgUY&iuc7bGxE`HUtwA*!TpuovoIiJN!xt({BI zA7K9PVmtX5>-iYtfB!~Z?>zGvTY^uC>3dk8txW&8lE)kOX?K(Cr*@pajrq*6J$JG^ zv`^{hH=bSs{~6{p%;R0`>e>?YUta?MJ?3+U?M=4y0<7nY+%NCv_O4KP&bX4TOW>P; zCx2DzH)#F27V)B~W_;27-cJuF6n?d3*Nk`CL?u48dY)c_&m+ud=)QI(eTv)gi;Q1j z{xUOoKjVLu?Og2S!;Jr6jXnGU<3F`g^Y3T=&oKVlE{&Hby8o>3Oyo-bo#{WzaAFEutdK%DSB6h3=RTc??qb=G5^+E+tuA4u|QKx@R8H0 z=`cmtNzATqU;p$!sE#90CQ>-LC7QQz5GNoUcZM@TXK*+yPT!)#yKxLP4vw9`iLOZ; zfmU?lWt?4^$FaF795Nc+*Se?4p9qJ|=dw<`fWxJ5(iYB-!8x@!Dac9E$+{@w%Be$} zsz~{8zUq@`B&QDOGpE$(qmJBP#s2@IB^;>(9XZa?VVt?=;Mh>dK@ML&aJq0Nn?fEt zf)fjmjN?$go=)6T$EZvD>CibBLLDfGqnY{#596?)!J|ht1ERKkXAV{+xPG<*AaqR7&>-Y9}g)fOVU~6)s?WAspKDx=V`a+eqpm(t2bR|!cUUP5lcE#y)M1y76Fc6?hVAYh zoD8WBd#jWpBO_U>F-Ex-o!eM_k4_D)#;}al2UNrU^l5(j=*8+1bdqy5Mt`C~pAU~C zI_WUDY66#C(K%i?qqB%}+374#i%#jRCUzX0>z;7%Jrgxh{f{rKIxJfaQyi>EN7Yxg z$30MePt2ynl9#NV{N~cf9`f)~C%b8hRfBL^Wvw5;_b_Jgbr5~qku&48xcX?|Y7wkx z5yyqaCy+vyDxDMv>Pr=7ttgIfOhr2m_cWB^87qp7mjhJXm`tLqU@(s3 zaDIr82S?2V-EKt@vu5a|)@U*{QO0qs1suYL0LNMNi3_J6m^FwLpD_9BNV zlqoO!id(P_q3gpsQ8Wa~eueO92JT0%zDmnyb;jxl3QpOl`YyzGQ^0#8**{j#5Vj0)hQb%gt>)n6ZOVsF>TFZ-Tf;#WpnxUk4C z^+-B~`~TNfUiL>L)F@mJt6!YkXuyFBAGs`e?RWI%ga9WQ)Jki6`L6*WoYXJtYr}cxCq61s96`>vP##q4GD=N_9OnA{FB(8 irqsWaw84+-ybK(T_UM}2q+j_Lc*Cq+v*FU-zWRSK7o6(= literal 0 HcmV?d00001 diff --git a/marcher.h b/marcher.h new file mode 100644 index 0000000..5a38355 --- /dev/null +++ b/marcher.h @@ -0,0 +1,83 @@ +#ifndef __MARCHER_H__ +#define __MARCHER_H__ + +#include "images/images.h" + +// define pi if not available +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +typedef struct __myvec { + double x; + double y; + double z; +} Point; + +typedef struct __mymtrx { + double entries[9]; +} Matrix; + +inline Point pt_new(double x, double y, double z); +Point pt_scale(Point pt, double length); +inline Point pt_normalize(Point pt); +inline double pt_length(Point pt); +void pt_add(Point* pt, Point add); +inline void pt_sub(Point* pt, Point sub); +inline double pt_dist(Point p1, Point p2); +inline Point pt_mod(Point pt, double mod); +inline double pt_dot(Point a, Point b); +inline Point pt_cross(Point a, Point b); +inline double pt_angle(Point a, Point b); +inline void pt_print(Point pt); +inline void pt_print_n(const char* name, Point pt); + + +typedef struct __mycam { + Point location; + Point direction; + unsigned int fov; +} Camera; + +Camera camera_new(Point direction, unsigned int fov); +void camera_set_looking_at(Camera *cam, Point origin, Point thing); + +// Scene objects have a position, some args, and a distance calculation function +// the distance calc function has the following signature: +// double distanceTo(Point myLocation, double * myArgs, Point externalPoint) +// where myLocation is this.location, myArgs is this.args and externalPoint is the point from wich we want to know the distance +// the get_color function takes args: point_hit, direction_hit, myArgs, MyLocation, MyColor +typedef struct __myobject { + Point location; + double * args; + double (*distance)(Point, struct __myobject *); + Color (*get_color)(Point, Point, struct __myobject *); + Color color; +} SceneObject; + +typedef struct __myscene { + unsigned int width; + unsigned int height; + SceneObject * objects; + int object_count; + int allocated_space; + // some other settings + int max_steps; + double threshold; + // colors etc + Color background; +} Scene; + +Image* render_scene(Scene *scene, Camera *camera, unsigned int threads); + +Scene scene_new(unsigned int width, unsigned int height, int obj_count); + +void scene_add_obj(Scene* scene, SceneObject object); + +void scene_destroy(Scene scene); + +#include "src/point.c" +#include "src/camera.c" +#include "src/scene.c" + +#endif \ No newline at end of file diff --git a/render.bmp b/render.bmp new file mode 100644 index 0000000000000000000000000000000000000000..32f011e96984fa45352619bfe6d16d6892d82d23 GIT binary patch literal 1440026 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%0D+|SC-!p-$FPy#kZ4#lzpIY$4DCq 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 literal 0 HcmV?d00001 diff --git a/src/camera.c b/src/camera.c new file mode 100644 index 0000000..3a79f2e --- /dev/null +++ b/src/camera.c @@ -0,0 +1,172 @@ +#include "../marcher.h" +#include +#include + + +Camera camera_new(Point direction, unsigned int fov) { + Camera camera; + camera.location = pt_new(0,0,0); + camera.fov = fov; + + // normalize camera direction + camera.direction = pt_normalize(direction); + + return camera; +} + +void camera_set_looking_at(Camera *cam, Point origin, Point thing) { + cam->location = origin; + pt_sub(&thing, origin); + cam->direction = pt_normalize(thing); +} + +void camera_iterate_rays_const_angle(Camera camera, int width, int height, int threads, void (*callback)(Point, int, int)) { + // negative threads => single threaded. + if (threads < 0) threads = 0; + + Point span_z, span_xy; + + // get rotation axis + pt_orthogonal_plane(camera.direction, &span_z, &span_xy); + + printf("rendering %ix%i px", width, height); + + pt_print_n("span_xy", span_xy); + pt_print_n("span_z", span_z); + + // angle between rays + double angle_step = camera.fov / (double) (width - 1); + + // rotation applied to reach the outmost end of the view + double angle_start_h = - (camera.fov / 2.0); + double angle_start_v = ((angle_step * (height - 1)) / 2) ; + + printf("step: %f\nstart_h: %f\nstart_v: %f\n", angle_step, angle_start_h, angle_start_v); + + // calculate both rotation matrices (expensive!) + Matrix rot_z = mtrx_rotation(span_z, angle_step); + Matrix rot_xy = mtrx_rotation(span_xy, -angle_step); + + // rotate vector to starting location (bot left of screen) + // (very expensive!) + Point starting_point = mtrx_mult( + mtrx_rotation(span_xy, angle_start_v), + mtrx_mult( + mtrx_rotation(span_z, angle_start_h), + camera.direction + ) + ); + + // initialize threads + int thread_id = 0; + for (int i = 0; i < threads - 1; i++) { + if (fork() == 0) { + thread_id = i + 1; + break; + } + } + + printf("Thread %i reporting for duty\n", thread_id); + + // this point is rotated for every pixel + Point curr_pt = starting_point; + // (0,0) screenspace is bottom left corner + for (int y = 0; y < height; y++) { + curr_pt = mtrx_mult(rot_xy, starting_point); + // move starting point one row down + starting_point = curr_pt; + + if (y % threads != thread_id) continue; + + for (int x = 0; x < width; x++) { + callback(curr_pt, x, y); + curr_pt = mtrx_mult(rot_z, curr_pt); // rotate point + } + } + + if (thread_id != 0) { + printf("Thread %i is finished\n", thread_id); + exit(0); + } + + int status; + for (int i = 0; i < threads - 1; i++) { + printf("Waiting for threads... %d/%d\n", i, threads); + while(wait(&status) > 0) {} + } + + printf("got threads\n"); +} + +void camera_iterate_rays_const_dist(Camera camera, int width, int height, int threads, void (*callback)(Point, int, int)) { + // negative threads => single threaded. + if (threads < 0) threads = 0; + + Point span_z, span_xy; + + // get rotation axis + pt_orthogonal_plane(camera.direction, &span_z, &span_xy); + + printf("rendering %ix%i px\n", width, height); + + pt_print_n("span_xy", span_xy); + pt_print_n("span_z", span_z); + + + // distance each ray has from anothe on the ortogonal plane + double step_dist = 2 / (double) (width - 1); + + // vectors to move on the projection plane + Point move_right = pt_scale(span_xy, step_dist); + Point move_up = pt_scale(span_z, step_dist);; + + printf("step: %f\n", step_dist); + // set starting point + Point starting_point = pt_normalize(camera.direction); + + // rotate starting point to (0,0) + pt_add(&starting_point, pt_mult(move_right, - width / (double) 2)); + pt_add(&starting_point, pt_mult(move_up, - height / (double) 2)); + + // initialize threads + int thread_id = 0; + for (int i = 0; i < threads - 1; i++) { + if (fork() == 0) { + thread_id = i + 1; + break; + } + } + printf("Thread %i reporting for duty\n", thread_id); + + // this point is moved for every pixel + Point curr_pt = starting_point; + + // (0,0) screenspace is bottom left corner + for (int y = 0; y < height; y++) { + // move one row up (this has to be done in every thread!) + pt_add(&starting_point, move_up); + + // only render the lines this thread is responsible for + if (y % threads != thread_id) continue; + + // actually iterate this line + curr_pt = starting_point; + for (int x = 0; x < width; x++) { + callback(curr_pt, x, y); + pt_add(&curr_pt, move_right); // move pt right to next pt + } + } + + if (thread_id != 0) { + printf("Thread %i is finished\n", thread_id); + exit(0); + } + + int status; + for (int i = 0; i < threads - 1; i++) { + printf("Waiting for threads... %d/%d\n", i, threads); + while(wait(&status) > 0) {} + } + + printf("got threads\n"); +} \ No newline at end of file diff --git a/src/point.c b/src/point.c new file mode 100644 index 0000000..bfa2ecc --- /dev/null +++ b/src/point.c @@ -0,0 +1,180 @@ +#include +#include + +// basically a vector3 +inline Point pt_new(double x, double y, double z) { + Point pt; + pt.x = x; + pt.y = y; + pt.z = z; + return pt; +} + +// scale vector to length +Point pt_scale(Point pt, double length) { + double f = length / pt_length(pt); + return pt_new( + pt.x * f, + pt.y * f, + pt.z * f + ); +} + +inline Point pt_mult(Point pt, double scalar) { + return pt_new( + pt.x * scalar, + pt.y * scalar, + pt.z * scalar + ); +} + +// return internal angle between a and b +inline double pt_angle(Point a, Point b) { + return acos(pt_dot( + pt_normalize(a), + pt_normalize(b) + )); +} + +// get the length of vector +inline double pt_length(Point pt) { + return sqrt((pt.x * pt.x) + (pt.y * pt.y) + (pt.z * pt.z)); +} + +// add the vector add to the vector pt +void pt_add(Point* pt, Point add) { + pt->x = pt->x + add.x; + pt->y = pt->y + add.y; + pt->z = pt->z + add.z; +} + +// add the vector add to the vector pt +inline void pt_sub(Point* pt, Point sub) { + pt->x -= sub.x; + pt->y -= sub.y; + pt->z -= sub.z; +} + +inline double pt_dist(Point p1, Point p2) { + pt_sub(&p1, p2); + return pt_length(p1); +} + +// normalize a vector +inline Point pt_normalize(Point pt) { + return pt_scale(pt, 1); +} + +// dot product of two vectors +inline double pt_dot(Point a, Point b) { + return a.x*b.x + a.y*b.y + a.z*b.z; +} + +// cross product of two vectors +inline Point pt_cross(Point a, Point b) { + return pt_new( + a.y*b.z - a.z*b.y, + a.z*b.x - a.x*b.z, + a.x*b.y - a.y*b.x + ); +} + +inline void pt_print(Point pt) { + printf("(%f, %f, %f)\n", pt.x, pt.y, pt.z); +} + +inline void pt_print_n(const char* name, Point pt) { + printf("%s: (%f, %f, %f)\n", name, pt.x, pt.y, pt.z); +} + +// find two vectors that span the orthogonal plane, where +// span_xy is a vector lying on the xy-plane (and pointing left) +// and span_z is orthogonal to span_xy pointing "upwards" +void pt_orthogonal_plane(Point pt, Point *span_z, Point *span_xy) { + pt = pt_normalize(pt); + + // get the vector lying on the xy axis + // this is done by + *span_xy = pt_normalize(pt_cross(pt_new(0,0,1), pt)); // points to the "left" (of the viewing direction) + + // now use this, to find the vector + *span_z = pt_normalize(pt_cross(pt, *span_xy)); +} + +inline Point pt_mod(Point pt, double mod) { + return pt_new( + fmod(pt.x, mod), + fmod(pt.y, mod), + fmod(pt.z, mod) + ); +} + + +/////////////////////////////// +////// Matrix operations ////// +/////////////////////////////// + + +/* create a new matrix with entries: + x1 x2 x3 + y1 y2 y3 + z1 z2 z3 +*/ +inline Matrix mtrx_new(double x1, double x2, double x3, + double y1, double y2, double y3, + double z1, double z2, double z3) +{ + Matrix m; + m.entries[0] = x1; + m.entries[1] = y1; + m.entries[2] = z1; + m.entries[3] = x2; + m.entries[4] = y2; + m.entries[5] = z2; + m.entries[6] = x3; + m.entries[7] = y3; + m.entries[8] = z3; + return m; +} + +inline Point mtrx_mult(Matrix mtrx, Point pt) { + Point result; + + double *m = mtrx.entries; + + result.x = m[0] * pt.x + m[3] * pt.y + m[6] * pt.z; + result.y = m[1] * pt.x + m[4] * pt.y + m[7] * pt.z; + result.z = m[2] * pt.x + m[5] * pt.y + m[8] * pt.z; + + return result; +} + +// create a rotation matrix around an axis given by the normalized axis vector (u) +// taken from https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle +Matrix mtrx_rotation(Point u, double theta) { + double theta_rad = theta * (M_PI / 180); + double cost = cos(theta_rad); + double sint = sin(theta_rad); + + return mtrx_new( + cost+u.x*u.x*(1-cost), u.x*u.y*(1-cost)-u.z*sint, u.x*u.z*(1-cost)+u.y*sint, + u.y*u.x*(1-cost)+u.z*sint, cost+u.y*u.y*(1-cost), u.y*u.z*(1-cost)-u.x*sint, + u.z*u.x*(1-cost)-u.y*sint, u.z*u.y*(1-cost)+u.x*sint, cost+u.z*u.z*(1-cost) + ); +} + +void mtrx_print(Matrix mtrx) { + printf(" %8.2f %8.2f %8.2f\n %8.2f %8.2f %8.2f\n %8.2f %8.2f %8.2f\n", + mtrx.entries[0], mtrx.entries[3], mtrx.entries[6], + mtrx.entries[1], mtrx.entries[4], mtrx.entries[7], + mtrx.entries[2], mtrx.entries[5], mtrx.entries[8] + ); +} + +inline Matrix mtrx_outer_prod(Point a, Point b) { + return mtrx_new( + a.x*b.x, a.x*b.y, a.x*b.z, + a.y*b.x, a.y*b.y, a.y*b.z, + a.z*b.x, a.z*b.y, a.z*b.z + ); +} \ No newline at end of file diff --git a/src/scene.c b/src/scene.c new file mode 100644 index 0000000..b6367ef --- /dev/null +++ b/src/scene.c @@ -0,0 +1,121 @@ +#include "../marcher.h" +#include "../images/images.h" + +#include + +static Image* current_image; +static Scene* current_scene; +static Camera* current_camera; + +Color march_ray(Point origin, Point direction, Scene* scene); +void camera_iter_callback(Point direction, int x, int y); + + +Scene scene_new(unsigned int width, unsigned int height, int obj_count) { + Scene scene; + scene.height = height; + scene.width = width; + scene.max_steps = 32; + scene.threshold = 0.02; + scene.object_count = 0; + scene.objects = malloc(obj_count * sizeof(SceneObject)); + scene.allocated_space = obj_count; + scene.background = color_new(0,0,0); + return scene; +} + +void scene_add_obj(Scene* scene, SceneObject object) { + if (scene->object_count >= scene->allocated_space) return; // limit reached + // TODO realloc + + scene->objects[scene->object_count] = object; + + scene->object_count++; +} + +// render out the scene with threads +// creates a shared image, so destroy with image_destroy_shared then free struct with free_shared_memory +Image* render_scene(Scene *scene, Camera *camera, unsigned int threads) { + current_image = malloc(sizeof(Image)); + current_scene = scene; + current_camera= camera; + + // initialize shared pixel buffer + image_new_shared(scene->width, scene->height, current_image); + + // iterate over the rays + camera_iterate_rays_const_dist(*camera, scene->width, scene->height, threads, camera_iter_callback); + // or camera_iterate_rays_const_angle for lense distortion (this might not work correctly tho) + + // return the drawn image + return current_image; +} + +// march the ray, set the color. repeated for each direction generated by the camera +void camera_iter_callback(Point direction, int x, int y) { + Color c = march_ray(current_camera->location, direction, current_scene); + image_set_px_c(*current_image, x, y, c); +} + + + +Color march_ray(Point origin, Point direction, Scene* scene) { + // some local variables + Point pos = origin; + double closest_encounter = DBL_MAX; + double dist = closest_encounter; + // the closest object we have + SceneObject* closest_obj = scene->objects; + + // get steps, threshold from scene + int steps = scene->max_steps; + double threshold = scene->threshold; + + // as long as we did not max out steps, or got very close to an object + while (steps > 0 && dist > threshold) { + dist = 100; + + // find distance to closest object + for(int i = 0; i < scene->object_count; i++) { + // get pointer to scene obj + SceneObject* obj = scene->objects + i; + double curr_dist = scene->objects[i].distance(pos, obj); + + // if we are close + if (curr_dist < dist) { + dist = curr_dist; + closest_obj = obj; + } + } + + // write down our closest encounter + if (dist < closest_encounter) closest_encounter = dist; + + // scale direction vector to distance, then add it to our position + Point step_vector = pt_scale(direction, dist); + pt_add(&pos, step_vector); + + // one step taken... + steps--; + } + + // check for a hit + if (dist <= threshold) { + // a hit! + return closest_obj->get_color(pos, direction, closest_obj); + + } else { + // a miss :( + // this should be 0! + return scene->background; + } +} + +void scene_destroy(Scene scene) { + for (int i = 0; i < scene.object_count; i++) { + // free args memory + free(scene.objects[i].args); + } + free(scene.objects); + +} \ No newline at end of file