Images de synthèse sous POV-RAY
Pourquoi un schéma aussi simple ? Pour plusieurs raisons :
Tout d'abord, il est plus simple de placer les emplacements des objets plutôt que les objets complets. L'équilibrage de la scène est simplifié. Le rendu des scènes intermédiaires est nettement plus rapide.
Les objets ainsi placés seront donc remplacés un par un, en temps et en heure, par des versions améliorées. Les versions de base resteront néanmoins disponibles, pour permettre par exemple de tester les animations avec des rendus rapides.
Au niveau du code, cela se voit par des déclarations en début de fichier du type :
#declare TAPIS_ROUGE=1; //max=1
La valeur indiquée orientera le code source vers la version correspondante de l'objet. 0 correspond à l'absence d'objet, 1 à l'objet basique, 2 une version améliorée, et ainsi de suite. Le //max=1 rappelle que pour l'instant, la version la plus avancée est la version 1.
Dans le code source, l'orientation s'effectue par des directives du type :
#if (TAPIS_ROUGE=1)
box { <150,0,-40>,<250,1,-800> pigment {color ROUGE} }
#end
D'autres #if se grefferont par la suite.
Notez dans le code l'utilisation de la couleur ROUGE, qui est définie dans mon fichier "couleur.inc" (disponible sur ce blog. Fouillez un peu...)
D'autres astuces ? Oui. Par exemple, regarder le petit cube gris en haut et à gauche. Il sera remplacé à terme par un buste. Vous remarquerez qu'il pointe vers la caméra. Lorsque la caméra se déplacera, il suivra automatiquement du regard ce déplacement. Comment ? Un peu de trigonométrie. L'angle de rotation est défini par l'arctangente du ratio entre les différences de coordonnées x et les différences de coordonnées z. ouf.
Ou pour être plus clair :
#macro AngleDeVisee(PositionCamera,PositionObjet)
atan2 (PositionCamera.x-PositionObjet.x,PositionCamera.z-PositionObjet.z) *180/pi
#end
box {<-15,100,-15>,<15,130,15> pigment {color GRISA}
rotate AngleDeVisee(PositionCam,<130,0,-200>) *y
translate <130,0,-200>
}
Résultat :

En parlant de caméra, et en vue des futures animations. J'ai remplacé le classique "Location <> look_at <>" par ceci :
#macro LaCamera(Position, Distance, Angle, AngleVertical)
camera
{
location Position
look_at <Position.x+Distance*sin(Angle*pi/180)*cos(AngleVertical*pi/180), Position.y-Distance*sin(AngleVertical*pi/180),
Position.z+Distance*cos(Angle*pi/180)*cos(AngleVertical*pi/180)>
}
#end
Position est la position classique de la caméra. Distance est la distance de vue, qui sera utile lorsque l'on ajoutera un focal_blur. Angle est l'angle de vue (0 regarde vers +z. On tourne autour de l'axe y) et angleVertical l'angle de plongée. Les angles sont en degré.
Par exemple :

Prochaine étape : le schéma de la bibliothèque. Les lumières deviendront aussi animables (et encore de la trigonométrie à la clef !)
Et par la suite : l'animation en elle-même et les objets totalement modélisés.
A bientôt !