salut,
je voudrais crée une systeme de particle de feu qui me permette de gerer du feu, quelqu'un peu m'aider svp!!?
salut,
je voudrais crée une systeme de particle de feu qui me permette de gerer du feu, quelqu'un peu m'aider svp!!?
[troll]mais oui bien sur tu prend une allumette et c'est parti pour un effet de particules de folie [/troll]
on pourrait avoir juste un peut plus d'info sur ton niveau et autre, genre qu'est ce que tu connait en terme de moteurs de particules, de prog openGL et tout le tintouin...
sinon un tres bon site avec un tutoe sur les moteurs de particules (et en francais ) http://glinfrench.apinc.org/
euh mon niveau est plutot debutant sans l'etre totalement, je suis en 2eme année d'iut info et je recherche à realiser un systeme de particule de feu avec si possible glut.
dans un premier temps, il faudrais que je genere des particule de bas en haut et dans un deuxieme temps avec interpolation trilinéaire que je puisse faire bouger le tout de facon aléatoire de maniere à crée un effet "réaliste" lol en facon de parler :p
interpolation trilineaire ??? faudra m'expliquer ce que c'est car la je seche... tu veut peut etre parler de 3 interpolation linaire ? une sur chaque composante d'un vecteur...
sinon un effet de feu basique est tres facil a crée, il suffit de crée des particules dans une zone donnée, de leur donner une vitesse vers le haut et de leur donner une couleur rouge (plus un peut de vert et de bleu pour l'addition...) au depart et noir a la fin. Tu passe en blending additif et tu affiche le tout... facile etant donnée que tu n'a même pas a trier tes particule en fonction de la distance vu que ca utilise du blending additif...
Imagine :
une matrice 3D de valeurs. On peut considérer que ce sont des valeurs associées à des points V 3D alignés sur une grille 3D régulière
On peut calculer une valeur Vxyz en un point quelconque (x,y,z) qui ne soit pas un des points de la grille 3D, par interpolation trilinéaire des valeurs des 8 points de la grille qui l'entourent :
Vxyz = V000.(1 - a).(1 - b).(1 - c) +
V100. a .(1 - b).(1 - c) +
V010.(1 - a). b .(1 - c) +
V001.(1 - a).(1 - b). c +
V101. a .(1 - b). c +
V011.(1 - a). b . c +
V110. a . b .(1 - c) +
V111. a . b . c
Où a,b,c sont les parties décimales de x,y,z. Donc a,b,c sont compris entre 0 et 1. On suppose que les 8 points voisins sont alignés sur une grille régulière espacée d'une unité.
voila pour l'interpolation trilinéaire lol.
sinon dans un premier temps, je voudrais bien savoir comment faire deplacer une particule de bas en haut lol et en generer plusieur grace à une liste.
mais bon je sais pas si c la meilleur solution et surtout comment m'y prendre
generalement l'interpolation n'est pas utilisée pour des matrice en 3D mais uniquement pour des vecteurs (apres on peut voir une matrice comme un vecteur de vecteurs
sinon pour le deplacement des particules c'est de la cinematique de base (niveau 1ere S...) c'est vraiment tres simple...
ta particule a une position dans l'espace (un vecteur 3D) et une direction (aussi un vecteur 3D) pour notre fau ce vecteur de direction sera (0,1,0) donc pointant vers le haut. en fait ce vecteur definit le deplacement de la particule chaque seconde.
apres a chaque image, tu calcule le temps ecoulé (elapsedTime) depuis l'image precedente puis tu ajoute le vecteur de deplacement pondéré par le temps ecoulé a la position... en gros ca donne un truc du genre :
voila avec ca tu devrait pouvoir commencer a faire des effets de particules basique. pour des effets plus complexes il faut vraiment avoir une structure adaptée... en ce moment je suis justement en train de bosser sur un moteur de particules ouvert, si tu veut je peut te l'envoyer par mail (pas aujourd'hui par contre )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int previousTime; void display() { // fonction appelé a chaque affichage // ici on utilise glut int time = glutGet(GLUT_ELAPSED_TIME); float elapsedTime = (time - previousTime) * 0.001; // on multiplie par 0.001 pour passer d'une valeur en millisecondes en secondes. // on considere la position codée sur un float[3] particule.position[0] = particule.direction[0] * elapsedTime; particule.position[1] = particule.direction[1] * elapsedTime; particule.position[2] = particule.direction[2] * elapsedTime; // apres on peut faire la même chose avec la couleur, la rotation et autre... }
je pas si ca te conviendera mais dans ce jeu :
http://tomatoes.sourceforge.net/
y a un moteur de particules extrement simple avec un code tres clair , il est pas super evolué mais c bien pour debuter
Perso, je suis parti de là :
http://nehe.gamedev.net/data/lessons....asp?lesson=19
puis des exemples sur ce site http://www.codesampler.com/oglsrc.htm
Et après j'ai bidouillé...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager