10.03.2014 Views

IN Synthèse d'Images Rendu - IUT d'Arles

IN Synthèse d'Images Rendu - IUT d'Arles

IN Synthèse d'Images Rendu - IUT d'Arles

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

7. Ecrire une méthode affiche() de la classe Feu qui affichera l’ensemble des étincelles de<br />

la liste :<br />

void Feu::affiche();<br />

8. Les étincelles apparaissent comme plates si on regarde de côté les quadrilatères qui les<br />

forment. Une solution est d’utiliser le principe de « billboarding », qui consiste à toujours<br />

orienter le quadrilatère face à l’observateur.<br />

Pour afficher en billboarding un quadrilatère de dimensions (largeur x hauteur) et centré<br />

autour de (xpos, ypos, zpos), on peut procéder comme suit :<br />

// On récupère le positionnement de la camera<br />

float matrice [16];<br />

glGetFloatv( GL_MODELVIEW_MATRIX, matrice );<br />

Vector Haut, Droite;<br />

Droite.x = matrice[0] * (largeur / 2.0f);<br />

Droite.y = matrice[4] * (largeur / 2.0f);<br />

Droite.z = matrice[8] * (largeur / 2.0f);<br />

Haut.x = matrice[1] * (hauteur / 2.0f);<br />

Haut.y = matrice[5] * (hauteur / 2.0f);<br />

Haut.z = matrice[9] * (hauteur / 2.0f);<br />

Vector A, B, C, D;<br />

// On calcule la position des 4 sommets du quadrilatère<br />

A.x = xpos + Haut.x - Droite.x;<br />

A.y = ypos + Haut.y - Droite.y;<br />

A.z = zpos + Haut.z - Droite.z;<br />

B.x = xpos + Haut.x + Droite.x;<br />

B.y = ypos + Haut.y + Droite.y;<br />

B.z = zpos + Haut.z + Droite.z;<br />

C.x = xpos - Haut.x + Droite.x;<br />

C.y = ypos - Haut.y + Droite.y;<br />

C.z = zpos - Haut.z + Droite.z;<br />

D.x = xpos - Haut.x - Droite.x;<br />

D.y = ypos - Haut.y - Droite.y;<br />

D.z = zpos - Haut.z - Droite.z;<br />

// Affichage du billboard<br />

glBegin(GL_QUADS);<br />

glVertex3f(D.x,D.y,D.z);<br />

glVertex3f(C.x,C.y,C.z);<br />

glVertex3f(B.x,B.y,B.z);<br />

glVertex3f(A.x,A.y,A.z);<br />

glEnd();<br />

4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!