• Aucun résultat trouvé

Les sources lumineuses

N/A
N/A
Protected

Academic year: 2022

Partager "Les sources lumineuses"

Copied!
61
0
0

Texte intégral

(1)

Un peu de PovRay

http://www.povray.org

(2)

• Le système de coordonnées

(3)

Les sources lumineuses

• Ponctuelle

• Spot

• Cylindrique

• Surfacique

• Ambiante

• Spéciale

light_source {

<2, 10, -3>

color White }

light_source {

<Location>, COLOR

[LIGHT_MODIFIERS...]

}

(4)

Les sources lumineuses

• Ponctuelle

• Spot

• Cylindrique

• Surfacique

• Ambiante

• Spéciale

(5)

Falloff location

Center line Radius

Point_at

light_source {

<0, 10, -3>

color White spotlight radius 15 falloff 20

tightness 10

point_at <0, 0, 0>

}

(6)

Sans spot à gauche – avec à

droite

(7)

Variation des paramètres

light_source {

<0, 10, -3>

color White spotlight

radius 15 falloff 20

tightness 10

point_at <0, 0, 0>

}

light_source {

<0, 10, -3>

color White spotlight radius 10 falloff 10 tightness 10

point_at <0, 0, 0>

}

(8)

radius 20 falloff 15 6 spots

radius 10 falloff 10 6 spots

(9)

Les sources lumineuses

• Ponctuelle

• Spot

• Cylindrique

• Surfacique

• Ambiante

• Spéciale

(10)

light_source {

<0, 10, -3>

color White cylinder radius 10 falloff 20 tightness 0

point_at <0, 0, 0>

}

(11)

6 spots à gauche – 6 cylindres à

droite

(12)

La caméra

angle

direction

Plan image Haut

+0.5

droite

+0.5 -0.5

-0.5

Point visé

Position de la caméra

(13)

exemples

camera {

location <-4, 3, -5>

look_at <0, 0, 0>

}

camera {

location <-4, 3, -9>

look_at <0, -5, 0>

}

(14)

camera {

location <-4, 3, -9>

look_at <0, 0, 0>

}

camera {

location <-4, 3, -9>

look_at <0, 0, 0>

angle 48 }

(15)

Un programme "complet"

#include "colors.inc"

#include "textures.inc"

camera {

location <-4, 3, -9>

look_at <0, 0, 0>

right <-1.33,0,0>

angle 48 }

light_source {

<2, 10, -3>

color White }

/* Puis viennent les descriptions des primitives et donc de la scène

*/

(16)

Remarque : lumière ambiante, lumière diffuse et lumière

spéculaire

• Ambiante : pour simuler la lumière ambiante. Elle diffuse dans toutes les directions

• Diffuse : diffuse dans toutes les directions, de la

même manière, la lumière sur des surfaces mates.

• Spéculaire : pour simuler l'effet de miroir

• Syntaxe:

– Soit

• global_settings { ambient_light COLOR }

• finish {ambient x diffuse y specular z} dans la description de la primitive ou

• finish {ambient <r,g,b> diffuse y specular z}

(17)

finish {

ambient 0 diffuse 0 }

finish {

ambient .2 diffuse .6 }

ambient de 0.1 à 0.2 diffuse de 0.5 à 0.7

finish {

ambient 1 diffuse 0 }

Le cône a finish { ambient 1 diffuse 0 }

Et la sphère finish {

ambient 0 diffuse 0 }

Les 2 primitives ont comme attributs:

(18)

Cône : finish {

ambient <0.1,0.1,0.1>

diffuse 0.3 specular 0.5 }

Sphère:

finish {

ambient <0.4,0.4,0.4>

diffuse 0.3 specular 0.5 }

Et le sol :

finish { reflection {1.0} ambient 0.6 diffuse 0 }

(19)

finish { reflection {1.0} ambient 0.6 diffuse 0.5 }

finish { reflection {1.0} ambient 0 diffuse 0.5 }

(20)

Couleurs

• #include "colors.inc"

• color rgb < 0.2 , 0.3 , 0.4 >

• color red 1.0 green 1.0 blue 1.0

• color White

• Ou encore pigment {

color rgb<1, 0, 0.3>

}

Pour le cône pigment {

color rgbf<1, 0, 0,1>

}

(21)

Pigments

• Syntaxe

– object {

MonObjet

texture {

pigment { color Red } }

} ou

– object {

MonObjet pigment {color Red } }

• Autres arguments : checker, hexagon, brick

