From a8f9e1724a1e2d9eaa8c55249e9c6e69e0a0715f Mon Sep 17 00:00:00 2001 From: H3XploR Date: Wed, 19 Feb 2025 16:30:41 +0100 Subject: [PATCH] update norme --- intersect_objects.c | 112 ++++++++++++++++++++++++++++++++++++++++++++ miniRT | Bin 0 -> 350888 bytes miniRT.h | 18 ++++++- tags | 18 ++++++- trace.c | 109 ++++++++++-------------------------------- 5 files changed, 169 insertions(+), 88 deletions(-) create mode 100644 intersect_objects.c create mode 100755 miniRT diff --git a/intersect_objects.c b/intersect_objects.c new file mode 100644 index 0000000..882e283 --- /dev/null +++ b/intersect_objects.c @@ -0,0 +1,112 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* intersect_objects.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/19 16:07:55 by yantoine #+# #+# */ +/* Updated: 2025/02/19 16:16:52 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "miniRT.h" + +static bool intersect_spheres(const t_ray ray, t_hit *hit, t_sphere *spheres, + int numSpheres) +{ + int i; + bool hitAny; + t_vec3 n; + float t; + + i = 0; + hitAny = false; + while (i < numSpheres) + { + t = intersect_sphere(ray, spheres[i], &n); + if (t > 1e-3f && t < hit->t) + { + hit->t = t; + hit->normal = n; + hit->color = spheres[i].color; + hitAny = true; + } + i++; + } + return (hitAny); +} + +static bool intersect_planes(const t_ray ray, t_hit *hit, t_plane *planes, + int numPlanes) +{ + int i; + bool hitAny; + t_vec3 n; + float t; + + i = 0; + hitAny = false; + while (i < numPlanes) + { + t = intersect_plane(ray, planes[i], &n); + if (t > 1e-3f && t < hit->t) + { + hit->t = t; + hit->normal = n; + hit->color = planes[i].color; + hitAny = true; + } + i++; + } + return (hitAny); +} + +static bool intersect_cylinders(const t_ray ray, t_hit *hit, + t_cylinder *cylinders, int numCylinders) +{ + int i; + bool hitAny; + t_vec3 n; + float t; + + i = 0; + hitAny = false; + while (i < numCylinders) + { + t = intersect_cylinder(ray, cylinders[i], &n); + if (t > 1e-3f && t < hit->t) + { + hit->t = t; + hit->normal = n; + hit->color = cylinders[i].color; + hitAny = true; + } + i++; + } + return (hitAny); +} + +bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor, + t_scene scene) +{ + t_hit hit; + bool hitFound; + + hitFound = false; + hit.t = *tMin; + if (intersect_spheres(scene.ray, &hit, scene.spheres, scene.numSpheres)) + hitFound = true; + if (intersect_planes(scene.ray, &hit, scene.planes, scene.numPlanes)) + hitFound = true; + if (intersect_cylinders(scene.ray, &hit, scene.cylinders, + scene.numCylinders)) + hitFound = true; + if (hitFound) + { + *tMin = hit.t; + *hitNormal = hit.normal; + *objColor = hit.color; + } + return (hitFound); +} diff --git a/miniRT b/miniRT new file mode 100755 index 0000000000000000000000000000000000000000..88699d4380f541c28dedbc5e084ac90a68c23a94 GIT binary patch literal 350888 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
  • $Ow%Vv%Q|OS)Rgo;ED->H~nKhE;XON);Hq*2YZ8e3C(8LpEdUMJ9?mM8s1% zpAK)GbgeOW$ca@KkzEuWPs4Qhh)Jp1FnqQ=#uNwcegc;>tKl*TO5b1uggsvY^a@7< z=NLkU1+;h&K$)cGX7>`mAq8boz{uC;fo`4aw?1G9JDwWw!9K%<1Lme8fAf%_y z@pjE8gng_boe%nr19}D0!4Mt zCxqZIM#OSPx3d-K3~Mc5JWi((>o835AOK#UbuQ+hMxLF4>Nsc>40EVJf+7G_p~WaY zpr-u0yub=K&Q_v^Y4TFIMFI~+%b45&?C=g(U0)w-Q}ySIi^qd4h$+W%6Bg9!QaKjO zkwU{}H-N)icO?aS%0#R*<%|xX%`Hq3VJiX57Q_G-z|^Guw@Tz$Y%z(65<8>$JKw$4BQmy)({S^ z4z@nsT*5S_~+Q(HBy}0W=eC8cAaY^6D5?F(J_{ zac2R$Yyj$I_h2SuaNpnrt(*p>8HutuTFX@3*Gz&(XpGyRg9|9o1R1OZWeEHDGMiFx zRz68f-%;%F+0|VfD;<@DL1^5VEzp-LemU*~Y1D1fAP58HGT7tD%LoB8qoK{BTxe=b z8-7{_;I_Oa!>zPcR!KHn#^|hP#|ymuC%4#TA<61%eH2WAfX*P)+{`g zI8Um!OuvBw?u2ksSde$|z<^uE;fV|ZzIUb)$V_t(!MOzn80@f{AGS+_x7~)-rNKeo zqmDF+e3UQwrc?{2gp65b*`4n&;NUTF3A&urM6yNaAkoPo95cR8i^u6QELrS~JMnvo z%Dm9;g8jm$TJXJevy72J%YGMdzBbi@F*^Ql1yvgcf)qsB)u^$9*g1__Osy;gD%dxQ zUjmi3_=VdR$e-f%;0OSU#88;3X`-7VE+a0dzPZj)9y01+>C)#J4W?#2$I8G$vE`W6Tu)XklVP6E!SW5-eHhOo#HCU@FdKG7KpIxmOGd0 zD3JhpBypv3km)AL(+JG3nB7K82|6fi!MoBM<@t(=4A-*N6>+;~Y~l>k$rV$a>!&-x z&CmqVrPJ7Zf#E@n5vHUtfn8<2ZtwVP7&d$_n{$cagg6cl3vMUD%moxnqVAwY>wt8i z1`T#1_=y%*7dmf*npo22)REcYnZ#t>qj_s?Gh3#401i`W9#(B}j3ZzX-hrFcvvcL_ z;$|;ya*qZX>t5!5{x!Ome9pHqI!4VQzK!y2-UhV?w=&qkaVc@QB&I-GH5%nv)?(x0 z0mxvn1_O1got&llNW#d}Dz-hdOWlL<_-UG3uP-kx&o5&?xK@7d@Un|w6kDAt7-C@Q zJvoSd@B4as`ulrPVy$(}hQ+P{7HhC8C&5|?S@rBOU9ktsM5|q&laT}1l3VD-p>{@l z7u+}$vHSwbN?;vT9+zTVnBlRe@(-g`)!eqCd#Zoq#Ui~EFw$%he%T$C0A_eJ(1og+ zvZ;I3(gHX7L?v;g>qbs~;DF#3aB1zxN?9hvRU%-=U+5QRosQO!!_i(SCV!!LK|X@A z84nD2T&6eltR&QeqR8`GJMDsS|Su5{k7>O2(V~L|ZLTOyI7BmaQ|yV0deFaPChAfx`V6$b|vm2T{{^ zyTP0GAff9Px-%2BKv>1o+Z|Dn>LS+oEVhsa%A5%(rj;T@s8JJwz;uIF4XUJuqp{MN zq2Y@$;U#Ra+8)3JRuUH1QH{?}kd&qaxTmS91onj_zlAGSE|W!dSzzEOY;!%(;<9^*hDFCxMaOM-wR zMg#)@+3dw|Rit6@eQ9|fMNt7){+c2|!yO`wx6q$iKY*{k4qLM305|TR+X&%JASf(L zYEyZ3kLYxyY5l}*i?EkPU=*1})t zyF+(JtwN#X>N58M4P_EUexc0?DH{1Ap)M|JrNA^nz8?)!wKG$dnaQerFF40n7v>fg z!tG_yWZ6QhM!wqz7WlC8(%h|$9W#lLlH0P#6g@e`L2jv|WzOVhyRHN-iQD67(oJ}i zH4fWNjL>j_6+0!CS**cm0kB#%1CZ>**I*iK6o0A(kJ0@$d=>@yl5*W}X6Ntj&E}@Z zPV!1KJK49y?=cgDOE8e)sCCCek{QiA#q^7d+PK>2UUPY@xqj#Nuua)hRMeAUaYP1(-th& zHQ~_)W2+(ys=e{GSU`=v(HvH>mj%1T0Vo&-#qYx?Yo*pstrB)@=cEW}V@U#j%u@F# zZ*dYOl8OWT*V8+QBs*l!!3Lksz;&{{q~IP6>$4=4W|2$dWhqx_R=1WyNDzGFj10mb zpNiR>s$g?8alvIPSSd&XX2di}JZfx2Z|ArTEii=AtY0C~u3RKMOit7#8dAH0o1J(n zC9mA>7c?CL0n?^K-v=MR!o?LDWqX&tlI|9zLSjL)r6@=U7(-Wwr!=e;F{!xS*A#UX zMM;W8jNY0loT#ISx|NSvLMrxtLn-&V1Mj4iSKl}h<4q1Tpe-fEkm)Pf+RETS=dO2P zfJA2G^h05pK~>ejRZH0$Sd3dN4r%RuEI14mpjQ=`vLuaLbZ!jM6DnNyYpjXKHn=@- zW?5y%?gL<*MzAD|JkKZyDbN5>1F@yHdIaqY8or9gWXm;JPg2Hysc4~<4qc`?;WMz= zrJSNcKLH?##_xL%>QtnyK!}qhoVq<+G?7yU6iXd;TxbjeH!LsJ5mz-|Qac+yDl;Z| zBiK^vWIwWNvBh>@clTgFE-0vMFi!a;XuuZ5jBY-dtSL{y8i4&O^loq9+ zVK+I8ln4l4DZwD!G6}-!)EJ!#qI*KiUzQoS+T#T*xldF zeb~Eu`?3AH#zuzNsKzggjr7+ctsSA7iGdc`s2laU`X(wLX^QKy7`vysJsQa|6%){_ z2ANFyH-t@H5e9QY>R}`_&{oyp6#z`*bLk=)xB)X>xquINgb<6J*c$;R#oCND%*Zc7 z0?PTHLFk>W>yH}lD6k};hgb&0dXob1tBl1Trf{Iq8$sD?%KK7+6z>nSWeADEd4^f& znt6}c#{pIFts+D>c;|&lHMGfnQ$yGs6XFxyp8QsDF4r4<9=xZaP3{9Mkyy(+?C;bB z(vw1_jK^KYso*zmod*sGBCOOlXc)769aGAXkEC{PXrCcXaFr{P%n3q>$lS&Ajr&vz z=$8=m753QQCPMYiU@3E)}gn_hbtr)3K& zYKgDdgI$ZV&dzj+T0d|#kJ%chuwPeDnK!6N&apJLqUWfItYk#fhn%933`pveY&{+q zULHfe9z3>+1V*)&Yo#!sASw{@|m`}q`HAo zzPYuTt=)#_E?`p;o2lKdA1!Ia=B2!yAK~X8g6QcVkCnhAOrG%s<48`C$BsB^* z5%Wh#!03S?oDjvv@uJCSXZ^0)NRm!k#3;;gqXuS z+21@)Avv|^bfHKb&BDi+{mIfO+z?XPPtjhYxE}dd-L1@UX0mCbLJ79u01xMBVkhjDi89|4Z^Z5 zCbDpYkNJn85N8ctqaIvv;2J}D|7cDsTE=y}wskh`-ibRe*#fTen_Ylr3fN=hx>$zY z2D6_{Eqi^ghvj0VXJd29Tu$k^D~m|n`5`uqCVAw+Qe-_7l6xZLu&fiV)oUj0C9vLL z$Qv2uMV~m|E!Qxl@Xa7xDT*H3nWV{7n8z{IU~`_%i&0$S$8E8cOH*q1lBs`U*~^2G z@hg%w7a`hql;>CBw~SfRxKLU`VloD|F@4jIY2AO4O^DrXYEA$jZI{Ps*T>RF>W}nWa^rZtNQ70kyQq=>Ab$fr^bwi0R7)@K`hQW)^e8Hk}bTbHIeBxlxWv zt2!IuJl*b8(J+uy>*>xgs%z|@F1`X2ahxsnC$=_5<<47%UFPDT5o0y8Z)AK_%0Q^c zVO?5tx3S!AT_(`A-C9myn-+C5*bU?UTB+_@6REDwK()*~PKP{ZFcHqP^_6X05`vLu z&($I;(3;?KO=t1YoqS4dunKf4;dqBN^h-YvVYYb&>b*KHVr}_WqZRgTOL2}%NOY41 z9+hp5X;5q_1gu*e+u=wJ#X2?yI>n#mm+}uCTGbE_qq%KZ@LWd6#5{%x9y>f-&1{;? zmp6Qvv-5IfgoCZfACp&GRyeKYk!6cN$Z<4lrq2I(`0#*iEIICHqgrxLF3mN>wh^4h zfnYZUB9f8c5_OUs<3BI+L*Bn2dAIg-Zi?ojREG9oIFd3KK=7{4F0(1jv&(B0+!Diz z^JMAG@0x3i@E<=DhiO7J_3oM?v-Vg=HpHplwzBKdgc>r_seJ>UomVd82nt9l6qQt- z9S(GPWo*d>>NBQ1c*fPp{2-VGcbBW_r&ZjvK94mXbJoSww$KwzZ423u>X$P>eteA=;e_*6tpwa;2$V7$cDF(Z#g93op__M)65< zu>)puYKCK#5KDwOe3;4Z@tBb6aw13eE@(+^RvD-jSzEg~xz_kee6s_XB(1M$*ypCHdUgzB+)i%d?v#KR{CDAo>Uw*iSq2wvix z1cF*+F5X}o(&Qt{>=D=kHZie>P~BT1Im8-_Qeb8DVdwk@zV+_A(bUyKN_Y3zLG5Bw z`SrHG2d+?)Q{|`D`o3_Vt$Aac+q#LR$8ZVVZRv#H0Ck;#^%3CmQ^PJz!SjJwgblau zOO+F0fshMam{8MVs3fPp+_7;BdGQq|Yq5`wUk$`V43C_`-k+*NY2da!D+!BO%GSD5 zr$8IK1-mK>`=7A{2MOW5fl*eD?5}8edAThIoLFZ8k<9BA#%-XO`cvCL(Uq->i{$PC zvJx#DGL{c z4HzTjAwhLrgc*#k&u~;Xm=s@33Lk9Bs#H_{HK|#xaZ|Oq)s)kyJ+FPK=I_?0)?N5R z`nh&9sv|8{7+%PJi*45#baywQCg&fVLe0|c-4E)!eH~oQj`IZ6$zXUQqa8eMzskW6 z6?g0?F+UG9%NYMdsH6X_i)SNv7<;|1n#(?HLO1jw8 z{yd*Yh-nbZ(qT+_=zbdu4I}gPo~yVf6GtZwQr0t}hqY->=@l4c?p?rK35;mT>0PM; zf=SBrcn3EeSYxu3p;1YZ&fNy4{&fGgkw&gObB`g5oRfeI=6ry8(HR!Wt+Tzzf#tHv z-P>+kxSMuDesNgaed5ghLyf*DKQZ`So{w{VbX15(Ggw0)R5&C83d0#MOKE9O+h0gd zDn2%8wV`Q)7Oi1Yks7B<3-`Wg#Dks9e(m+qqpoVQym@&RC&apRa{uVMrX5`0+(_rG zWsyw>B}UOKpS4;!_(S!c58blK~>Y%?lO_}++5A`?m>NzZuMi2DZ zb7!`$wQA#1UtAMc8UKXBp;;*yP2tG3GtWN^4!}?Cn`3&XeS>C}!55bo38(?4xm`tm zKCyJw6$}SK4!eq+(Y0KrIE6Zc$IOc_%rUt2C2`$|%w>CUD+H_i@l}@>&$~o~o1M(~ z6o|zjU`Ag;w|I~$j06$s)Hjh!sd_5?Qw}SY&Ppj{ZKnD2Hki?g%?&wjrlnws24zrZ zfs}woMWvs6Mf4jjL6gT3>W^fED#Fo8RjQE|E?wRRsC8~^48#lWVc+hP_zNxTS z(<|)X*69|rq0Ngmky}?6i%m?15lamAlVjr(d9O-TaG#92m=zD*g);+IWGwRq2lkN% z{_!eH$||wRw|fTR#Sj-99j#dF*Hkm>3_3_LuJc~x9}Op2^? zpsh}u%9dtRyK*E|b917>8m-B-_dk9ssOKuMWzH5Afo^9m%2?(vl*dLP&mMthpxH5b zB3K4El@#atAXOB4%p8-W+~#RvSu&zA-!A8Sxc(qtYFQV>*vHyf;~pSmG?g{P3`!Sx zLz+JWJIQQW_nOE#c+X>6&J`K1_2I=lu#a_qHCvdmwjqy>b!vz2BTkzjlRO_$xf=6r z*0<-U)4GWpd83@bcU68wEVo&ymWC`V*mNVUp;5^R{J>Z74WE71@?1btJEO?V>OjS^0)RG1aPgTuzBz>$&yV zt)oEhMtk(#$j;4zaDobK6YPG1s+qMLCCK`*JSN&WSW9=LD$p9Cn5VD;&0|>dv{m^) ztRqLI4N}ig&;^^;QcbnlmDV8hc$RxwJWu42m^oNP?{PgQXCs)bsi&!(7n0eO$Mt>8 zz`ji&2NdZ?K}rd7Q+BZ40PQoQ*%j*-IkUpg5vH}+H_VTbn{wjRM4W4a%2X0o)M(8l z1=~^+5^&oDs==jYnR6XpF|12NJekIO&B>e+kmCX89V?vdl@k{HI#A!m5aN$sF07Pv z?kAKpQj~u3(6SO4E=34MkRG|enkxY|udNWwmXsV)>kXG2Y8`FFFQzQK&nmJSgIU{Y zO#@LLJfNzO6T^xoUyw#;+C2ucb$4HHq_ zm(%sAdTI770s-EwC_iHmotDVJVm|G5TiT!G?F@fmwNXmL@D--D*svaH%TJmVNKV}i za>9Kjo@=o3p-v5WKpd+Nv^L6Dn`yZ|CBGvaJ0W4VxtnEV6h|HlcPbQ=`yL^j>&HyL zIcd&I04)y+Azy5ne4-A@-4~t{60xyeT06H-^Xy|r8>rQCFy;cy?VxJ!CNvCe*lnwp z-yDga*J3TcMKYIN#! zk^~-iE4YoXGyfS$Ql6PBdSN^>;%Z!WTL|ow$RRP&5jFz85*$Th6~pw#rwuY4xQnJ= zYJXeG;N;X;Go)`~s_96Hjv8b|k4{cZNijpQnbi6@t&a_RMI%#^Vq*H*a7$|c)D&An zT6}}}K5;Q%j_Cd|(E}q>v7DbE!yCcOVsex%K5V_Nfo5_b?GsaMND{XJB2$s6*aL%P&6k*)5>Rt^t1OBw5ig2Mz)SkZrKQl; zKIT0VqT`cnxKkGV+E1nH^vZW9$6%EpsxP*(C&b3}vn3|QBsd>1YevOqp>45oXmJ|6 zRH0@QD4&&;ez*=a0Y|xLCj?QkNCfVPmiHQ3*;fy+)KO?2Sj_^p@uG#ki9?ZvxM4Aa zQf$~^962}1}%!4Q5v7s4kMOL#OR&5HFH%q|`47DXAqcO==As8fEm$e<0 znusz=rsbA98_En;qYY+RMJa9pW-X=I`p2aI^tf)bWiAj5JBHFsXNvqK z4x7PQ%swMxk`rY}Ld;OJQe{;p$KZ;Xlo;uTX;g4K(<39GEutd1ha6dm!(=Lgas7<- zD1A)GY7`j*4Wif)1NmrY#%%FXD2Lfp6a(@HnOQ^|V&l6^alu8zG%z-qECxxjZcR62 z8MdaoNi%cfp^efv)*}x3Q3CiSE+rC`!OoO4$SE4k6cGr%0zVAG22dNXO5-Un)TEWX zEioFroEkX<9UyUlt$);@*vP(+BuEP*CH|TelbmGh8;7lRQILYsskXk>1Gpz6E+J}= zEd_lhCLwZ|atxP(wsBlaG#)d75+OB_d>kE>WE&EPy5vik9*Th81W!WWXrw_Lj#tRH zBAe}{Tuec`fk);0aNgYFS?te8ihUr;neL!yv*|p3Rt08ZJRelQAVZ!%P_!YfzA*`j z@f3sYq>XZys|`eJN?H=GWQBF=gg$0#TH@GjIkFcI-PmxLAQh#NWSA*olpK`e#`-jv zZi-{m2vW^%PE#_BEK24P(h+XIrr zz~@8aQqX_pbS8RP8dU?L8I|$Pk6l_H#0Q`DjTy#sJWA(;I>kLM%1e9lPPbHf8elLO z$a;y7iHFd$CC0{rK$a^<5Qi1PSeR(oq@(*Jy81oPj1XwWz_ur>S8-Sb%Xy|!EYE+z z20yzxT9+%8mO_l&II{}3dWaf5&n`IQNfn=+iPzhh$wX2CWznd3%FFFw3{|RernPNn zL|Hi0O<#QNxQ!M?bM6eY^%)MWf|Z*Z7fpr1)-M6#OzI9e=%akeF;ea71MMOvs;>%# zz?I*3*CS{_^&`?600ASte2DxuG&wF6Dufg%vVrk&r8*VL?J|8s`$b2GghhnJHmhE> zW1RAt=asA&=2C44-kLTn1cs7A2gUVK$CQ#oqu{hvsub${my#TvK8B3OyHfbAsT7Tm zzcW4@89s9V7|smfOB0VpDVr-m3QP!c?r%$}1U1<@Qk85)^$0>EL=Q|&j*5;!Fw0^J zPdx77k3|IcUqbsQ#>a$m3MaI2VssiieoAPcm{dq|>YF7#BU(?TkBBn|DIN)@kCHO{_hO(qehl&b+Y;-~@D>@dJZ$o!rYbj?4mw&5O zL5P$#U|KjC#$8=-(!L(!bE8d&Im-wi_amp^G#%qI&xk7%<$KIL%1Fs+`1;Dk@Wn=m zsR%nA95*lpc>}NO0d`pUu$+tH!GTX^+_1>RBnHML42i?ZJIM(0iN0phso_&~M;Ho^ zxRLTHmp3{wnLnC|(m)M7sKe-x{^-9kJkW=gCWH-*ic6Ko_bfLvlP1f?$=U>j%30fl z5VJqPFSm(A@>%DG5x7|>SjB-0g+Nyc!GAt2WfC?@!AYYQ2_b4?nK7lh0tZA`Tt5hE z>v?B24w2m@DYZX^j;we@Hhm%ZRD%yfRH%ET5T1WTOla}(kc1d>P;ta(CMKD0g}qud zQ#=&BVJ>g-Q0{)=LxbRml0T5?LS*qxZ(O2Dp`pToqe7^2ndQjHczm!pOko9>KVZth z^l(?1d``aB@@05uf|)w*Q5b}s39`9jnFKF-v`C1lIhjAkhor>C_YLVA6Fmsc2?j-Q z?4Z<;7*tzGd`xQpL~>JXQV6Cf*m>Z>p-+_}6p}$H;D$j^Aw$%f8GEE%CRsUas)|g4)5TS5?zk!tict+ zI4lA28q&Ijm}5!z01ipq{nj)<20@W&sd0l+m}8Z`(qYYC+lfiA+v~D(=&C$@X*>s!GZMtK64x7!cXSW+UwzWWDF2k{1hUE4$a&-BO zAr7O!#3gVP%HnuE7wB_(R^30Fqd^`%nC}riujMuhXYYa_yQ3R^(ZAClb*!c1fL+Bs zXwPostMw7$I0pLj;pz4qdbXU7TlCoNdhuLF!Kp9cks|7efOM%l3g<(FX(G2{G#p4m zPJVv5lxZ z3L09!$&9bJEo2nv5P~R$3OkO2SOT)N7P=+#nrV&d6795F7=a z6`m^yvFwidAo>`4kYgVm&y+W`U)nL9QKEvOjlM?b7*WyCV96CPn;~lVMYNeH$Jcyb zUm}7H|DaaRNK{Dv^T8=Sv7=!(%lGJ}W8N{w1GHN>(GWmj5u^ek< zv{xPLyCZaL);frkx2|Ic;{>Q?c$2=8#T=Jq+|qBLg7h-=96!*j2h}&Ur6&<$JZ5Mw zRF$tO-@wr7kK?Zu8XDT6OLSFiWN1gEE4Z;E3+lwKhc+?t?pz6%qYmq6v}o#>#2*|B ziAMfSH#Mf9@IiF)Y5U2k?oFuhvTP(qLoqPm(hIeEz#Oh zOtwWOp#HsRV|P48*AA_%UEis-vpY7@dz{`A^xmO&x(@FQ9p2z7@O}ud<1$=!-M_t2 z?96b4mF!^nwIM4y+UswNj*j=M!R_SP&*(cWIvItouq&$m?8sIfzLlc0;}{)fyEr}q zwL5CpfUiSWy=XVXfAd*cl0^uz8|%bJCHUH7qPycDL+p0HEWd@p;iz7dKjf?DC{v5x z!9+dp<3?bi6LjT&!ZAk%73$&G28SzeN9ikJHKhKs=xO*rdJ94MpEUf}ZpX9e(0VV& z1x71iaR{pRW2R<@1jWB0JBbH&5XXH%TvwU6dOk5Ul~`VeA4GRFY|+Jt6B3CnP&J0_ zw-Ll0Da7T+i0`~ZT!wZuZ1$1FEHeFm!E~RLsm*_#?!(f(6}``}^+abeY+Y$HZOWBg58xGO;r_Lh{MpVhHcX+;`V05o!yBiKP8@8LCh}Svf@p;Z#_wzx|^6Ij@T`f*bEGd zkg>#|Cx~CYN^CWNXk3(TS%(Ym(0xOeec=YWBV>8couvB66jvq zl6ZY9aasrB#Sz3l9f@(WPEJbxiInf^k&EG@77}qcD{%DJ#KzJ+Rla3+WroDbR*RlT z_w)rsy(_U=8u4j#IOIn@JKdjdhjb5YO7~l`t}0ceJGeHn+-%~;Cd9pxhp)->i^;Nl zn#}MO6^Ne~B*wi&JX)W)LAGZ1vvjX5K(ydv9Izd`ps z$OOX{Uz|8uzW3N*y6Z_!sP_%sftQJgqKTvB8^a3GeXuR@)9b{jiNxpk5_?Oo3z6w` zl`S<)N`|Q)^4DcUh>cz$o-9mk5<~p)4l(|oM0`-7#L1d(97gx#+r%3(SC6!zJ8>iN zTu-9kEaI4th;!BvyUH575l{C3*}K2IN_Uh@Gqoz+mtu*p$sCT8H4r6RaF^us)sjPc zzsxwNWJ|rXkM6iy#9#28Fl@D}6R+eZ4y;Q&7E0VG`R(`&x)-%0u9AEe_%+=-4-%i1 zTy#nH$C2w9GFj$o{|9t8?m^5c+ws{wbT2$X9Gj20PS(Q`ne&V17;(3h4JCdnWdhYBNNFhto|3(0pR9*SnZt|i`RjT4>;_rewiOH+BYWk_ z33NAmow!Z5=@X~vF8Mw&tKhi=W`Su%?=q@BVv*1p; zdn_gnm0aCO)=6Gj=Mk3}ettahGnt=dW9iQFF)==Y*z!fnPuh*$a(PsutjD|=ae*%!{vWB7W>&n0DT8+?~LnP0{FJj16*>*Q&Ev;R~kZiMwQ)NATD{J7{CJZ?(d2jdux_3_} zZjfJm5li`l=2$>9CJ{G3OFWQ| zxPCdYMGK-K9Y2ol)|eg!ymTrJ?Ru|Q*ZzyRQgH_1Csl?0#qJ-dw@F-mmg ziw}wkEX`42jDhcr$gvi_vm&`Be3wOY*7Lg}8v^~_6IuD&`{K!wARmYin93DVrz3v5 zF20%r@}XFH3*?4a0b+b4Mt=fwQzWee`B=323cuYJrvgCkh|M=ZJ{6lljL$?zCic1L zvkBy`I17e08KuWm#Co>HGr&<|e+!V&VlBxSaTr|eHV7|1yB(h-pHBJ?eg2_i3Q z&2OTJWYbL&ZOej87CBK7e$R=|TY*dwZ@vLCRh)PhWSS`68DzR>J{n|(DBJ^Nrbyij zGD|Fmpz@n7E`A6yN4#GcWUe^T6=a_H208VcFXpnI7Kq_DK^BVWJs^w3`=dY>ixXie z%W{#s7sz_yVB78x8XCgbBla!y4-puWCl4^Z+csd$wH1L4qGkaba+1bq_i+bc`z|Gb9TM1A zI)2d>7~6xdd3x4Uz-M+Y296ao*b&BwVa(%1;XfZ_hB$T>WTu!f4rHFl@;u0VabY*e zGLgR%$Z~O{3dniUgwI_NuQdkwP`tkqjQKN3~*4g1n_&_#EV%7CRQ?eJwX?&-g%F zbqM69R&N@}J#GATke{_LYlDo}Z+`?bOaE;>$O64+PmpDLox31w^yY;?UeV{FQv7!4 zVWIHt)YHJ<#v#4z%OL0V7heOppzkKXUDb24C*IVb7zXmOerhVnDEp_Zr5W~S=Rs!L zYc>U0ZBKb0X>PFJB5Q57zXi^aP56_2Xh*nyws$T7@^AZA^giPkdmp~#S9=7%CBNCf ziv}5OJdM6+j4>L|0hwmxL7y_F8vzYLRv1yuK{goM$ak+Abt{2vH?S4YW*jz}yb5yE zxIiX7Wo&%idUdwPry$^wZdHMgF6#}ZQw{a z#wtlHQVW=rzZ7ur_Tj+f-ArYacrh=?XtBE!$Qbbn_#X_liiH>_dXtmJi&B*S6T~B5 zf=m>jb_ba(ng?31DcFW>Rr23#l~TWK0+t=d$II=Q2@DFJ2P}VZF0evNX0YPFSZyJ@ z?f@%AwFgFQ9S^M1V+OG5i_ffz`g$@E6f52Qd=}um1I)?ddwgK&IG(XDpTj(W# zElV(;txg{YcIeIu?#x*~qg#o1;1f4b0H3@>Db}x=v;4*Q?qWaV8CmTGPuGQ`Xc@l0 z*tNaD;!XNnzf~wjnO89v(+r-@CJk9cmJ8i+5g2}nVzTPg>A)H(tozzM6M^;WGFJ_P zw*ed1W9>B!sRC?Xpf|AH3v8E;k+*?ey0dY*&p8L|aW59wYfuAV)a!2m`#w$45x@E# zFrh2+m)NjAaJooDVIVT%nXj4R<#iy-#BXCkUJ&cpjBCWV13=b_(yXj?VlSC$y?8bl zWP@m35oD7X#@{xJV(ma)6-#D=ye1ZJ2H7D7goEr9^%!%Hc!w3aSG@K%$VIWY4aoaq z1Z(1&h)w{xE^K7d55?5gAfJeXUxC~f?fgORiZx{Sdt&0JAYX`GH9)=+zwkv{wQrsP zc~vV!@|xD3wX#jScNt{6)^G{PE^RjD$Zky|SM1kT_X0Vf-C)@dYQN0@Ii#KDl1Q1ud}&S(5GUzn_^amXlb#eK%m>!u{57+Ai`$*1~&K zI%r0HAo;Ov>W_+BZF1`oGcNxfEYd)=^7EC zWr0;9-vd^SVppoM9*k?$Jb@aL*=*mqCLA3KuLX9DV2YiJ3bjfv-Cw^?7%_5xK9{9AoN|}z((Y(cOPjK(TUo?rX46dTQ*>`wH?iF+i_+$VAtI*0iTE}0_?kGJ+R*>X1f1i_L{gEOl?rf zWx%BAe1A&JcI!?4pSFR&z))tcaQQL7!0wfSrQRc}mt7kREZ-#+7`zg>GeSot0mF+@ zU{&4AUu!Nc1FZAKIbi)T@<+pp6gN#)uoapwBHy&)9I(;4O-o=q$1A{&g+Bv!iDa7H zpJvRS?cWFXp2xP1PCX6mS0e>Dpxzo_{J;3dgaTgxlj=?YCRe`zOzYVPIP4_O{YGC#tfw-x1m+kn`ea=JARMr0=?1p@P_( zw%LlkQv^)H54%KzJ0QD7?`j}>MD39vd&NifK=z3W?||$VSDptsAdXB0IVcX091_(k zfE*URST9FJIDJROJ8bzk#EjY?$HdNFAa9DEO!~N3Os+d4#v%t$;LG#_nW0Y{g}}MG zeG7bx^-=IifpABheGIO9;(SSvQQBx`YpRx~BghdHmW4^r1 zvJ_ys+mvMGe`AAJ?8jyaImf;fI{GDG*oFvTL}^NpsvQ}>`Xcgi%>pxlwO?2PtXqQR zufMPoutCHKV55P(fi0iR18hC<46tnzy4!zG>DI9{`%mY6uL8T)It%Q+Y83E^v6q28 zHx2^!s>rtJU5M<{=Qq0hHY*N{-SH)`eS5WLs}cR*0FEq}2z=%TzHyY8d=zAiIL3U96Q$S~6T~z&>qIfF0LWzVLm`kU zBF|GG)5I~BeumKdfy@$hW`oQZOITG4#VFSEVlgN$$Wl?L49GH3aV*FR(KZO=1(BVF zeo^$Q4)T(i-yUSGc!g0mh!4+$Y!qpH!)CFM!e@)Zi=PhAh*PO z!63Iq$w-h-#boy8&qc3hAooP4B_Lmll4R1a#gm;uz7;k3zVF0r{`P}t{{_g;;!+IA zFQP6*%WvY#YapYwcW;1<)hcuV8L!nn2{K6ws{`_!wk0>nRIS}2km=e~zHg@1XgA1g z?Nl<4Z)#1*6DPC}S>)OA_3^%lKS3y43F7OSXXm2tTceIv6Kt9s~ z7J}T>E|T58(DJdEUuhvM<~LgHn;`$v_Dlr%Uc1@=)ZF(D$*Y${gAUpL=bwPIPHH(4l)9AR}y?}A*{cPs_Dp?6&Ya#J5V1LT$-KO5w>e(DU!r~051 zAfM~E$Qt+bBdo};_3tNue5?P9T=2c#=nq@W9`S; zeaG9w_kv8cfAkW_WP5=YAXDvY*!(l>b=ZEh?9KVyT>D2Kf-JE2%?+~5o{$8x(!Pad zc)>o55_h$|Q!9`)_Kkf(*4vk{KWwls9|p3?UWN~BwpXtQven-2I>>AGpR0pxw?BFZ zWQToNILI#hrjJ1O*neSD?Xw531vy~?H4I7?%8|33G$^~ZvyhQ{VKcYw|3h% zAm7<9MS}cbpEwKTCwua6kbm3fuLk+mUWvX@#*oG!V~m~TtntQ2th$NDg?k{AjrZRI znPO~v8DyHVX*0+Sqv`>WS;mo4AajfWHpe_8;vC2VqwNlmMaHiqL6#V~hk`tBJQ@VD z+<1Ek$V#IJpIc?@V_m;wyv&$ujb_trpwLu`-$fttEA!dc@K(rI8}3G5uwc!~Y=^r= zZ#GSvyQ|=Cmy3MVY3fb5pQzUi?q1qixO*?Z40qrBcj1ovm0ctL>*vhWjiTI5WE5M& zK3rTWY?jJoOwmr1LHJbd2z&E1?NA?(>00!QATzX%tmTDJ~E2}~~N~V~viQv=W(Hqm@AQ`d!f+=n0uCY=z!p zGZ#);4=h$M8Cd)XF|Y*Nuf!H+w)E9wz_KHD1Iu+gX_Yo$*%R;=-$OnwIfWT7Q~DGz zXnIXxaM}@ISiN?@s+X$*Yush))%>6%u+}8@%i6P}t+ay0Rro_LZvs||y#NfYLfKIH z*jiv%1GZ7bl#5nu|2NLTAGqoaFetVnu<~~DLba(BjSVKp1KSjhwPKe{4TZl{eX>{S z=9FS(Rx$0eBiOmC-0BRhx{>dxwvE!T`gbfvjk~V{YaV86*I)4zuxXQtz$aJC1;)iq z1rEO26!>(Fa=-;5ei_Irp`r4j?If|gy)JIUCl%x76LP}QvHu}pw;HQ~J=e2OJo)Vs zVAQR;R=fiFWE~!5eMW3L4Xjg%joT`g+|xe~>o9dKW&eo&$cf}?ODT6#!}A{T$4^CK zQ3poAd5W!~``K5EjRnWb{1nUz~I#(z}j;sTfdcC{Q>+zIZ}b;tM36;xHb$J ztoH>)Wfu-A5v3}F8 zbb;TV8(l!=DR|^FVAU!GSufSDR|Hls&f2UojCImDPa3dAqc4H&b1_brZH<6k^E?ae z){QOI{e$UNTD!yovhhJNg}i%IY$a117b_C1-wSo$i-5xUPXdc9T?`EPYz?q{HMVty zfr-G1<8lFmv$O(+T2sW7@2pmrT-Gb;CNMJm1hDt+Bw*iS z=zB)oo#%iFa)_2FM`%fMfHr((ZG?}!Qx^DiQB=E3%YVcxa1`D+&hn2Fn|q^qpA-LP zZBG%U=7TH}HR)R{E_Vi5B0BCvlwHE!1HRp&I(mytt6=`Ba1?gdP06YS;4huGJFv|8 zCxK;G3E*J?6?)NS*q{bv*=u)(UQ90lPVAz7n!0_yl zmqtXBDZnZzvw&5bke90!qqM1>gDKSb;6-4qNq2#@lg|L_eBTLJx7BOFdjDn%*6&De zeJp7RutDbuz=oG7zZ#`o0XCU27ufU=r9rcgnUm%@C_h?Ur@U>s@oQkKYkYg_qI-dD zDwF`Wz3~aK{l6*zJ0$o6JAP0c*r{(%VCU+kfnDY|2X_6gHL#m~6R>-0*39EYx&eE< zRuI_Jhz36SIZNH^S`;ucaSX6`O_n7pJLOrQYD_2EkM-GiTwP#nhdsc4k8A|?@A3vP z?sK%0F<|yrz=5$vfrADzwfLN@)r79#VIy%g>wj<>^OpSHVPHx@@Vb$Dya6z+E$eE? zdDg?wk&nJf0NG3JR>a@KtDAuD`=__i>}LeU@;WRZ9+3}ms; z!N8oKdLQI@(Vv}YnP|v*SuVPg-ByS@FMzBRU-7jsh=LVCR*9NS^F@)w`duwn@$D~( zo2;?5Vlbw%mQ z@AA2mqRlrTZ;8~~Aa9HLUx1tvhv_>lO0rSUh?IDcv*O!XAm_wWkj5C(cij(iL8RUV z!O*@0$R$yWk6#wq$rJC2rimc$iN`3k-xnoWXCH{q*hW{x{?j1WL|r!3buo1?$cJKk zSCAXx+CY$x#9p%FP4PXY#mB;6c5jIRY|T$Z%O^l?i{os#Peq>PAfE}riu_z;4FI_- z1}+4-Cmv_Ld?8Mb0r^r4p9}Jps5~F!YtgDX$TuPnEAn6B5jOvKB7vFsUesdq{~+qJ z>_3X(oj`sPO%{XvEOtE&@^3M96v!_E2mhdfi|1B=jM9EO2{Kw+I}v1zrt!J4TKr~^ zaa#S)K*noJp9GnpeJ~VcqV`6AkV)F}1wkfj{Z@iZ(YCYBrfTz8lxbR>Dj?IfrOe9= z&CXP2YA+4|nWYVy05V$}zXfED=062wu2z$;ov&pjpDoZvd0=)-XN>B2JBTY zX#*&6*J$=!AZxW@?6>PQzlI>|waUdoUe?}y17xEX#e8nk_EVs3)&gdMyrLDN_}ro` z&j+$qJ4h~nReL5k$ZJ}!BOu$fk68t;Ykn0$c4!kzgY48QwgcIv?aB+XTbq&qvPa9d z8)UCGox*CLwzw|He(jqmkOSKDthz&5GGBC9+m{G(L>n<4&z>}&ean3IZS&bv=ChOaA%hY7IsGzQ zWQs1IovQP_n4QTAS;o@)&C=!TXY2Cyb9DLoxw?G)F8#-M5No%d8V0h*Ok%J86zak6 zi22-6^SL+7=Z=}roz#P`;(@pHYe^t)o6nsxpSxf_chP+AlKI?a^SKZ7E&QNd(W8!n zTs5D&CZCgey=6Z8iTUhp^VvJ*vv>7kqw&x^{g(nDUzpE+X}6%TW)u-*;d&5RRvjT?=lwT z1^bD6Agk)rvL0)#W#B;`G zhu=Jqt&V9FX4@Q%{6UU6vIc{kcI2iUx#8%|oPFvj{V~Wlju$@!nULk<*FdIb8BB(m zmc@@!Y*Ci*Ss*`W`D`!9zq4FNA2EK(GJOZguUQVJg8Y_cEMtz!`r8X2qqBZE17u9r zLWe-cW^K>U!MLo?Edv>!)fNddA#2ytAQQ7*MV%Rov-M_QU6Sp>IFO~;c1#0#K3idy zXj!&_lzz*zg}-gGt5Kj0x`%mwN_O7BkNMRZCl-|jnJ7+O2YF6>lW0W`40{FvrM`Iz zSa$3kV1;o@ft4$50ah8wJXQ|~0oF>(1FV~ynP{+{*=*c>Hn7>PyTF!%a{=4#sR!)R z?P*|Cf2Q2`l|sP&WmxY6Z!zVBPkI3duci=AEp`AnbTOM_M9_HP)BQ&PM~jZk=QzrA}lQdF`0O+QOEH_B81Iu1twvm9r$ zWgQ<1%vO-acw`HU@#qIZ!0b_DfH@AJ>l!&PG9*_ZQ^>t=EiiA-T4uU_6^f&#{VEn9 zhPFgz{VE3{MZYS)ECyCR4YBT5GagmtSL+jSr%`X*B;aFB$drw2`GHM-WDc5-##h0w zZMd5CHcn;hh zcd_gD&dNAZzvYIzPY1?{ZU*%0mzCeX{y(*XJFXU6Xn+mO>=$2??!gD}HSkL-!<0s@W$i`EzfELNzQ6{Bd^ z#_*R8#}h`G-5Y>qKSvE4VL|9FW}Anx-sQ)=ywjrmbVVZ;xz0p?QAw4jKyi#(bwo4gTt?xAB+u2 zcQCe+buczm9gMB)eK0mm9gGcE2V*1D!PqL!gRxaJJQ$1fu=;eAs6cgfFt$b}2V-kG z560F~2V-kzb}+Wi{SU_0<-yo`*1=fS3>hAbt*;KoKBf-F;xw!}7>nbu^&y^dFt(AQ z4#qZi9*k|G4#qb1IvCq5!-KKS)xp>n*1=dSUwTkWy-+K!gR!k$2V>iK9*o5aSLP)+7 zTA=7(GcDk(@LWNtqrYrgpy)$rT0m9!1DF=DiuET<3l#O47WgZs1yox-Jf;P#hWtI# z0v3n3n->Uk}LM{nf zSV_<#8A(vPlAs>OS*$F3O3=SxoJG%Ag8oJ0EY1plFbVoF8fQ@z{s0oxXPm{UgZ{I| zSyWp+JQDP;8)wmWJmM}vv!;`v*^~rz>Yz^ZR*xtN`l#-oT}jX!dS1)zEkScC398~A zwCD1cpt<#Id0Y}SuacnZiGXyeD+%iFl%V;%C1`$2f)?9W+qSZ)Mq2g6f_+XbGndT2kqtrQCGT($qn-C<$7|V-&A@>Y!!S zD88J>C_cy<#g|v3cxQ!sO3(_{C>}$1HHyd3U5(;H(v9MErw&>v-6%fP8pT&uqxdlI zQGB=>#Yd=7JZxE+=B=taNAcA%9K~bsZjRz%y~;FiRa1@PRfSs;w3c%eUt5jh>tr^H zuWOCstzvoWp!GP4_p?Uvsu|2tyzZ%k{^v&VFhA#M-pb0?!)4w|RhIWCUbWTVFG2tK zC|>2w9K~A=`FlF3#UUO#=)oNB64W;j`mh-Y^v#2o$Jjy{2=vW^S_T6DnR(FmP90Rv zgTm`R4+?L(dC(5ZKww8@Ag}`r1a`6v1gg14OM-UJ#6Vyd%RpdPhr5BmZhFz~nHmUu zJQD+fUJ_K#+(4kp+XK&o=E7>9YbD7!iibf})5NMn>7ZHEC_bwi#b;AG=p(xSqe=(O zuIIJf-a2RwrGu)t2kkk%b_6j)e`~fQdc@C#_rZA9@?nqJZL^k2hH!P zgBDOaXhBN{E##?#7Ix{NMU)O2kdY2rROz6_oH}T6J-?M@PaRbA)IkHCIw&lwnkH7E zj5_B*OHl_cov{w8{WTrbS>X?+gK7_<4yr2r0d!ESSQ+Y|^)u8#HBTM%F}0F}1tinN zDwdDbN)pzOtd%6JA6X_=n>bgJnyQtgW?m~v%`;p{a_XRJCCRCSK1?e~O3(AwK~-D* z{W|Dle|RNH<;|3!Rzv=t4r+0ThYsrR?=C@oD@jfr)VGqPM)B#5RQpzv9OfwAx00lE z&_89Q`v25Q(iQBHbLpUd>E=OwI;h_EZ_`1&=0P7o2mOolpnsDN`Y_IeD!t|bbkO_F zgJ!IQdd-9W=X6l4N|^JYf2$7qcaP$gp65M^S8ZkKpnu~i-b)9yXFiHod3)e_&>suC zOHiK<>eE5FrD4?lFG}(0pgtY63i;$OUX=2GN(UW-(-1Bl)VGr4l%NmERa3r|B;QI> zMXsfJUN!a4tR(q%)c^UbrnIVo?h@2Dig!xTKfIFU+z(pRxsp^Yla-|6e|{y&xgS)m z9hy7pi+ipl{n0Z?nT+E9?3twE&XuHx=S-3s8Cs+Gzj7wYDwg+3(tXY(757|8`p@lV za*pEFWqlTVJY2h(6wm(WR+7Bd;_q`=pURs#inki__g0cD4)It?YEjBvg8D}BP6_H; zN%E~E;k5hxuRHavB>7g7io2->Xe|qQM{6%zWtz(pmnVs z^~%7DZ$GGSE#7XYb-Uy+p9Gy;5Z{+lKHE&sly{wrhoL*41oh2>TBkZ;Xk-RV+^JKY zFpBqwtlO#2jrU5@|Eb+f{jjggrGxrL@lGAoH;Pvh)HjOvjpBWy_)JIfg=@G=P~UDQ zrv&xwX3AWG`gSu}JL-MAneMxiq;?E>>!51q+24OI{=cxBX*Fc4O9%ByP@e=f*W&MM zquwV$eG>GKoJsosLW1tB>n=fkqj;wTeMm;}&K>n?PRZO+{}(MRXII9sJZ&=tS@uEy z=sf7dXkj^&+1LlWI2hD60|1jvFDsK<0gEnpIlc45qrUIT8mLHN)yibBY91_%bSEui;&Wv}| z?{DEQL7g`0op*KmZkp5E-v6e#0A-`z!?K9FOe+TWjN2Vsfcg#LWgoP-(?&h6=rnEA z!&tr3Mtw=zsLw=#df5m4qn1T7xoPgtS{8BH2Yq-fi>L~J0Lvno*ay9jWf3p?p#M3` zB2F9iY991|N(WVK_4m(%{?)bk2e>CGe`|LM>N}I<9L4+2B&pp@zB5Ugt|a-+#ou=~ z)BhLqpwF~(m!Q6RP^Sd-jpCIA_3fzl?Wp(dsLymqefCa13F?~%wRSV%D5tvZ_`dr= zUAvhco>9D7op^vzd?xqB-)9u>wVUZbH;VUJSU!lOKz6&`FUxN@mu`1duL;!i{nb(Y z1MFs+)fEzS+1r?=vkBeiK8lz3u;j8^YmkOt@wNLA7bGkaN=>cJt|@MPav1 zd-^uLh;>hUfV!vMS!8n`rd`inRNcX8c-#Y@!_#tdF?A1oaqAxVxqROkd!XYM9nX|- ziM*2PAp2-h%DQG$A0tYqyX!rN(>ijQba%a%HS!)oo9G40S@)L)xv#D{!Y|{uQsvb} z@D;o-g0HA9f)7>~!Q-lV^CI|4&Wqqft&8CGa+S^7Qtggi?u$iX>Pq-t&5rSwXzVB!!QM~_sDCe-*d342wL@!a*LP~ooOct$dxBo;6g#{#ba<`1 ziJLl4u{T#^?iT89;^w%UxTSSBvEoE)?@=ptH?gV#Yu2*0bvJPvkGqN6>P6dSdN*AriDW;*b1$WG#c9mH{85Z6^EuAWZ}O(m9>;Rnmn9bJq#A(7ak8u7Og#2qQb z<;RHcyhB`uYBp^4k;E)A{eHo8&wrhGSf;tP2i-lvkcKVn72@T##4qy@Tgqpb9-w>Y z$HZMNiQOj?o5LugVO!sv*lY{2-az8^F2usQh@UMdjzH%%YzZ$C+uS3r`HDC!KXKD3 z;`V05o!yBiKP8@8LCh}Svf@p;Z#_wzx|^6Ij@T`f*bJP6kg>#|Cx~CYN^CWNXh6ck zEo*PV9lCGGvM<~~cZ4kOxs!B%A*S8X#9;kx`S&I%grWkY(m^Cx%Zk(znCn`r^yUoQGxh*L1NrX#H00z z8)R#CKTG%80>mC)5?7ZdzBiNDXcIA6rn6FV&LyZIhV5Bd8|P)tZ`WbSH(iJ?bR@Qy z`RpV^?$%>S)oR4)d5QVA5goF1*50Ih^IhT<*}nP>y6@d0#uq0}mhU|_nC^O#6Y70K zci?5>p=jc0`Npt9bRTR>{Pa38Y9jIZy~N&<>q2BYU1duRlQLoIhx~Qf5MrZOh$jmZ zo5T=*yhDt?CvhB6lQrKsjPA*|i8o}f9%(~&;zr`Ro0ZmU?F&-Ep;uzf>XCu1>s? zn>es8@mMHvqvW^aGw5E_j<`zlRp8fj?>tC+R&voL*&j!)XUJrktNkC)-M9xar)v-Z+w9vONSD_l`>(Ulo-EB zIq;P1HTz^eM9LgqY|ohI<+B@PZQE8bWQ^>UD<{z1>~-Qc*``mNrn}_(#H^AZ9FNmI zMz+O)x9Hv@xh}aS-K)zJqvYFfRHD0(F%+ZI8<_VBUvYTWt~S{V)*&-#Lr}Y zmW`!5%g4m{1Y*ke7?xTQ96KpoS)Nag>7RkhevPYaA zP4`q;qEa$fTi#(#;vi@Ym-P+m#{SC_wDfjd-O$ z@szCdva*-emwn;vJch5A{9IDjwjsHt&KQPA$vV0ECfyC+CB7`*HAM1E{33>Im2G!Z z*3#N#49PZ|I91lex3UJFZNiY#lJ|xmpnLap;s*Jx7qN6tlO>w)Jl!`WUv(NmcNf`G zO)t_N+?@ET?1QbJrn|{?VvYqwV-j)mv%~}Wi0hXVTeKh=GR~+s=+1MTm?Ud2Shm8} zlMMMSg?LJq_w{>p=ar=!Ao+HcEJfNDhWFS`oGxqcN$C!glIMli43CiRgN5ndcE(0x z^DFb&*KkzG2afS;^aayuRt8V{wdl>*ZSJmuyIrnzaCe$|6YeMKHG{jChCb}qd--L! z`{ut3cigY!w)n4~Gt)Jy)hz>m}5gC30*n4*pux~NeU)&u$VQc$^xG*iuz!FjbK3z3AwxpSSgn68(L)su=26Bz_11^LBtfM z+k681OUM3)fZb}W2KHQk1^DE*OMp?g>RKrl$af0AAz@`(M z0$athH0{rq1oqkF5A2_32QYQ*F5rm%$hFK}k=R%`0?xMr7Tr%?D>fGOB7Zw4s?LGy z9ig!{&WoR42DvVeeHb5#X`8KRqqNZ@@xxRtPe+hB+Sb7!i?lU->0+(%0FWixw`7&2 zT6J>CG3_K7_DyZlevsqZ7L}RvSzbXIjSE?RAroKBvJ7o$T*|U=seF?*72Vf0o_FqR z!s#S)Jnv_X=N)Q1pGA%5v+DlVER>$_5k0Tv_8!kas>bsw?m@frkf9pS=g_m|%y2w! z_Z-jXQsepDYCNwJ4M>*(HJ-;P9^DPI1|qNbcpk&}rRZ9^fkFHWRXL>6%VQL89m2yX z-a3Sb)g@~@Ur3GT3ww>{i+GOb1FZ3UQ8k`-7TGzT*VK64;W3`K|KsC%`~U8E-fHa! z8P8j#{}bbR^-_=VJVwYBIMDv9<9VymAFlDd;zaN9ysCk}e>|Vddpxhb)WcmIIj0xZ zHm+QTC64@*IC3a)ltuTq4n67lvgvs(x3@TYM2RC6_n`ez@9D+tdbS)HiX+Wa9HpOL zREY+p%YYI`56ASPv&c?y{5j#Lf&{o*Ly^rChRDz-~IQaf%Q)g1F~QK`uOUlvDYZX*|&uXg;;ilZD# z{d6sRC~h##TWAie=x2*SfeZQvmOZRD=u5=^+_H!2AlBOOUs?9BO8?+;NjB48R+D^k ziBcwCI=N&s$}RmjhH*h>i4_(Q$BBw0<3(YT3F0WpM6rWplK7BhvbaL>oVZ6aMU*3% zDyoxA6aK$o0KZJEp>L-M;Dp64(cliqZqd6M$R1I9B*fIfPI$s!$FYQ+P5TgwD9&I zbG5sk9|M`M=6nuWm^{%X*6?!DeYF$H}aaeEFo0aoFo&=uNu3>_}^^H*~uj?E0UtLjm z3R=^EO%62zY>zrUiM%Q*sv@|zzF?RP_T!^DkU56YuP;8L{Z;=+{Ig5zfBqYz z7M8tq-v|4~_?Fh?Hzr5Aq4@2n4CRtOgR8s`HZ$l` zd8If?r}Aodqus@kZ=u4eCixaBu*vY@+IXmD%pYI`?pvrB4jr^)h8qtbhJ}hQSmJe! z+8oNNqhaLe@)r#FJhz_jQ9ZBa_FkaKt`;a%+=F(fF#@$- znp4k~OD$07#Wgh)Q%?k>Oa1p(A4=tQ%);1Auj}vF$T6DT5nmAAR{6|5x4K_`YlrV& zwV$J_&9X(Dn`Hy^{8pA7rbcgBf3Q}49ZwfU4!*M&b#9g|rZ&qKSDR(APd1QSasAY4 zY6*|!3$NAGl4^H!DQkE1Yvu5U8l|nVVi`47bXK^h72LAcxsh_NP1HeZ6ZIGY+qhmf z99=7|71HgTuIR9r$Gb}ftIg3N-kYNsWOFIo1;CqL`SGC(U|)C z@fo}(xT@L`tt#A-Ox2uQqN}Sd(KRyL5?#~U5}k=;s>S`vwXNkj)ePpgd~3B-O;p!W zR&eX8;eS2X@E?|Ot>HgR<66UiSjM%6{|(jfzmaqJUlHXSjh)Yv;IKOu5{>-zFxO+= z<2NYIy`QQX{Orzt>ZkhYKfI8r7k5sX{Qk6j=2Ir6@>u;euV+8?SN$}f)ldHexAs}f zp?{{II;~YJ22oQjGt08wN}JR9f3%-^jh!6xp}^y?!=LS^t|iEar=NNaX#Pq+&17xy zKK;~MM*Oez)2xHs`>FG$4u{%@q-H_0sD=N3_`B+HuE=ZQKew6%)&KaX_u<%wn6_rW%b#(Q* zvgy8#<6#oR-eug_35mnKAoY?Pba>nrLc}+*UN>OveWBa z5snk-Sd-8T;A?7rM5|=-5v}U{h*nb{(dwCfL~B?d(M&pLO)4{nQk6W;6{#<`*W~Ae z%{Ew#{%|e)D^B!Y_*XUX_b>eCPB;0fC%B6vwJ4Jv=H7hA94)QPcg)eT4Pzv`@0g?A z;XCFi{>fvGT5fEVcg;39M=?%u^k3bFWLaxeYUBS0+akTJO8x`ek6e}`|9{+ml!<}K z`<%K~<0TL6$TC*w+kS+PRP7qjWjp*mr>?b{IC0_&8jX%1bjP8v8LniTAAx!_*4rYATJO6T8;Q=@Z$v@2T z%D-X=iRtoV(s_^Yu!Q~p`uBYK)%@AMa1;VS(qnWTRJk29a+o;1@@^-w31_)V?% zF0|rfQBeLJ05Y9;Y((XsN~c36>BLy+jJD#hv765gwZen2WtM;Itnf)z_}PJG_+cyj z0K9zfq+w>bdhgOq-n+_5XQ>r`lhtotwZduRgnw5xlfGev2R&>08^ACBtnd+IOmDjS zx58EZpF{kN+V=n+Xa2vKV5Xz;fAe?Z&zj~L|6iHJH&70yzuJnAEy3oWmH%gEn_lny zFSWu|{&ORp`{lo>#Rw|@rGF>>ie=_|Rs4Ft6Tjyv&-mSbC;sg7p7HzrPW+kIJ>w7k zo%rEjc*g&KrCfcG9mR1Ugbgy`<0NAh7y<`D7~=3aeHaOdVx2xtI$OFsqyrsbG}`yx z-g|4kxBIlaPj^R1BCK*y$w8JJNMeHnj=?}esuU%GI3MPWQ4Ca|NXjY4p%ShV|R*>c;-VQ+024f7{*D)6?D4`yuUf(Azw4^IJk+w)5@4t(||zA;+#G z|Nkr8UX#uwUS8jOIT2AS%YOv8mH(7O{+|(khI+qx^awcyHH4S?D)5;SZs&CwcBJyS zzX;rp`?6!)X&Q_5uY=zD!{0gR?YOJX6Ftl0-U-}}`-Vf#cL?Wk_k#Z6`8;c-rs=yCrFz{7_B7YS41Lw=Qhk#?-P+tc9kAPQ%O?}ld?yC;`TMqn~1OFcfe#(KLNrA?7 zR1cD@&f#2-FH#qRE4t%=zvXVOaW&B^Mbdt)NFN(H7pvYsEaLkNevz6k z)z60rUr6!z=*NWq^DLIy7tT?tm-4(iT$J+|==X0G{5m05M}Xgf{e6J^nA=gp7m%FQ z&j@`l#C;3&*ZffEZU=rG_@0^om&j#x)>)$GYfZt=1%A1~agyt<2mP|`0^UUH%B@Oy zV4)lqepi5g#jwcddYan+@c-Q`0DYck+9>ej(1*mD_Bh#%?KzG6rmKPP0R0P}5#SRD z;9bBUn-P35opak`a5>KZeg^cvze><6VCRQ`U$sH-3us^A_9cg$BcMMF{jHtNKDFF^(+Fx^$X^`Pwjh31_Z3W=g2?jP~9|_{Vy_jk6O7!A*KZ{vp(*H-PC5 z2Yns%|NS)~Y|}Zn3E*GC{pk?m>yw1{8j9l2BZT+Nv0pz8Id5%}d7UGjdItFOcn-D+ z;+_ZoTh|NWKat;Xd(q%>od2D1;6H$z9e0YH^T713pOHL2jpt4;0AB$7DL5duZS}K+ zUzr~e$14r}=@&La&WV4NYY$UB!EFrqOv%r80e^sAHFGK=2XTRD} z@~giD{Vm@UIp2i;zXbeGepm1ZP`JDf{EgLu+kN~^;D@nK?UT#uE#SS|#GXsBjwgZd zIzxa_#MirNoVoJJB7^s+`J+PrAmsNt=syVh4{Q>`J20;s9Q11)_#oj6=Dk0&8-`W4 zI_Q1S&o9-Vv7zr#BUr~PAn1OFoX0``AoimhL4U+SKMneO5HD*$|1$8IQvLZaz(;Nq zds=^f8+ae;oB_z0Pk}Jkx-2w!kGkQc5Z-}xyv#wr#DQ;c;CDg()gKi-?}a|&z|}ed zuEP38z+XdQZl7=5;K)l*&_MIN}71(n*E_~V{=Ru5n=6ynV0D12*2mNyn z{2LDZ7~~J&xg0;Q;r2rZ{ke|)dXWRa-htm_@E+BReaHIkFz{uAqQ?p7Gv<(^LH~Kg z?~}r&0^l<{WPPo_O#t8c2SWG|^5G%iXCwbV0XdHV?;vmg74T<)Z^6FyLEuM$cZX!$ z=YjvN!Euu7Cdkh0CzHsZ_R^aU`s0xQ1pM|Z)sjAH?&qv#4(1w!$H20Q5V?L;%8D-3t6)4-5Zubj~dV{-0M0{ihLMzYKg21laqp z`wcF<`QJxCe-L%}Iq;Kb9Q0pv;IBLI??V3hxUYN|gP(NJU(hqRoiB9Y2OM&Kp6I!5 zvHPi=^Ad-g4?FOW7`#Vaj{5v>AZVL|e!ByY9QbcI@P`ae`_Zkkz9%s5(+>JS0{sl` zQxJ~osDu6+4*c5={A{|l4@D==Xzu1NImC4^5?Qt;Ok*N~E;* zs)0_uh9V$IyW``PnyUM;-w2Y_k9FGCwN@1R2~pM~-DpKsuchm06ers2PO4he?zH^W zuUGo!rqJU-7-%n!y(#U7X*{LIW3TP&dbi!4B9`2lCd#xx>Lp&NJF(9fDz#2W89Ah( zPP$b+sQdc*ZoE@Ahk{-;I|N&1oQGO~1C&@~_MI3*wg0q{8u_L1Y~- zPJ*zZTS4fH-UN=5j%mbpGSYMsG(r`GWUYh-*HQK3)FpIz7E3x!GHH@SIxUZlI!jWU zqCv>;iE4X6Xt>!JosJf5h?LITtx4^Lbse<5hOZJo?RIoCigqTMs$RPqcp+IULuzF1 z*vkV^D~jnn_QHm*gG5I=XNjRko*a!V%UZKoo#jgILMv!A^D3Cx=B|r9a)1$? zJLhFII(GaxVB-b5x;|ZRc}c1#D@){Hikz+!lMR`ZdmZ|dd=mR?%IrXQf=R!nlA0f~ zkfiC=qX}LiETB2pqErzxiWea}X_dxajm334buaaGX6C}Vj-%8|gD5PL>2|c+Z&N(5 zH+8xx>D$udb&^KsNvFl`PHxzxDNRIiUA6pB4(h?~Ac&3&xk=D)&vL6nShqZ(_X#Kb7vZwjnL>cD(c8CM9%HCwZEGdCpQpTlt~5G zZ7<<0!ooQE=uqo{E&ZF<>-9tHw5GESL$~Vn8v$;l&rbA)O~Y&YH|gPlfvxLD^=SW^ zP3wtp-R(pDn+MmC)nr6AE=Qc?N45q@OQyndhKT(v zW!NBV(K^nKQ2CIeh+n4L-Ig3Ai5m4()sj;m* zry)vzhI@`>N7j%i=NO>L#XiTTu7;V;NU50-Pjg6X7m5ptHmf!TSZyb{3de_Ds>U|> z>9);7W=S@Zqw$VvrblLvVzOc6)mIYMXh$JMrALrfWBs%)TgpFfHYUFktD~w=u*^1-s&WhY@hAw@*v{%l{i#}1_eUc-NT%ABel1UoZC6y7 zh(z0QvP;n^^Gg}h*4^S_fr=wih$bw>1Md?YjiemScx<@ihwB2`4m_%q21hqjfny7^ z(ameQEF1Nz6emR;#AsV+059o>QS0Ybg2P6ALovD5zHl-o$Y`RJ5TQX7RLlSUiN^?$#YE91BCJM|}XSOa$ z4HRLGv?;r<)u%}{QH$IsqUcS#apqiwKv`xco9#VzLpBAd$#7hwO8nL)Jy{ycorQRq z4IK%kY~{2}$(mDAGI@hthFL>9+_?I(DPF3= zOgQ_GNu;#f<$Sr;vMV_R`XP-y(oNS;LY2WuQz>(d+|&24*+ddIs$4XVRrzxVYn(oV(IkR=iomsG5e%Mq5@{Zak$w zrTwf~TF3RKAd`vKqm(!2TH0a@NL^^iGka$#AqnVKt>Cr9VbY1Y!OI3I6@@lrrPMYK z&RL1-QXZJ5n<>4Ns(`UUPOD*m8nxlsTrOv8VU5uZZ3@EOE!|6*dkGFCa}!DB4c*Sr zeW2OHZ!_iQU^pISlcU0r>fCI0HLp{g9Nl737M0r$!^A6-Ri(*)+nIo8&#% zl(c3UC=Bdkp?biby4;#mpwOT|$ zpgq^lz3$V_NOR}9gm(WzUC^a5O_iF-S$d-yZ02 zn|n8hKC3RvHxQ=792ws-(16s0u&l zA?nDuOT};E$xgFQ((D;A$-^9Z$|EA}@$7>lqoUWQJCuq@qfDtP^r*?)F<0t-wc8*r zwl?8%N^2k4W3O6`{oVG=+^T?z44Q{|yR+wQk2X2`cBUwT}q?DrE^0>4+!^Ebh7`>QM=dOSwVP=4K#=ePeZ#`e7# zr5u#``SIir-g(D<&S1VfWlH}3l-o7ZDZIWqO@EKB)2rKT{{H|z+wa4KSx2^=o&QC2 z%q^flX0i6$L62Cu+5UF>U|C=z1Ba&DMZfRl^#5~uj>^sU&&X+}za7W+ze?BtFUQ}( zOHJD!1i!Vh)gQ3BpAOijRvv%KXd3#}^nQn1*?xBZzfISee+?5+TYW{bpW%V2G5^K% zXUDhvUm%R_YUO9or{Q?^eGHM9R$hO8Ka%I~1)uFlO7`!89NRxp;_u+Wwe2k(*yxGA zG}|98@$Uh@?N|SV@xNT+x8Ez;{+H~B(4}#4s-7$HXWx_IyE1ysS7>GX9R+{3{`l_3 zet)CreNn#k=1=JO75ZcQXZ-d%So9}K1C~zJ>m~jl?PY07+5WqW%xU&x{l@~w=z!M( zVViyDRsP<~(p!Gp^Lrw8am#-Y--+4&JC+f><+D9co=s%=C-Ggc?Kl1e{&R_+ec$ri z?}BZ=1BOKyW$|PEk6$OV#Vo)5-q`jt*}{k-R&U$CkC^lP*>}eH-eZRySlCrBdfQz> z%q+`}Z{Hu<-p0A5x8vILUX0&o0rZyNzTdW&SyyhhzZU$0&i;N1@3mhm>2LWgNB^Nc+PhKX8v-fgg vUQFFy`m^d-zv9mXtnUe>{JywK_ +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/13 20:02:36 by yantoine #+# #+# */ -/* Updated: 2025/02/18 20:43:16 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:27:24 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -88,6 +88,13 @@ typedef struct s_ambient t_vec3 color; } t_ambient; +typedef struct s_hit +{ + float t; + t_vec3 normal; + t_vec3 color; +} t_hit; + typedef struct s_camera { t_vec3 camPos; @@ -184,6 +191,13 @@ typedef struct s_calc t_ray ray; t_vec3 ray_dir; t_vec3 color; + t_light light; + t_vec3 l; + float diff; + t_vec3 view_dir; + t_vec3 half_dir; + float spec; + } t_calc; // Calcul de vecteur @@ -224,7 +238,7 @@ float intersect_sphere(t_ray ray, t_sphere s, t_vec3 *hitNormal); bool is_in_shadow(t_vec3 hitPoint, t_vec3 lightPos, t_scene scene); bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor, t_scene scene); -t_vec3 calcLighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor, +t_vec3 calc_lighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor, t_scene scene); t_vec3 trace(t_ray ray, t_scene scene); diff --git a/tags b/tags index ae2698d..7da3771 100644 --- a/tags +++ b/tags @@ -284,7 +284,7 @@ bpp3 minilibx-linux/test/main.c /^int bpp3;$/;" v typeref:typename:int bpp4 minilibx-linux/test/main.c /^int bpp4;$/;" v typeref:typename:int brightness miniRT.h /^ float brightness;$/;" m struct:s_light typeref:typename:float c miniRT.h /^ float c;$/;" m struct:s_calc typeref:typename:float -calcLighting trace.c /^t_vec3 calcLighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor,$/;" f typeref:typename:t_vec3 +calc_lighting trace.c /^t_vec3 calc_lighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor,$/;" f typeref:typename:t_vec3 camDir miniRT.h /^ t_vec3 camDir;$/;" m struct:s_camera typeref:typename:t_vec3 camPos miniRT.h /^ t_vec3 camPos;$/;" m struct:s_camera typeref:typename:t_vec3 camera miniRT.h /^ t_camera camera;$/;" m struct:s_scene typeref:typename:t_camera @@ -311,6 +311,7 @@ color miniRT.h /^ t_vec3 color;$/;" m struct:s_cylinder typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_light typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_plane typeref:typename:t_vec3 color miniRT.h /^ t_vec3 color;$/;" m struct:s_sphere typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_hit typeref:typename:t_vec3 color minilibx-linux/mlx_int.h /^ int color;$/;" m struct:s_col_name typeref:typename:int color_map_1 minilibx-linux/test/main.c /^int color_map_1(void *win,int w,int h)$/;" f typeref:typename:int color_map_2 minilibx-linux/test/main.c /^int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type)$/;" f typeref:typename:int @@ -332,6 +333,7 @@ data3 minilibx-linux/test/main.c /^char *data3;$/;" v typeref:typename:char * data4 minilibx-linux/test/main.c /^char *data4;$/;" v typeref:typename:char * decrgb minilibx-linux/mlx_int.h /^ int decrgb[6];$/;" m struct:s_xvar typeref:typename:int[6] depth minilibx-linux/mlx_int.h /^ int depth;$/;" m struct:s_xvar typeref:typename:int +diff miniRT.h /^ float diff;$/;" m struct:s_calc typeref:typename:float dir miniRT.h /^ t_vec3 dir;$/;" m struct:s_ray typeref:typename:t_vec3 disc miniRT.h /^ float disc;$/;" m struct:s_calc typeref:typename:float display minilibx-linux/mlx_int.h /^ Display *display;$/;" m struct:s_xvar typeref:typename:Display * @@ -419,6 +421,7 @@ gnl_ft_strchr libft/gnl_utils.c /^char *gnl_ft_strchr(char *s, int c)$/;" f type gnl_ft_strjoin libft/gnl_utils.c /^char *gnl_ft_strjoin(char *s1, char *s2)$/;" f typeref:typename:char * gnl_ft_strlen libft/gnl_utils.c /^size_t gnl_ft_strlen(char *s)$/;" f typeref:typename:size_t gnl_read_fd libft/gnl.c /^char *gnl_read_fd(int fd, char *str)$/;" f typeref:typename:char * +half_dir miniRT.h /^ t_vec3 half_dir;$/;" m struct:s_calc typeref:typename:t_vec3 height miniRT.h /^ float height;$/;" m struct:s_cylinder typeref:typename:float height minilibx-linux/mlx_int.h /^ int height;$/;" m struct:s_img typeref:typename:int hitPoint miniRT.h /^ t_vec3 hitPoint;$/;" m struct:s_calc typeref:typename:t_vec3 @@ -434,10 +437,13 @@ img miniRT.h /^ void *img;$/;" m struct:s_app typeref:typename:void * init_app_config main.c /^static int init_app_config(t_app *app, int argc, char **argv)$/;" f typeref:typename:int file: init_intersection parsing_cylinder_utils.c /^int init_intersection(t_ray ray, t_cylinder cy, t_calc *calc)$/;" f typeref:typename:int init_mlx_and_image main.c /^static int init_mlx_and_image(t_app *app)$/;" f typeref:typename:int file: -interesct_objects trace.c /^bool interesct_objects(float *tMin, t_vec3 *hitNormal,$/;" f typeref:typename:bool intersect_cylinder parsing_cylinder_utils2.c /^float intersect_cylinder(t_ray ray, t_cylinder cy, t_vec3 *hitNormal)$/;" f typeref:typename:float +intersect_cylinders intersect_objects.c /^static bool intersect_cylinders(const t_ray ray, t_hit *hit,$/;" f typeref:typename:bool file: +intersect_objects intersect_objects.c /^bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor,$/;" f typeref:typename:bool intersect_plane parsing_plane.c /^float intersect_plane(t_ray ray, t_plane p, t_vec3 *hitNormal)$/;" f typeref:typename:float +intersect_planes intersect_objects.c /^static bool intersect_planes(const t_ray ray, t_hit *hit, t_plane *planes,$/;" f typeref:typename:bool file: intersect_sphere parsing_sphere.c /^float intersect_sphere(t_ray ray, t_sphere s, t_vec3 *hitNormal)$/;" f typeref:typename:float +intersect_spheres intersect_objects.c /^static bool intersect_spheres(const t_ray ray, t_hit *hit, t_sphere *spheres,$/;" f typeref:typename:bool file: is_in_shadow shadows.c /^bool is_in_shadow(t_vec3 hitPoint, t_vec3 lightPos, t_scene scene)$/;" f typeref:typename:bool key_a miniRT.h /^ int key_a;$/;" m struct:s_app typeref:typename:int key_d miniRT.h /^ int key_d;$/;" m struct:s_app typeref:typename:int @@ -454,7 +460,9 @@ key_w miniRT.h /^ int key_w;$/;" m struct:s_app typeref:typename:int key_win1 minilibx-linux/test/main.c /^int key_win1(int key,void *p)$/;" f typeref:typename:int key_win2 minilibx-linux/test/main.c /^int key_win2(int key,void *p)$/;" f typeref:typename:int key_win3 minilibx-linux/test/main.c /^int key_win3(int key,void *p)$/;" f typeref:typename:int +l miniRT.h /^ t_vec3 l;$/;" m struct:s_calc typeref:typename:t_vec3 len_word libft/ft_split.c /^static size_t len_word(char *s, char c, size_t start)$/;" f typeref:typename:size_t file: +light miniRT.h /^ t_light light;$/;" m struct:s_calc typeref:typename:t_light lights miniRT.h /^ t_light lights[MAX_LIGHTS];$/;" m struct:s_scene typeref:typename:t_light[] line_if_exit miniRT.h /^ char *line_if_exit;$/;" m struct:s_scene typeref:typename:char * load_config config.c /^t_scene load_config(const char *filename)$/;" f typeref:typename:t_scene @@ -559,6 +567,7 @@ ndc_x miniRT.h /^ float ndc_x;$/;" m struct:s_calc typeref:typename:float ndc_y miniRT.h /^ float ndc_y;$/;" m struct:s_calc typeref:typename:float next minilibx-linux/mlx_int.h /^ struct s_win_list *next;$/;" m struct:s_win_list typeref:struct:s_win_list * normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_plane typeref:typename:t_vec3 +normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit typeref:typename:t_vec3 numAmbient miniRT.h /^ int numAmbient;$/;" m struct:s_scene typeref:typename:int numCamera miniRT.h /^ int numCamera;$/;" m struct:s_scene typeref:typename:int numCylinders miniRT.h /^ int numCylinders;$/;" m struct:s_scene typeref:typename:int @@ -624,6 +633,7 @@ s_camera miniRT.h /^typedef struct s_camera$/;" s s_col_name minilibx-linux/mlx_int.h /^struct s_col_name$/;" s s_cylinder miniRT.h /^typedef struct s_cylinder$/;" s s_event_list minilibx-linux/mlx_int.h /^typedef struct s_event_list$/;" s +s_hit miniRT.h /^typedef struct s_hit$/;" s s_img minilibx-linux/mlx_int.h /^typedef struct s_img$/;" s s_info libft/libft.h /^struct s_info$/;" s s_light miniRT.h /^typedef struct s_light$/;" s @@ -655,10 +665,12 @@ sl1 minilibx-linux/test/main.c /^int sl1;$/;" v typeref:typename:int sl2 minilibx-linux/test/main.c /^int sl2;$/;" v typeref:typename:int sl3 minilibx-linux/test/main.c /^int sl3;$/;" v typeref:typename:int sl4 minilibx-linux/test/main.c /^int sl4;$/;" v typeref:typename:int +spec miniRT.h /^ float spec;$/;" m struct:s_calc typeref:typename:float spheres miniRT.h /^ t_sphere spheres[MAX_SPHERES];$/;" m struct:s_scene typeref:typename:t_sphere[] sqrtDisc miniRT.h /^ float sqrtDisc;$/;" m struct:s_calc typeref:typename:float strlcpy_is_not_posix minilibx-linux/mlx_xpm.c /^unsigned int strlcpy_is_not_posix(char *dest, char *src, unsigned int size)$/;" f typeref:typename:unsigned int t miniRT.h /^ float t;$/;" m struct:s_calc typeref:typename:float +t miniRT.h /^ float t;$/;" m struct:s_hit typeref:typename:float t0 miniRT.h /^ float t0;$/;" m struct:s_calc typeref:typename:float t1 miniRT.h /^ float t1;$/;" m struct:s_calc typeref:typename:float t_ambient miniRT.h /^} t_ambient;$/;" t typeref:struct:s_ambient @@ -670,6 +682,7 @@ t_cap miniRT.h /^ float t_cap;$/;" m struct:s_calc typeref:typename:float t_cylinder miniRT.h /^} t_cylinder;$/;" t typeref:struct:s_cylinder t_event_list minilibx-linux/mlx_int.h /^} t_event_list;$/;" t typeref:struct:s_event_list t_final miniRT.h /^ float t_final;$/;" m struct:s_calc typeref:typename:float +t_hit miniRT.h /^} t_hit;$/;" t typeref:struct:s_hit t_img minilibx-linux/mlx_int.h /^} t_img;$/;" t typeref:struct:s_img t_info libft/libft.h /^typedef struct s_info t_info;$/;" t typeref:struct:s_info t_light miniRT.h /^} t_light;$/;" t typeref:struct:s_light @@ -705,6 +718,7 @@ vec3_mul calcul_de_vecteur2.c /^t_vec3 vec3_mul(t_vec3 a, t_vec3 b)$/;" f typere vec3_normalize calcul_de_vecteur2.c /^t_vec3 vec3_normalize(t_vec3 a)$/;" f typeref:typename:t_vec3 vec3_scale calcul_de_vecteur.c /^t_vec3 vec3_scale(t_vec3 a, float s)$/;" f typeref:typename:t_vec3 vec3_sub calcul_de_vecteur.c /^t_vec3 vec3_sub(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 +view_dir miniRT.h /^ t_vec3 view_dir;$/;" m struct:s_calc typeref:typename:t_vec3 visual minilibx-linux/mlx_int.h /^ Visual *visual;$/;" m struct:s_xvar typeref:typename:Visual * width minilibx-linux/mlx_int.h /^ int width;$/;" m struct:s_img typeref:typename:int win miniRT.h /^ void *win;$/;" m struct:s_app typeref:typename:void * diff --git a/trace.c b/trace.c index bfbd2d9..649e837 100644 --- a/trace.c +++ b/trace.c @@ -6,104 +6,45 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/17 19:07:07 by yantoine #+# #+# */ -/* Updated: 2025/02/18 20:34:28 by yantoine ### ########.fr */ +/* Updated: 2025/02/19 16:30:27 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ #include "miniRT.h" -// Renvoie true si le rayon intersecte un objet, et met à jour tMin, -//hitNormal et objColor -bool interesct_objects(float *tMin, t_vec3 *hitNormal, - t_vec3 *objColor, t_scene scene) -{ - bool hit; - float t; - t_vec3 n; - int i; - - hit = false; - i = 0; - while (i < scene.numSpheres) - { - t = intersect_sphere(scene.ray, scene.spheres[i], &n); - if (t > 1e-3f && t < *tMin) - { - *tMin = t; - *hitNormal = n; - *objColor = scene.spheres[i].color; - hit = true; - } - i++; - } - i = 0; - while (i < scene.numPlanes) - { - t = intersect_plane(scene.ray, scene.planes[i], &n); - if (t > 1e-3f && t < *tMin) - { - *tMin = t; - *hitNormal = n; - *objColor = scene.planes[i].color; - hit = true; - } - i++; - } - i = 0; - while (i < scene.numCylinders) - { - t = intersect_cylinder(scene.ray, scene.cylinders[i], &n); - if (t > 1e-3f && t < *tMin) - { - *tMin = t; - *hitNormal = n; - *objColor = scene.cylinders[i].color; - hit = true; - } - i++; - } - return (hit); -} - // Calcule l'éclairage (ambiant, diffus et spéculaire) sur un point d'impact -t_vec3 calcLighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor, +t_vec3 calc_lighting(t_vec3 hitPoint, t_vec3 hitNormal, t_vec3 objColor, t_scene scene) { - t_vec3 color; int i; - t_light light; - t_vec3 L; - float diff; - t_vec3 viewDir; - t_vec3 halfDir; - float spec; + t_calc calc; - color = vec3_scale(objColor, scene.ambient.ratio); + calc.color = vec3_scale(objColor, scene.ambient.ratio); i = 0; while (i < scene.numLights) { - light = scene.lights[i]; - L = vec3_normalize(vec3_sub(light.pos, hitPoint)); - if (!is_in_shadow(hitPoint, light.pos, scene)) + calc.light = scene.lights[i]; + calc.l = vec3_normalize(vec3_sub(calc.light.pos, hitPoint)); + if (!is_in_shadow(hitPoint, calc.light.pos, scene)) { - diff = fmaxf(0.0f, vec3_dot(hitNormal, L)); - viewDir = vec3_normalize(vec3_sub(scene.camera.camPos, hitPoint)); - halfDir = vec3_normalize(vec3_add(L, viewDir)); - spec = powf(fmaxf(0.0f, vec3_dot(hitNormal, halfDir)), 32.0f); - color = vec3_add(color, vec3_scale(vec3_mul(objColor, light.color), - diff * light.brightness)); - color = vec3_add(color, vec3_scale((t_vec3){1, 1, 1}, spec - * light.brightness)); + calc.diff = fmaxf(0.0f, vec3_dot(hitNormal, calc.l)); + calc.view_dir = vec3_normalize(vec3_sub(scene.camera.camPos, hitPoint)); + calc.half_dir = vec3_normalize(vec3_add(calc.l, calc.view_dir)); + calc.spec = powf(fmaxf(0.0f, vec3_dot(hitNormal, calc.half_dir)), 32.0f); + calc.color = vec3_add(calc.color, vec3_scale(vec3_mul(objColor, calc.light.color), + calc.diff * calc.light.brightness)); + calc.color = vec3_add(calc.color, vec3_scale((t_vec3){1, 1, 1}, calc.spec + * calc.light.brightness)); } i++; } - if (color.x > 1.0f) - color.x = 1.0f; - if (color.y > 1.0f) - color.y = 1.0f; - if (color.z > 1.0f) - color.z = 1.0f; - return (color); + if (calc.color.x > 1.0f) + calc.color.x = 1.0f; + if (calc.color.y > 1.0f) + calc.color.y = 1.0f; + if (calc.color.z > 1.0f) + calc.color.z = 1.0f; + return (calc.color); } // Fonction principale de lancer de rayon (trace) @@ -118,10 +59,10 @@ t_vec3 trace(t_ray ray, t_scene scene) hitNormal = (t_vec3){0, 0, 0}; objColor = (t_vec3){0, 0, 0}; scene.ray = ray; - if (interesct_objects(&tMin, &hitNormal, &objColor, scene)) + if (intersect_objects(&tMin, &hitNormal, &objColor, scene)) { hitPoint = vec3_add(scene.ray.origin, vec3_scale(scene.ray.dir, tMin)); - return (calcLighting(hitPoint, hitNormal, objColor, scene)); + return (calc_lighting(hitPoint, hitNormal, objColor, scene)); } - return ((t_vec3){0.2f, 0.7f, 1.0f}); // Couleur de fond (ciel) + return ((t_vec3){0, 0, 0}); // Couleur de fond (ciel) }