OPENGL - EFFET D'EFFRITEMENT 3D

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 12 oct. 2004 à 17:56
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 29 oct. 2004 à 21:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26750-opengl-effet-d-effritement-3d

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
29 oct. 2004 à 21:15
très bel effet !!!
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
16 oct. 2004 à 18:48
ok, super merci
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
16 oct. 2004 à 16:50
Pour modifier une texture en OpenGL, tu peux aller voir l'effet de Vortex ( http://www.cppfrance.com/codes/VORTEX_OPENGL_DEVCPP/26532.aspx ).

Tu lis ton image de départ et tu la stockes dans un format à toi (RGB, RGBA / int ou unsigned int), le tout dans un tableau (de taille 65000 pour du 256*256).

Ensuite, tu appliques les modifications sur ton tableau et tu utilises glTexImage2D () pour appliquée la texture modifiée. En faisant ca à chaque fois, ta texture est animée.
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
16 oct. 2004 à 14:41
ok, mais je ne compte pas utiliser une précision de 1 pixel pour l'effet que je cherche à mettre au point. Néanmoins, si tu sais me dire comment lire les données d'une texture opengl ainsi que d'en écrire sur une autre, ça me serais fort utile. J'ai trouvé quelques pistes, mais elles n'expliquent pas assez les différentes manières d'utiliser les fonctions d'écriture et de lecture de groupes de pixels...
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
16 oct. 2004 à 08:20
ca rame surement, parceque , il faut:
1) desactiver tout ce qui n'est pas utile pour cette effet, je te conseil donc avant de faire des gldisable() de tout et enable que ce dont tu as beoin. ensuite verifier certain parametre daffichage.

2) si 1 point = 1pixel, il fo pas faire un polygone de 4 sommets pour chaque particule (2 triangles), mais affiché un point pour lequel tu affectes la couleur par glcolor3f() ou 4f() si tu veux blender. de plus penser a mettre la taille du point en 1 pixel. je peux pas te donner d'indication, car je me rapelle plus de memoire les fonctions opengl.

3) si 1 point = 1 pixel, il faut aussi ne pas afficher de texture puisque tu passe la couleur du pixel par glcolorxf()

voila, normalment, apres c'est 3 conseils, tu devrais avoir un affichage bp plus rapide. et il se peut meme qu ce soit plus rapide en 1pixel que en 2 ou en 4, vu que tu ne gere pas de polygone et de texture.
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
16 oct. 2004 à 00:39
C'est beau touplein, mais 65000 particules, ca rame sur une machine modeste, même en modifiant le "1" par "2" ou "4" (si on met plus, ca fait moche).

En tout cas, pour un premier code en C++, chapeau.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 oct. 2004 à 18:56
à mon avis, si tu veux communiquer directement avec la CG tu devras apprendre les shaders (j'espère ne pas me tromper de terme), càd la programmation en une sorte de lg de script qui indique directement au GPU ce qu'il doit faire.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
15 oct. 2004 à 15:27
certaine gforce gere les particules directement en programmation graphique. je peux pas t'en dire plus ma carte le gere pas donc jai jamais pu essayer.
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
15 oct. 2004 à 00:21
oui, c'est ce que je pensais faire, mais j'espère trouver un moyen pour que ce soit la carte graphique qui s'en charge
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
14 oct. 2004 à 16:54
dans la catégorie artisanale, tu peux tout simplement charger les tableaux de pixels de tes deux images et leur appliquer tous les algos que tu veux, et enfin envoyer l'image créée dynamiquement à OpenGL comme texture. bien entendu, leus deux originales tu les effaces ^^
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
13 oct. 2004 à 23:30
oui, c'est intéressant si les particules correpondent à 1 pixel de l'image, dans les autres cas, cela risque de prendre trop de ressources s'il faut vérifier tous les pixels d'une particule.

sinon, j'essaie de trouver le moyen de "fusionner" deux textures en une tout en ayant la possibilité d'appliquer un "mode" de fusion (alpha, luminance...)
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
13 oct. 2004 à 21:29
oué, deja tu peux alleger en ne transformant en particule que les pixels != couleur (noir dans ce cas la, c'est une une couleur de masque si on peut dire).

je tient a signaler que jai pas regarder ton source, mais comme tu me dit que ya 65536 particules ca veut dire que t'as transformé toute l'image
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
13 oct. 2004 à 12:16
avec cette image (256 * 256) et avec des particules de taille "1", on obtient 65.536 particules !

pour l'algo, je ne compte pas vraiment implémenter un système complexe, comme je l'ai dit j'ai déjà une idée du résultat que je souhaite obtenir, et un algo de ce type alourdirait les calculs à effectuer.
Sinon c'est toujours intéressant, je vais essayer de voir comment je peux l'utiliser. tkx !
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
13 oct. 2004 à 00:14
l'idee existait deja sur une source delphi ou le mec fesait pareil mais aves des particules dessiné en software. jai vu ca ya 3 ans. mais c bien quand meme, avec ton image tu as combien de particules max? tu devrais implementer un moteur physique de base (ch du coté de Euler) c assez simple est ca permet de faire deja pas mal de chose en jouant avec differente force.
je te passe un source de mon cpp de l'epoque pour te faire une idee de l'algo. debrouille toi pour le comprendre. avec ce type d'algo,n tu peux refaire la neige, la pluie, le feu, la mise en orbite, un asteroide, un lancé de projectile avec ou sans vent, une galaxie de particule, ...

void Syn_PhysicalSystem::Euler(Syn_Vector *Position,Syn_Vector *Velocity,float Masse,double frametime) {

Syn_Vector f(0,-0.9,0),a;

/* partie en delphi a refaire en cpp qui listait toutes les forces attribué au systeme de particule et les additioner dans un vecteur f
if StrengthList <> nil then
begin
for i := 0 to (StrengthList.Count -1) do
f.p_add(syn_strength(StrengthList.items[i]).Getstrength(Position,velocity,Masse,t));
end;
*/

a = f / Masse;
a *= frametime;
(*Velocity) += a;
a = (*Velocity) * frametime;
(*Position) += a;
}
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
12 oct. 2004 à 20:14
non l'idée est venue naturellement, en fait c'est une première étape pour un autre effet plus complexe. Je ne pensais pas à réaliser cet effet en codant cette source... mais il m'a semblé chouette pour un premier aperçu.

Je pense que je vais devoir revoir à la baisse le nombre de particules, tout le monde ne possède pas de telles configurations.

Si tu as des idées d'amélioration concernant le code, n'hésite pas à m'en faire part, ça m'aiderait beaucoup.

Sinon, merci pour le commentaire ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 oct. 2004 à 17:56
j'aime bcp ton effet, 9/10.

j'ai 47 FPS sur un P4 2.26 avec une GeForce3 Ti200, 768 DDR.

c'est très chouette d'avoir pensé à diviser la texture en plein de sous carrés, ça rend très bien l'effet; c'est une idée de toi où tu l'as lue? si c'est une idée qui te vient d'ailleurs (^^), j'aimerais savoir où plus précisément que les 2 liens, ça m'intéresse. merci !
Rejoignez-nous