(22)

plane { y, -1 texture {

pigment { checker

color rgb<0.5, 0, 0>

color rgb<0, 0.5, 0.5>

}

finish { diffuse 0.4 ambient 0.2 phong 1

phong_size 100 reflection 0.25 }

}

(23)

pigment { hexagon

color rgb<0.5, 0, 0>

color rgb<0, 0.5, 0.5>

}

pigment { brick

color rgb<0.5, 0, 0>

color rgb<0, 0.5, 0.5>

}

(24)

Les primitives en Povray

(25)

Les primitives

Sphère

sphere {

<Centre>

Rayon [Paramètres]

}

Exemple

sphere{

< 0, 0, 0 > //centre 1 //rayon pigment {Cyan} //couleur }

ou

sphere{

< 0 , 0 , 0 > //centre 1 //rayon pigment {color < 0 , 0 , 1 >} //couleur }

(26)

• Le parallélépipède

Syntaxe box {

<Sommet 1>, <Sommet 2>

[paramètres...]

}

Sommet 2

Sommet 1

box{

< -1 , -1 , -1 > //premier coin

< 1 , 1 , 1 > //deuxième coin pigment {

color < 1.5 , 0 , 0 >} //couleur }

(27)

• Le cylindre

• Syntaxe :

cylinder{

<centre de la base>

< centre de la surface supérieure >

Rayon [ open ]

[paramètres...]

}

centre de la surface supérieure

rayon

centre de la base

(28)

• exemples

cylinder{

< 0, -1, 0 > //centre du premier disque

< 0, 1, 0 > //centre du deuxième disque 1 //rayon du cylindre

pigment {color < 2 , 1 , 1 > } }

cylinder{

< 1 , 0 , 0 >

< -1 , 0 , 0 >

1

open //cylindre ouvert pigment {Yellow }

}

(29)

• Le cône

• Syntaxe cone {

<centre de la base>

rayon de la base

<centre de la surface supérieure>

rayon de la surface supérieure [ open ]

[paramètres...]

}

Base point Cap point

Base radius Cap radius

(30)

• exemples

cone{

< -1 , 0 , 0 > //centre du premier disque 2 //son rayon

< 0 , 1 , 0 > //centre du deuxième disque 1 //son rayon

open

pigment {Yellow } //couleur : jaune }

cone{

< -1, 0, 0> //centre du premier disque 2 //son rayon

< 0, 1, 0 > //centre du deuxième disque 1 //son rayon

pigment {color < 0 , 0.3 , 3 > } }

(31)

• Le tore

• Syntaxe

torus {

Grand rayon

Petit rayon [paramètres...]

}

X

Grand rayon

Petit rayon

Z

Ligne médiane

(32)

torus{

5 , 0.2 //rayons extérieur et intérieur pigment {Pink }

} torus{

1, 0.2 //rayons extérieur et intérieur pigment {Orange }

}

(33)

• Le plan

– plane { <A, B, C>, D } = Ax+By+Cz+D

Syntaxe

plane {

<Normal>

Distance [paramètres...]

}

Exemple

camera {

location <10,1,10>

look_at <0,0,0>

}

plane {

<0, 1, 0>

0

texture { CloudArea } }

plane { y, -1.5

pigment { checker Green, White } }

(34)

Le polygone

polygon { Nombre de points,

<Point_1> <Point_2>... <Point_n>

[paramètres...]

}

polygon{

4

<0,0,0> <1,0,0>

<1,1,0> <0,1,0>

pigment{

color <0,0,5>

} }

(35)

Les transformations géométriques

(36)

•Les translations.

box {

<-1, -1, -1>

< 1, 1, 1>

pigment {Blue}

}

box {

< -1, -1, -1>

< 1, 1, 1>

pigment {Blue}

translate <2,0,0>

}

box {

< -1, -1, -1>

< 1, 1, 1>

pigment {Blue}

translate <0,-2,-1>

}

(37)

Les mises à l'échelle

box {

< -1 , -1 , -1 >

< 1 , 1 , 1 >

pigment {Blue}

scale <1,2,0>

}

box {

< -1 , -1 , -1 >

< 1 , 1 , 1 >

pigment {Blue}

scale <2,0.5,0.3>

}

(38)

Les rotations

(39)

Les rotations

box {

< -1 , -1 , -1 >

< 1 , 1 , 1 >

rotate <0,45,0>

}

box {

< -1 , -1 , -1 >

< 1 , 1 , 1 >

texture {Pine_Wood } rotate <0,45,60>

}

box {

< -1 , -1 , -1 >

< 1 , 1 , 1 >

texture {Chrome_Metal } rotate <-20,-45,60>

}

(40)

Remarques

• rotate <45,0,0> = rotate x*45

• rotate <45,-30,20> = rotate x*45 rotate y*- 30 rotate z*20

• rotate z*20 = rotate 20*z

• rotate y*45 x*45 = rotate <0,45,0> rotate

<45,0,0>

• rotate y*45 x*45 ≠ rotate <45,45,0>

(41)

CSG

(42)

En PovRay

union {

objets...

[ paramètres... ] }

intersection { objets...

[ paramètres... ] }

difference { objets...

[ paramètres... ] }

(43)

union{

sphere{<0,1,0>,0.35}

cone{<0,0,0>,0.45,

<0,1.2,0>,0 }

texture{Glass3}

translate <0.5, 0, 0>

}

merge{

sphere{<0,1,0>,0.35}

cone{<0,0,0>,0.45,

<0,1.2,0>,0}

texture{Glass3}

translate < 0.5, 0, 0>

}

(44)

difference{

box { <0,0,0>,<1,1,1>

texture{ My_Wood } }

sphere{ <0,0,0>,0.5 texture{ My_Wood } translate<1,1,0>

} }

difference{

box { <0,0,0>,<1,1,1> } sphere{ <0,0,0>,0.5 translate<1,1,0>

}

texture{ My_Wood } }

(45)

Quelques éléments du langage

• Les commentaires

– Comme en C ou en C++

– Exemples : /* Ceci est un commentaire sur plusieurs lignes */

// ceci est un autre commentaire

• Déclaration des constantes ou des variables

– #declare IDENTIFICATEUR=Valeur;

– le point-virgule obligatoire après les expressions

utilisant des réels, vecteurs et déclarations de couleur – Exemples :

(46)

• #declare Rows = 5;

• #declare Count = Count+1;

• #declare White = rgb <1,1,1>;

• #declare Cyan = color blue 1.0 green 1.0;

• #declare Font_Name = "ariel.ttf"

• #declare Rod = cylinder {-5*x,5*x,1}

• #declare Ring = torus {5,1}

• #declare Europe = Blue;

• #declare camera_face = camera {

location <0,0,-6>

look_at <0,0,0>

}

Puis camera {camera_face}

(47)

#declare Ma_Transformation = transform{

Liste des transformations }

object{ Mon_Object transform Ma_Transformation }

Exemple :

#declare transfo = transform {rotate <0,45,60> scale

<0.5,1,1> translate <0,0,3>} ;

box {

< -1, -1, -1>

< 1, 1, 1>

pigment {Blue}

transform transfo }

(48)

#declare OrangeYellow = color rgb<1,0.85,0>;

#declare Ball1 = sphere{

<0,0,0>,1

texture{pigment{color OrangeYellow}

finish {ambient 0.25 diffuse 0.75}

} }

