VORTEX [OPENGL DEVCPP]

BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005 - 2 oct. 2004 à 16:10
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005 - 10 oct. 2004 à 17:09
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/26532-vortex-opengl-devcpp

BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
10 oct. 2004 à 17:09
Merci :)

J'ai mis la toute dernière version vendredi soir. Il y a même deux versions. Dites moi si ca semble ramer chez vous ou pas.

Et pour celles et ceux qui ont d'autres méthodes plus efficaces pour afficher un vortex, je suis preneur :)
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
9 oct. 2004 à 21:25
très jolie !!!
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
8 oct. 2004 à 22:37
Bon, merci pour toutes ces explications.

Pour la nouvelle version (dispo très bientôt) :
J'ai utilisé glTexImage2D comme avant. J'ai juste retiré la fonction glGenTextures qui bouffe toute la mémoire. Là le prog doit prendre 10 Mo en mémoire.

Impossible de jouer sur les UV, car il y a des pb de raccords entre les textures. Je mettrais quand même les sources, et le "hack" que j'ai fait pour estomper le problème.

Sinon, j'utilise la matrice de la texture, mais on doit ensuite la remettre en mémoire avec glTexImage2D.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
5 oct. 2004 à 19:22
pour bp oui,, mais tous code ecrit bouffe forcement du fps, c logique!!!
mais certaine plus que dautre
comme glbindtexture(),glbegin(), glrotate(),...

fait un tour sur le site ti verra ya un forum avec bp de personne qui sont pret a taider!!!!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 oct. 2004 à 17:25
oki, en fait c pas à cause de glTexImage2D, c'est vrai pr toutes les fcts OpenGL.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
5 oct. 2004 à 10:17
si vous avez besoin d'aide sur opengl je vous invite a vous inscrires un profil sur www.glinfrench.fr.st
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
5 oct. 2004 à 10:14
justement, parceque ca bouffe du FPS.

mais je tiens a signaler une erreur de ma part ds le post precedent; glbindtexture() c lui qui permet de dire a opengl quel texture utiliser pour ce que l'on doit dessiner, evidement glbindtexture aussi bouffe du fps, et c'ets pour cette raison quil fo autant que possible trier les meshs par texture pour en faire le moins possible.

si on a qu'une seule texture il faut donc faire ca:

chargement de la texture(); //glTexImage2D() inclu
designeraopengllatextureaappliquer(); //glbindtexture();

boucle:
affiche mon ou mes mesh(); //qui utilise cette texture
fin boucle

on delete tout();


---------- si on a plusieurs textures le shema ideal (dans le cas ou on a une seule texture par type de mesh) -------
chargement des meshs(); //ca depend de vous ca!!!
chargement des textures(); //glTexImage2D() inclu


// jai detaillé la boucle sans optimisation structurelle
boucle:
designeraopengllatextureaappliquer(); //glbindtexture();
afficher les meshs qui ont cette texture();
designeraopengllatextureaappliquer(); //glbindtexture();
afficher les meshs qui ont cette texture();
...
fin boucle

on delete tout();
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
4 oct. 2004 à 21:59
"il fo savoir que glTexImage2D ne doit pas etre utilisé dans une boucle sauf si:..."


tu l'affirmes. je suppose que c'est vrai. mais moi j'ai besoin d'être convaincu, il faut qu'on m'explique pourquoi c'est comme ça, ça me permet de bcp mieux retenir, et puis aussi d'extrapoler dans des situations apparentées.

si tu sais pq, je te demande juste de l'expliquer. merci ;)
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
4 oct. 2004 à 21:56
pourquoi quoi?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
4 oct. 2004 à 17:34
pourquoi ?
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
4 oct. 2004 à 11:02
heu, il fo savoir que glTexImage2D ne doit pas etre utilisé dans une boucle sauf si:

-il y a plusieurs textures à afficher, et dans ce cas il existe quelques methodes d'optimisation en triant par texture les meshs.

- si on fait une texture procedurale

voila je repond à la question de Kirua
et pour Belzel, pourquoi tu n'utilises pas la matrice de la texture à la place?
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
4 oct. 2004 à 11:02
heu, il fo savoir que glTexImage2D ne doit pas etre utilisé dans une boucle sauf si:

-il y a plusieurs textures à afficher, et dans ce cas il existe quelques methodes d'optimisation en triant par texture les meshs.

- si on fait une texture procedurale

voila je repond à la question de Kirua
et pour Belzel, pourquoi tu n'utilises pas la matrice de la texture à la place?
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
3 oct. 2004 à 19:14
glDeleteTextures( nb, *id );
-> pour détruire une ou plusieurs textures... ;)
Sympa sinon ^^
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
3 oct. 2004 à 17:09
Bcp plus de problèmes que je ne le pensais ;-)

Kirua : effectivement, ca ne change rien, peut être même que c'est #define hypot(x,y) sqrt(x*x+y*y). Je plaisante :) Le pb de vitesse est dû uniquement aux 256*256 calculs à réaliser. Mais c'est bizarre que ca rame chez toi, je regarderais cette semaine sur mon PC de compet'.

Kleidp : Effectivement, il y a apparemment un gros pb de mémoire en recréant à chaque fois une nouvelle texture. C'était la première idée qui m'ait venu à l'esprit.

Je sais comment créer une texture (gluBuild... ou glTexImage...) mais pas moyen de supprimer cette texture de la mémoire (sauf en quittant le prog) ! J'ai rien trouvé dans la doc. Donc cette méthode est à proscrire.

Je vais modifier le programme en conséquence. Je vais jouer sur les UV (ce sont les coordonnées des textures, et non la texture elle-même, fonction glTexCoord2f), pour faire une sorte de morphing. Ca me permettra de ne pas faire 256*256 calculs, mais de le faire sur un quadrillage de l'ordre de 10*10 ou 100*100 (selon la qualité que l'on veut).

Pour le fading sur les côtés, je peux jouer sur la couleur des Vertex (fontion glColor3f).

Le seul soucis, c'est qu'il y aura plus de polygones à afficher (10*10 ou 100*100). J'ai essayé avec 256*256 points et ca marche. On ne pourra pas afficher la texture sur un SEUL polygone.

Si j'arrive à faire ce que je souhaite (ce qui n'est pas gagné), on peut multiplier les FPS par 5. Je ferais ca pendant la semaine, donc si ca vous intéresse, revenez samedi prochain ;)
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
3 oct. 2004 à 13:56
Belle convertion :)

Par contre j'ai trouvé un bug qui fait ramer :
le programme augmente constament en mémoire, peut être parce que tu recréer une texture à chaque frame.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
3 oct. 2004 à 12:12
"(float)sqrt( x*x + y*y )"

il y a une fonction dans cmath qui fait ça: hypot(x, y);

http://www.sthoward.com/docs/libm_22.html

ça ne change ... rien? mais voili voilou ^^
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
3 oct. 2004 à 12:07
ça donne en effet assez bien, par contre ça rame un brin, alors que j'ai recompilé avec "glTexImage2D". quoiqu'en effet, ça rame moins dans ce cas. et qd je dis que ça rame: nVidia GeForce3 Ti200, P4 2.26, 768Mo de DDR, alors bon quoi :p

en fait, je me demande si c'est un bon choix que recréer une texture à chaque frame. est-ce que c'est pas possible de juste appliquer des déformations à la texture? j'en sais trop rien à vrai dire ^^
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
2 oct. 2004 à 23:12
Merci

Note pour moi-même :
J'ai recréé une texture pour chaque nouvel affichage.
-> Conserver la texture pour chq nouvel affichage mais jouer plutôt sur les UV.
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
2 oct. 2004 à 22:02
sympa !
BeLZeL Messages postés 110 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 20 décembre 2005
2 oct. 2004 à 16:10
On double les perfs en remplacant

gluBuild2DMipmaps ( GL_TEXTURE_2D, GL_RGB, 256, 256, GL_RGB, GL_UNSIGNED_BYTE, texture);

par

glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, texture);

On peut également améliorer les perfs en diminuant le nombre de traitements. Ici, texture de 256*256, donc forcément ca prend du temps pour les calculs.
Rejoignez-nous