if p == rayon.origine: return None n = self.normale(p, rayon) n = n.renorme() y = n.scalaire(rayon.direction) d = rayon.direction - n * y * 2 r = base.rayon(p, d, rayon.pixel, rayon.couleur * self.reflet) return r if __name__ == "__main__": psyco.full() s = scene.scene_phong(base.repere(), math.pi / 1.5, 400, 200) s.ajoute_source ( base.source (base.vecteur (0,8,8), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_source ( base.source (base.vecteur (10,0,0), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_source ( base.source (base.vecteur (8,8,4.5), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (3,-4,7), \ 1, base.couleur (1,0,0) ) ) s.ajoute_objet ( sphere_reflet (base.vecteur (0,-400,12), \ 396, base.couleur (0.5,0.5,0.5), 0.5 ) ) s.ajoute_objet (rectangle_image ( base.vecteur (8,-3.5,9), \ base.vecteur (2,-3.5,8), \ base.vecteur (2,3.8,8), \ None, \ "bette_davis.png", invertx = True))
if p == rayon.origine : return None n = self.normale (p, rayon) n = n.renorme () y = n.scalaire (rayon.direction) d = rayon.direction - n * y * 2 r = base.rayon (p, d, rayon.pixel, rayon.couleur * self.reflet) return r if __name__ == "__main__" : psyco.full () s = scene.scene_phong (base.repere (), math.pi / 1.5, 400, 200) s.ajoute_source ( base.source (base.vecteur (0,8,8), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_source ( base.source (base.vecteur (10,0,0), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_source ( base.source (base.vecteur (8,8,4.5), \ base.couleur (0.4,0.4,0.4) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (3,-4,7), \ 1, base.couleur (1,0,0) ) ) s.ajoute_objet ( sphere_reflet (base.vecteur (0,-400,12), \ 396, base.couleur (0.5,0.5,0.5), 0.5 ) ) s.ajoute_objet (rectangle_image ( base.vecteur (8,-3.5,9), \ base.vecteur (2,-3.5,8), \ base.vecteur (2,3.8,8), \ None, \ "bette_davis.png", invertx = True))
s = "rectangle --- a : " + str (self.a) s += " b : " + str (self.b) s += " c : " + str (self.c) s += " d : " + str (self.d) s += " couleur : " + str (self.couleur) return s if __name__ == "__main__" : s = scene.scene_phong (base.repere (), math.pi / 1.5, 400, 300) s.ajoute_source ( base.source (base.vecteur (0,8,8), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_source ( base.source (base.vecteur (10,0,0), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_source ( base.source (base.vecteur (8,8,4.5), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (1,0,5), \ 1, base.couleur (1,0,0) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (0,-400,12), \ 396, base.couleur (0.5,0.5,0.5) ) ) s.ajoute_objet (facette ( base.vecteur (0,-2.5,6), \ base.vecteur (-2,-2.5,3), \ base.vecteur (1,-3.5,4.5), \ base.couleur (0.2,0.8,0))) s.ajoute_objet (rectangle ( base.vecteur (0,-2.5,6), \ base.vecteur (-2,-2.5,3), \ base.vecteur (-2,2.8,3.5), \
def __str__(self): """affichage""" s = "rectangle --- a : " + str(self.a) s += " b : " + str(self.b) s += " c : " + str(self.c) s += " d : " + str(self.d) s += " couleur : " + str(self.couleur) return s if __name__ == "__main__": s = scene.scene_phong(base.repere(), math.pi / 1.5, 400, 300) s.ajoute_source ( base.source (base.vecteur (0,8,8), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_source ( base.source (base.vecteur (10,0,0), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_source ( base.source (base.vecteur (8,8,4.5), \ base.couleur (0.6,0.6,0.6) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (1,0,5), \ 1, base.couleur (1,0,0) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (0,-400,12), \ 396, base.couleur (0.5,0.5,0.5) ) ) s.ajoute_objet (facette ( base.vecteur (0,-2.5,6), \ base.vecteur (-2,-2.5,3), \ base.vecteur (1,-3.5,4.5), \ base.couleur (0.2,0.8,0))) s.ajoute_objet (rectangle ( base.vecteur (0,-2.5,6), \ base.vecteur (-2,-2.5,3), \ base.vecteur (-2,2.8,3.5), \
# premier terme cos = n.scalaire (vs) couleur = source.couleur.produit_terme (obj.couleur_point (p)) * (cos * self.kb) # second terme : reflet cos = n.scalaire (bi) ** self.reflet couleur += source.couleur.produit_terme (source.couleur) * (cos * self.kc) couleur = couleur.produit_terme (rayon.couleur) return couleur if __name__ == "__main__" : s = scene_phong (base.repere (), math.pi / 1.5, 400, 300) s.ajoute_source ( base.source (base.vecteur (0,10,10), \ base.couleur (1,1,1) ) ) s.ajoute_source ( base.source (base.vecteur (10,10,5), \ base.couleur (0.5,0.5,0.5) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (0,0,12), \ 3, base.couleur (1,0,0) ) ) s.ajoute_objet ( obj.sphere (base.vecteur (0,-400,12), \ 396, base.couleur (0.5,0.5,0.5) ) ) print s screen = pygame.display.set_mode (s.dim) screen.fill ((255,255,255)) s.construit_image (screen) print "image terminée" scene.attendre_clic ()