Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# -*- coding: utf-8 -*- 

2""" 

3@file 

4@brief implémentation du modèle d'illumination de Phong 

5""" 

6from .image_synthese_scene import Scene 

7from .image_synthese_base import Couleur 

8 

9 

10class ScenePhong (Scene): 

11 """définit une scène et utilise le modèle d'illumination de Phong 

12 pour construire l'image de synthèse""" 

13 

14 def __init__(self, repere, alpha, x, y, 

15 ka=0.1, 

16 kb=0.8, 

17 kc=0.3, 

18 reflet=6, 

19 fond=Couleur(200, 200, 200)): 

20 """définit la position de l'oeil, l'angle d'ouverture, 

21 et la taille de l'écran""" 

22 Scene.__init__(self, repere, alpha, x, y) 

23 self.ka, self.kb, self.kc = ka, kb, kc 

24 self.reflet = reflet 

25 self.fond = fond 

26 self.constante = float(1) 

27 

28 def __str__(self): 

29 """affichage""" 

30 s = Scene.__str__(self) 

31 s += "ka = %1.3f kb = %1.3f kc = %1.3f\n" % ( 

32 self.ka, self.kb, self.kc) 

33 s += "reflet " + str(self.reflet) + "\n" 

34 s += "couleur du fond " + str(self.fond) + "\n" 

35 return s 

36 

37 def couleur_fond(self): 

38 """retourne la couleur du fond""" 

39 return self.fond * self.ka 

40 

41 def modele_illumination(self, rayon, p, obj, source): 

42 """calcule la couleur pour un rayon donné, un point p, un objet obj, 

43 et une source de lumière source""" 

44 n = obj.normale(p, rayon).renorme() 

45 vr = rayon.direction.renorme() 

46 vr *= float(-1) 

47 vs = source.origine - p 

48 vs = vs.renorme() 

49 bi = vs + vr 

50 bi = bi.renorme() 

51 

52 # premier terme 

53 cos = n.scalaire(vs) 

54 couleur = source.couleur.produit_terme( 

55 obj.couleur_point(p)) * (cos * self.kb) 

56 

57 # second terme : reflet 

58 cos = n.scalaire(bi) ** self.reflet 

59 couleur += source.couleur.produit_terme( 

60 source.couleur) * (cos * self.kc) 

61 couleur = couleur.produit_terme(rayon.couleur) 

62 

63 return couleur