object{Ball1 translate< 4, 0,-4>}

(49)

Les "include"

• Permet d'inclure jusqu'à 10 fichiers

• \Program Files\PovRay\POV-Ray for Windows v3.6\include

#include "colors.inc" //Couleurs Standard

#include "textures.inc" //Textures Standard

#include "math.inc" //fonctions de math

#include "rad_def.inc" //radiosité

#include "rand.inc" //tirages aléatoires

#include "shapes.inc" //générations de formes variées

#include "strings.inc" //textes

(50)

// --- textures ---

#include "finish.inc" //finitions de base

#include "glass.inc" //verres

#include "golds.inc" //Ors

#include "metals.inc" //Metaux

#include "stones.inc" //include-file pour STONES1 et STONES2

#include "stones1.inc" //pierres

#include "stones2.inc" //pierres

#include "woodmaps.inc" //bois

#include "woods.inc" //bois

(51)

Les macro

#macro Identificateur (paramètres... ) instructions... #end

#macro boite (bas_gauche,haut_droit, translat, rotation, echelle, couleur ) object {

box{ bas_gauche, haut_droit } pigment { color couleur }

scale echelle rotate rotation translate translat }

#end

boite (<0,0,0>,<largeur,hauteur,profondeur>,0,0,3,Blue )

(52)

Quelques éléments du langage

#break

#case

#debug

exemple #debug Chaine1 : message à la console

#declare

#default

#else

#end

#error

Envoie le message vers la console correspondante, et stoppe l'interprétation du script.

