From 1d96cb1f45d35ef8a5c2677fbd4900b7c5ac8821 Mon Sep 17 00:00:00 2001
From: Benjamin Koltes <benjamin.koltes@student.ecp.fr>
Date: Mon, 21 Mar 2016 03:45:24 +0100
Subject: [PATCH] avec les shadow

---
 __pycache__/operation_vector.cpython-33.pyc | Bin 7404 -> 6254 bytes
 __pycache__/raytracer.cpython-33.pyc        | Bin 2603 -> 3000 bytes
 raytracer.py                                |  15 ++++++++++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/__pycache__/operation_vector.cpython-33.pyc b/__pycache__/operation_vector.cpython-33.pyc
index 200dee8539d5beca61dbe0c0a5cc3b84ef2dcba1..6985a18e0b64f2524fb9bd0aa6ba3ed8b3334944 100644
GIT binary patch
delta 418
zcmaE3`ObiS9uF_qHHG&Z*)y2f#26SD^z<fg6ce4y$HO*xAJbYSq0L*ERTvR`>B;J>
zuMu334))1OY~^S|n>E=5P;_;0)FCVJ=iGwKtrKON9K<yVAtXK7m>Y=;vgSIH>}C^Q
zb`;~g_>f#6Jvo3s6`@*oGn;@El4{Y(nS!$s(jc?hHU|rtp(v>nW!rp1I2KLpKSJ9~
l1XFbLWbt|wmC=$YVbm|xjHG&Uv~)c(S6L<*nR{MF765k<V3q&?

delta 1576
zcmaE7@WzsT9uF_qzpL*yvS%=vxG*p<I9tVp7N-^!$2g_tWhLfj=Eb<=Czs}?=9M4`
zxo4Kdq@<R`=j5kPZV(lnoXgKXc_PyqvJKcA!K}haw(iOOoNSZlvb-kWfW@qJWNY4R
z!zNCl+e_HVw|+7&#}=~PKKTyE4DvPib5fw$iR(HgHnVTG=4PWX*pqn5DRBbZ<X=3g
z6dAC&fmeoXKS)mA%{QHF>o@1}+mLOw=;k8=$>i&v>?HJ`Y=?t0dy+8u8D{fu;d=7i
hzPLe@JdNNoa<*7A`JT2EuP0ygW$|S4H3v$_0s#FuHX8r{

diff --git a/__pycache__/raytracer.cpython-33.pyc b/__pycache__/raytracer.cpython-33.pyc
index d438c668c55e9e716dd620b8256fd685dab4b5db..30618db9ed94af2cbefc1ffb44ebb596ab27ebfc 100644
GIT binary patch
delta 972
zcmZ22vO`>X9uF_qpP2VyA2}Epk{OTyGXn#I0|Ns?ar;E&TK*Ish86~fC|-sXUWQ-|
zzKx567}@w47#Q^QCTlWHhcUk}nR0P4FfcfS^d(L<X5Le8$xy?{kj2g56065h%f(Q`
z$xy<>P{Rcht>IuO;b2H%f}(V0hGs^FW)=qXT26+-Lk!_H91K}p3|YJkS$qt&+#s!4
z{0z+u3^B|MwLA>9ybQH`AOlJS7)sa~YIqn@m>HVEhBY%Wln8)KEn(+psNsc5fJG;F
zvKTW8PTtG1NRXF-fgw3Rx1h8nH9jXZJ)>lD9qR*_PbRV1GcoCGzRWfo?$1RWN{sT8
zk8<eOC$m7q3FKEcn14?&Fff!bFw`(GWHB<-Fo8)hTOx}I<m_f9hFTUh31*N)Eh|F}
zD?<t+gGenKLq!TGXtG!sTw)^`YS|e|SQ%>A8ERNSUaRF`sNrBpsb^rwW@aez0dYW9
zu`pz@Ge~4X%;E%vQw<wKHUmS^Qc&=qg>P`74@033LwE@%$fZzcGJygb#O7wGVP<G%
zWeC;)MZaJAI`@ZFBJ1AUXM#Me!Nb77P|D1p#lR4hSXs)!z`#(DUz}NznV(k*3W>b@
zqTIxs%&OFsQcwVaxRXz@Xvp$`QbS2%QAuWAdVE2CW?o4tDA2-ElS}f8CT<X`2k}6v
z6LY{4`AJ!+$t4;fBTHEs7#P5j17;N`r{<-Wf}D|=SCU#(oSF=_9HhT2GqpUms1)Sv
zBB<k1GK)(R^O93bK@Na%;&U={GfPSt85kJy!CojztuHRkDM^HgrD%YC3L;7&={u$<
zv9hEnF*&tJub{FNBhhGqJSPHD&#1&G#>mAez{t<Y!zjkc!zjgwsoYNk<QTALAl?#S
pV3^Foxj_R{DZ(XS7SuVD|8U9+fy@wN6krr!6k`%*<q_fG1_0pR%5MMw

delta 580
zcmdlXzFI_i9uF_qtFQ0EWZ4)Pk{OTyGXn#I0|Ns?arH#yTIOI4o{j5+7)@*$7#N(b
zVnT~ki;82MQuDGBb2IZ|T=J7kb5rw5kc8YbOJY(|%i?qL(<ietO(##|5++kFZjg;2
zcjQif%(SQ8m7#`_A&Z;ACDw|emW!c=lc9u%p@xg0hJzuC1x)gSNiK#G4u%vaC`xB$
zXl7(+W@Rw1<zy&4#1IZr&c%?$$B@O(P|FQ6CQE>!nSmjOnW2`4p_Z4SmJeh=i6BD>
zJ3|c*LkcrPGsrM$5LF@wG8QDk3zcYQVki-utjl7|C^R{dWzpn0oC=dgS?`nQ>tC$)
zOpF$rt=VRi8Qyo;l^EqF|7X`{_S4{<Jdf+3iv}oS5kx6j(b&!{FTlgVz#zsbz$m~d
K#w5(jBMbmH*PTuP

diff --git a/raytracer.py b/raytracer.py
index fe34768..e6b7538 100644
--- a/raytracer.py
+++ b/raytracer.py
@@ -22,7 +22,8 @@ def trace_ray(ray, scene, camera):
         return Vector([0,0,0])
     color = ambiant_illuminate(class_intersect.position, class_intersect.object)
     for light in scene.light_list:
-        color += phong_illuminate(light, class_intersect.position, class_intersect.normal, class_intersect.object, Vector([0,0,0]))
+#        color += phong_illuminate(light, class_intersect.position, class_intersect.normal, class_intersect.object, Vector([0,0,0]))
+        color += compute_light(light, scene, class_intersect, Vector([0,0,0]))
     color_object = class_intersect.object.material.color
     c_x, c_y, c_z = color.coord()
     return Vector([max(min(c_x, 1), 0), max(0, min(c_y, 1)), max(0, min(c_z,1))])
@@ -37,3 +38,15 @@ def raytracer_render(camera, scene):
             color = trace_ray(ray, scene, camera)
             affiche[i,j,:] = color.coord()
     return affiche
+
+def compute_light(light, scene, intersection, viewer):
+    ray = Ray(light.position, (intersection.position - light.position).normalized())
+    distance = (intersection.position - light.position).norm()
+    distance_limit = distance*.99
+    for o in scene.object_list:
+        resultat = intersect(o, ray)
+        if resultat != None:
+            d = (resultat.position - ray.starting_point).norm()
+            if d < distance_limit: # si un objet est dans la trajectoire du rayon
+                return Vector([0, 0, 0])
+    return phong_illuminate(light, intersection.position, intersection.normal, intersection.object, viewer)
-- 
GitLab