#fclose

#fopen

#if

#ifdef

#ifndef

Les mots réservés

(53)

Exemple

#ifdef (Ma_Sphere) // Si Ma_Sphere existe

object {Ma_Sphere pigment {Red} translate <2,5,0> }

#else

#declare Ma_Sphere = sphere {0,1 pigment {Green} translate <2,5,0>}

#end

#include

#local #macro

#range

#read

#render

exemple #render "message" même effet que #debug,

#statistics

exemple #statistics "message" même effet que #debug

#switch

#undef

Permet de 'vider' une variable, comme si elle n'avait jamais été déclarée.

#undef (Ma_Sphere)

#version

#warning

comme #debug sauf que le mot Warning est ajouté au message

#while

#write

(54)

Les opérateurs

?:

Expression conditionnelle

& | Logiques

< ; <= ; = ; != ; >= ; >

Relationnels

* / + - binaire

+ - ! Unaire

Arithmétiques

(55)

Exemple

#declare Count=0;

#while (Count < 5)

object { MyObject translate x*3*Count }

#declare Count=Count+1;

#end

(56)

• text { ttf

"NomDelaPolice.ttf/ttc"

"Chaîne de caractères"

Epaisseur,

<Offset>

[paramètres...]

}

Les textes

(57)

text{ttf Font "X",1,0.5 translate <3,0.5,0> } text{ttf Font "Y",0.01,0 translate <0.5,3,0> }

text{ttf Font "ZZZZZ",0.01,0.5 translate <0,0.5,-3> rotate <0,180,0>}

(58)

Les fichiers

#fopen MonFichier "mydata.txt" read ( write ou append )

#while (defined(MonFichier ))

#read (MonFichier ,Var1,Var2,Var3) ...

#end

Exemple

#while (defined(MyFile1))

#read (MyFile1,Var1,Var2,Var3,Var4)

#write (MyFile2,Var1," ",Var2," ",Var3," ",Var4)

#end

#fclose MonFichier

(59)

Les tableaux

• #declare V1 = <1,8.5,0.0>

• #declare X1 = V1.x;

• sphere {0,1} //= sphere {<0,0,0>,1}

• #declare MonTableau = array[10]

• #declare MonTableau [5] = pigment{White}

• #declare MonTableau = array[4][5]

– maximum de 5 dimensions

• Tous les éléments sont de même type, celui de la

première initialisation

(60)

• #declare couleur = array[5] = {Blue, Yellow,Black, Green, Red}

• #declare Chiffres = array[4][10] { {7,6,7,0,2,1,6,5,5,0}, {1,2,3,4,5,6,7,8,9,0},

{0,9,8,7,6,5,4,3,2,1}, {1,1,2,2,3,3,4,4,5,5}

}

• dimensions(couleur) donne 1

• dimensions(Chiffres) donne 2

(61)

Quelques fonctions

abs(A) acos(A) acosh(A) asin(A) asinh(A) atan2(A,B) (angle en radians) atan(A) tanh(A) sin(A) cos(A) A en radians cosh(A)

sqrt(A)

degrees(A) Convertit de radians en degrés...

ceil(A) plus petit entier > A.

floor(A) entier le plus grand < A.

div(A,B) division entière de A par B.

exp(A). int(A) log(A) max(A,B,...) min(A,B,...) mod(A, B) A modulo B. pow(A,B) rand(I) nombre aléatoire entre 0.0 et 1.0 inclus.

seed(I) Initialise le tirage aléatoire

#declare R1 = seed(0);

#declare R2 = seed(12345);

sphere { <rand(R1), rand(R1), rand(R1)>, rand(R2) }

Références

Documents relatifs

h Bei den für diesen Bericht verwendeten Daten aus der Datenbank „Gesundheit für alle“ handelt es sich um Schätzungen (auf der Grundlage der Methode der Gesundheitskonten) und

En raison du choix de ne pas répéter les cibles et indicateurs existants, le cadre de suivi de Santé 2020 n’englobe pas la totalité des domaines de santé publique intéressant

D´ emontrer que f est born´ ee, continue et d´ erivable

[r]

[r]

La solution y associ´ee est

La d´ erivabilit´ e sur R de l’argument sinus hyperbolique implique alors par produit puis composition celle de

En d´ eduire un intervalle de confiance asymptotique de niveau de confiance 95% pour le nombre de clients se connectant au serveur pour une dur´ ee inf´ erieure ` a 15 minutes