PARTICLE ENGINE 2D OPENGL DEV-C++ - EFFETS DE FEU ETC [ MOTEUR DE PARTICULES ]

BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009 - 14 juin 2004 à 23:39
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 1 sept. 2005 à 19:44
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/23693-particle-engine-2d-opengl-dev-c-effets-de-feu-etc-moteur-de-particules

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
1 sept. 2005 à 19:44
Mise à jour pour conformance avec le standard. Voir commentaire de la mise à jour.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 16:41
finalement je reviens sur static_cast qui convient pour les types de base, mais pas de pointeur
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 23:41
okey

merci bcp pr la petite discu ;)
je vais me coucher
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 23:34
ouai j'ai bien fais de me renseigné sur le coup

pour repprendre :

oubli le static_cast, ca permet uniquement de de verifier la plausibilité pour deux types de la meme hierarchie de classe

dynamic_cast fais de meme mais dynamiquement lorsque la veridication statique n'est pas possible (pointeur) ==> controle retour necessaire

reinterpret_cast, equivalent au cast c

l'interet par exemple du reinterpret_cast, c'est (en plus de faire partie du langage) de pouvoir etre retrouvé facilement dans le source (contrairement aux cast c (Type) )


donc dans ton cas il est conseillé d'utiliser un reinterpret_cast
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 23:26
d'ailleur en reflechissant je me suis trompé car ce n'est pas non plus possible pour le static_cast :)
En fait il ne fais que la verification statique (on appel ca le downcast)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 23:19
int i = int(f); // oui, appel du constructeur

tout les types sont des objets en c++

"alors on a bien qu'effectuer un cast demande une conversion au run-time, c'est logique."

non, tu demandes un transtypage, il ne pourra se faire qu'au cour de l'execution, vu qu'il ne connais pas la valeur de la variable

meme float n = 1; genere un cast en c (pas en c++)

l'absence de controle static, c'est tout ce pourquoi le c peu compiler un programme qui plante lamentablement à l'execution (declaration implicite, nombres d'arguments variables, indirections,... )
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 23:02
hmm, c'est vrai qu'en fait l'écriture le suggérait pour les cast. je les écris souvent comme ça:

float f = ...;
int i = int(f);

parce que je trouve ça plus clair: ça fait référence à un constructeur du type d'objet int pour importer un float. si l'analogie est complète, alors on a bien qu'effectuer un cast demande une conversion au run-time, c'est logique.


qu'est-ce que tu appelles l'absence de contrôles statiques ?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 22:58
pas de probleme, et t'inquitte pas j'avais remarqué ;)

pour les cast, oui la conversion se fais au cours de l'execution, pour certains types de bases le processeur possede meme l'instruction (int -> float par exemple)

et puis c'est connu, la faiblesse du c c'est l'absence de controles statiques
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 22:48
vouï, la méthode d'initialisation hors du corps des constructeurs, je les utilise aussi depuis un moment, mais plus parce que je trouve ça plutôt joli ... je savais pas que c'était plus rapide.

pour les const est, je les utilise à outrance depuis un certain temps. qd j'ai écrit ce code-ci, je n'avais pas encore tt à fait conscience de l'importance que ça avait: mtnt c'est chose faite ;)

les tableaux statiques c'est génial pour les concours d'algo (c'est super rapide), pour le reste, je préfère perdre un peu de temps et avoir une allocation vraiment propre. mais je suis bien conscient que c'est lent, aussi je m'arrange tt le tps pr minimiser le nombre d'appels à ces fonctions.

tu veux dire que les cast c-like ne sont pas effectués à la compilation? je ne vois pas qd il peut le faire sans ça ... enfin, va pour les static_cast, même si je trouve ça profondément ... moche et lourd :D

je comprends ce que tu veux dire pr les cas où il n'y a qu'une seule texture, mais un moteur c'est qd même sensé se plugger dans une carrosserie ;) mais je note que c'est couteux, je n'imaginais pas... je pensais que ça changeait juste un int dans la mémoire quoi... c'est pas le cas apparament ^^



merci bcp pr ces détails. tu auras remarqué que bcp de choses que tu as énoncées, je les ai acquises depuis lors; c'est rassurant: ça veut dire que j'ai un peu évolué ^^
pour le reste, j'essayerai de m'y attacher et de m'y contraindre (juste ton histoire de cast qui m'embête :p).

je continue mtnt ma lecture du tuto que tu linkais plus haut.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 21:25
pour les constructeurs de tes objets, pense à initialiser les membres sytematiquement à leur construction, pour eviter les copies inutiles

par exemple

struct SRVB
{
float R,V,B;
SRVB() : R(0), V(0), B(0) {}
SRVB(float r, float v, float b): R(r), V(v), B(b) {}
};

fais toujours comme ca, c'est pareil et c'est plus rapide, surtout sur les objets autres que les types de bases (ou l'appel du constructeur par copie est tres penalisant)

abuse aussi tant que possible de const, private & co, de methodes static egalement quand c'est possible (mais ca j'ai vu que tu le faisais deja ;) )

prefere les tableaux statique aux zones allouée (d'une maniere generale)

pour les cast (transtypage), pour les types de bases, prefere l'operateur static_cast, qui en plus d'etre plus propre en c++ (que les c-style cast), sera resolu statiquement, c'est à dire à la compilation

p[0] = static_cast<char>(color);



pour les commandes opengl :

c'est une machine etat, donc si tu fais un glEnable( truc ); à l'initialisation, t'aura plus besoins de le faire au cour de l'execution, sauf si pendant le rendu tu dois desactiver ce truc, dans ce cas tu as pas le chois, mais travail le design de la partie rendu de facon a ne desactiver/reactiver qu'une seul fois par rendu

pour le glBinTexture c'est pareil, et surtout la c'est couteux, ca permet juste de dire à opengl quel est l'id de la texture courante, donc si tu utilise qu'une seule texture (qu'un seul id), un seul glbindTexture suffit (au debut, apres le glGenTextures)

pour les glTexParameteri et autres appliqua de texture, c'est encore mieux, tant que tu changes pas, tu le fais une fois pour la textures selectionnée et c'est bon
utilise aussi les filtres (GL_LINEAR = bilinear filtering), ca engendre aucune pertes, la cg gere ca en pur hardware, et pour ma part, j'ai deja observer que GL_NEAREST est meme legerement moins performant


donc en gros, le maximum de commandes à l'initialisation pour un minimum de commandes au cours du rendu :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 20:35
merci pour le lien et les explications, je vais lire ça dès ce soir.

bye !
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 20:20
les vertex buffers ce sont des tableaux de vertexs (de points 3d ), le fait de gerer les vertex par paquet permet pas mal d'optimisation, par exemple au niveau du transfer par le pont agp, mais surtout c'est comme ca que la carte graphique traite les points (acces sequentiel), ils peuvent etre compilés (non modifiable, ca permet sans doute de les laisser dans les caches du gpu?) mais ca reste tres souple (machine etat)

pour les index j'ai lu je sais plus ou que pour la cartes graphique, un tableau de points ca devais etre sous la forme d'un dico (d'abord les différents points, puis leur arrangement sequentiel)

comme seul article francais j'ai trouvé celui de prografix

http://prografix.games-creators.org/document/122

ca reste minimal, mais c'est deja un bon debut, surtout que ca te permettra d'adapter le design de ton code dans cette voie

pour voir ca en profondeur, doit y avoir de bon tutos sur les site gamedev (anglophone)


regarde les sources de q2/q3, je sais pas si j'avais bien chercher mais ils me semble pas avoir vu un seul glvertex !


je suis d'accord avec toi, y a rien de plus enervant que de tomber dans le pieges des extension et de se retrouver avec un programmes qui ne fonctionne qu'avec les dernieres cartes graphiques, mais c'est pas le cas de toutes les extensions, beaucoup sont aujourd'hui acquis pour la majorité des carte graphiques (comme le multi texturing et au moins 2 unités de rendu par gpu)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 19:38
euh, c'est rassurant que mon prog ne rame pas sur les ordinateurs de la NSA, mdr :p merci pr la remarque, mais ça ne m'excuse malheureusement pas ^^
pyroflo Messages postés 323 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 17 mai 2005
20 oct. 2004 à 19:33
Désolé, il faut lire 1,3Go DDR pour la mémoire vive.

Bon courage pour la suite ;-)
pyroflo Messages postés 323 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 17 mai 2005
20 oct. 2004 à 19:32
Simplement pour signaler que chez moi ça ne râme pas du tout.

PIV 2.8Ghz
1,3 DDR
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 19:26
Arnaud << non, c'est quoi PainKiller? Quant au zip, il y a plusieurs exe normallement, parce que j'avais voulu illustrer plusieurs effets possibles (en déplaçant par exemple le lieu géométrique, ou bien en le modifiant, etc...). Ça me faisait des boules de feu projetées, des trainées de feu etc... c'est ça que tu devras avoir. Par contre pr le ramage... (c'est ds le dico, sisi :p:p) beeeeeh, faudra que je lui joue un sort oui... pas mtnt quoi ^^

djl << si il y a bien un truc que je ne fais pas, c'est optimiser en OpenGL :p:p j'ai déjà franchement du mal à comprendre comment ça marche simplement, alors plus loin je me lance pas encore ;) Cependant, tout ce qui appartient à la liste des réflexes simples, si je les apprends, je les utiliserai parce que je me poserai plus la question, donc balance tt ce que tu peux ;)

j'utilise en effet les glvertex... c'est quoi des vertesx buffer? et est-ce que si j'utilise des display lists ça sera encore nécessaire?

les extensions, c'est même pas la peine ;) je suis contre parce que ça tue dans l'oeuf la portabilité (au sens distribuabilité plutôt).
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 oct. 2004 à 18:29
kirua > a propos de la vitesse en opengl, d'abord ya le fait de minimiser le nombres de commandes opengl (ca je suppose que tu le fais), apres il faut penser carte graphique

donc si tu dessines à coup de glvertex, la ca casse tout
faudrais passer par des vertex buffer avec des tables d'index, je sais pas comment ca marche en opengl mais ca passe par les extensions

d'une manieres générale quand on veut faire du serieux en opengl, on doit passer par les extensions, et ca je trouve que c'est un gros defauts par rapport a dx, ou au moins tu es sur de n'avoir aucun probleme si la carte est compatible avec la version de dx que tu utilise
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 oct. 2004 à 16:58
nan c'est bon, l'orthographe ca va... :D
Mais tu sais je disais ca en rigolant; de toute facon moi je vais en faire un (moteur de particules) incessamment pour Sniper.
Ya un bout de tps une source la-dessus avait été postée par..euh ben je sé plus en plus je l'ai jetée :( mais qques recherches et ca sera bon
Tu as PainKiller? réponds moi ca m'intéresse (si,si)
Et ,enfin,je te dirais que je me serais douté, sans que tu me le dises, que tu n'as pas de classe camera dans un jeu 2d :))

Suis en train de télécharger la src...les 140Ko, sur le T1 du lycée, je les avait pas vu passer ;) pourquoi le screenshot ne correspond pas aux progs?
En tout cas, ca rame meme sur mon PC (1.4GHz), c'est dire...
++
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
20 oct. 2004 à 16:10
pour la 3D, j'y ai pensé mais je vois au moins un souci: si je ne veux pas faire des particules en 3D (donc: placées dans l'espace R3, mais les particules elles-même n'étant que des carrés texturés, plats, pour éviter trop de calculs), je dois à tout moment connaître le vecteur orientation de la caméra, pour bien positionner les rectangles faces à l'écran.

Si j'ai le vecteur, c'est juste un peu de géométrie analytique / vectorielle, je pense que ça ira aisément, mais il me faut ce vecteur ... et ça j'ai pas ^^

(bon, en même temps, je travaille le plus souvent en 2D, à cause de mon RPG, donc forcément je n'ai jamais réellement réfléchi à une classe Caméra. J'imagine que si j'en écrivais une bien fichue, elle permettrais de récupérer ce vecteur crucial)


Pour la lenteur, suis bien d'accord avec toi que c'est pas glorieux.... j'imagine qu'il serait bien senti de créer une display list pour les particules. (en fait, ça devrait accélérer monstrueusement, ^^)


Je vais profiter du message pour rajouter quelques petites choses (je mets au pluriel, on verra si je dis plusieurs choses ^^)

- J'avais initialement désiré coder l'Engine de sorte que l'origine du repère Ecran soti en bas à gauche, et que dès lors l'axe Y monte au lieu de descendre, ce que je pensais être habituel (car j'avais tjs vu ça, et j'utilise ça pr mon rpg justement). J'ai appris plus tard, lors d'un concours de Coder-Studio.com (puub ^^) que sous OpenGL, en 2D, bcp de gens demandent à OpenGL directement d'avoir un repère avec origine en bas à gauche... du coup mon système inversait ça aussi, et c'est profondément idiot, d'autant plus que si on code un jeu on connaît les coordonnées écran des sprites etc... et on ne devrait pas avoir besoin d'inverser les coordonnées verticales pour retomber sur la correspondance avec l'autre repère! Ce que je veux dire en définitive, c'est qu'il faudrait que je récrive une partie du code de sorte que le système d'axes pris en compte soit celui du programme hôte. De cette façon, des gens intéressés (et moi le premier ^^) pourront l'implémenter selon leur bonne volonté dans leur programme.

- autre chose: mais c'est bourré de fautes ma description! lol, je vais en corriger qq unes (= je vais en oublier, dc je ne prétend pas tt corriger :p)
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
20 oct. 2004 à 09:15
bizarre...Kirua se met encore en débutant?

PS:l'ordi du lycée rame un peu..genre...10FPS?!!pour un petit truc comme ca, doit y avoir un sacré nbre de particule.

Bon, maintenant tu nous fait la meme chose en 3D, comme dans painkiller (^^)
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
13 sept. 2004 à 01:08
merçi pour ta réponse,
en effet dans ma petite tête,une texture était toujours associée a un fichier image,voir un fichier vidéo (qui n'est c'est vrai qu'une suite d'images) et non a une formule mathématique.
C'est plus clair maintenant.
J'ai mis aussi 10/10,même si pour l'instant je n'arrive pas a compiler.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 sept. 2004 à 10:56
pour le windows.h, je ne sais pas. de tte manière, la fenêtre Win32 est la seulement pr offrir un support direct à la classe, ça marchera tt aussi bien avec glut, sdl, ...

quant à la texture, il s'agit d'un disque dont les bords sont plus transparents que le centre. comme c'est une forme géométrique simple, il est plus facile (et plus efficace même) de générer la texture grâce à une formule que de stocker la dite formule dans un fichier qu'il faut trimbaler avec la classe! si tu préfères utiliser une étoile complexe, tu peux tt aussi bien attacher une texture bien à toi à la classe, aucun problème.

une texture, c'est simplement (comme une image d'ailleurs) un tableau de données. si tu simules une image en couleurs réelles avec couche alpha, ça te fait 4 octets par pixel. si tu veux générer une texture de 16*16 pixels, ça te fait un tableau de 16*16*4 pixels à allouer, et puis grâce à la formule tu donne la couleur et l'alpha désiré à chaque pixel correspondant à l'image finale dans le tableau. une fois que c'est fait, tu envoies le tableau à OpenGL qui t'en fait une texture.
Zazour Messages postés 120 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 14 janvier 2006
12 sept. 2004 à 10:07
Vraiment super,mais je comprends pas pourquoi tu génère une texture et a partir de quoi.
De plus j'ai toujours un problème avec l'include windows.h
chez moi il ne compile pas directement.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
31 août 2004 à 19:35
tu pourras pas l'utiliser pr le concours wett :p
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
31 août 2004 à 18:12
Problème avec l'utilisation que tu veux en faire : si tu fais un jeu 3D, va falloir que tu mettes la main a la pate ;) parce que son moteur est 2D only... D'ailleurs si t'en fais une version 3D je suis interressé ^^
_Thy_ Messages postés 33 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 19 septembre 2005
24 août 2004 à 14:51
Un peu lent avec les miliers de particules par défaut sur une tnt2, sinon c'est très joli et je vais m'en servir comme un fou sur le jeu que j'écris (course de bagnoles) :
- voitures qui fument
- poussière
et ça c'est que les 2 1ères idées qui me viennent.

bon boulot, TRES UTILE, et sur devcpp, que demander de plus ?
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
5 juil. 2004 à 21:00
ne soit pas si dur c juste parce que j'ecrie vite.
moi je voulait te faire plaisir et la .... oki pas grave
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
5 juil. 2004 à 20:49
c'est Wett, pas Weet, vala... et puis c'est Kirua, pas Kiruan, et c'est Aquanum.
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
5 juil. 2004 à 16:27
he mec je tient a vous informer que coder-studio vient de re ouvrir leur (www.coder-studio.com).ces admin sont (kiruan,funto,weet,aqu..)
see you
pyroflo Messages postés 323 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 17 mai 2005
5 juil. 2004 à 02:03
Je vois que tu ne te reposes toujours pas, très beau résultat, bravo ! :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
27 juin 2004 à 12:31
dis, exagère pas qd même, c'est pelant d'avoir un mail pour lire ça, on est tous très contents que tu te sois bien amusé, maintenant terminé. et c'est pas la peine de répondre "ok".
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
27 juin 2004 à 12:30
dis, exagère pas qd même, c'est pelant d'avoir un mail pour lire ça, on est tous très contents que tu te sois bien amusé, maintenant terminé. et c'est pas la peine de répondre "ok".
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
27 juin 2004 à 00:19
Voila : Je reveind wow quel fete super j'aurait bien aimmer que vous soyait avec moi :)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
26 juin 2004 à 23:27
Heu... Soit.
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
26 juin 2004 à 22:47
Re :
je reviend j'etait partie a une fete et la je vein pour rammener quelque CD lol :

See you
N 105 lol
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
26 juin 2004 à 21:21
Nix passe jamais par là, et puis y a assez de choses à corriger sur les sites pr qu'il commence à s'occuper du boulot des adminsen plus ;)
fin remarque, je dis qu'il passe jamais... c'est surtout parce qu'il est adepte des techno microsoft.
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
26 juin 2004 à 20:32
Ouais là qd même c'est vraiment abusé, si Nix passe par là va y'avoir du grabuge...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
26 juin 2004 à 19:27
ça s'apparente quasiment à du mailbombing tout ça! savez que c'est punissable par la loi ;)
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
26 juin 2004 à 19:21
pfffff flooder va !! ^^ et ben moi, pour continuer ma série des 0 et des 1 je vais mettre le 101 !!!!!!!!!!!!!!
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
26 juin 2004 à 19:16
POUR MOI LE 100e!! Désolé je suis un gamin mais je me lache un peu...
Et non msn n'est pas chiant il suffit d'eviter les contacts un peu boulets... Perso j'ai rarement plus de 10 gars connectés en meme tps! Et (presque) pas de mec lourd :)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
26 juin 2004 à 19:14
Dans www.winmfx.fr.fm j'aime beaucoup le lien vers www.coder-studio.com :) Ca fait plaisir :)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
26 juin 2004 à 19:13
et hop le 98e message... Pour qui le 100e?
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
26 juin 2004 à 17:48
Ca fourmille ici ^_^ ca me rappelle ma premiere source héhé (allez hop une 20aine de commentaires par jour, tu part le week-end et tu te retrouve avec 70 emails :P)

note: discussions de deux grands bavard (et ouééé) Kirua et xarier ;)
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
26 juin 2004 à 17:30
"La sources" avec un "s" ?? ^^
sinon t'm vraiment les couleurs flash ? le BG devient bleu !

J'dois avoué que lorsque tu as sorti ta source, je pensais que www.winmfx.fr.fm était un site professionnel ! en tout cas il est réussi !
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
26 juin 2004 à 17:13
Lol puisque en parle de tout la voila :
dit les mec vous avez vue mon site que j'ai creé hier pour mon prog WinMFX www.winmfx.fr.fm ( un peu de pun )
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
26 juin 2004 à 17:10
ben moi je pense que ........ et puis voilà quoi +1 post ^^
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
26 juin 2004 à 17:06
Ben moi j'ai bien ecrire commenca car c coolll
voila ce forum va devenir le plus visité par le monde des programmeur lol
aller les mec en continu : (pour faire de ce forum le plus visité par cppfrance :) ) HE kIRUA C KOI TON avi
Lol
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
26 juin 2004 à 16:58
mouais ... (idée méchante inside ! petits plissements des yeux, tête de diable ...) c'est interessant comme technique :]

Pour Kirua, j'pense qu'il n'aime pas écrire "com sa" chose fréquente sur les chats ...
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
26 juin 2004 à 16:53
ben moi je la lance est quand quelqu'un me casse la tete je le blog c facile :)

Kirua --> par amour pour la langue française ?
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
26 juin 2004 à 16:48
xarier >> ben c'est quand même lourd MSN (surtout quand on a 53 contacts...) meu bon (non je ne vais quand même pas les bloquer !)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
26 juin 2004 à 16:47
par amour pour la langue française
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
26 juin 2004 à 16:42
DIT Kirua pourquoi tu lance j'ammais ton msn :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
26 juin 2004 à 16:22
je transforme les sources des autres en forums et parfois on me le reproche, alors qd c'est un code source à moi, je me gêne pas ;) j'aime autant avoir une discu libre comme ça, pas forcément en rapport direct avec le code source, puis ça amène souvent à des considérations autres (par exemple, j'ai déjà eu ds un cas similaire une très intéressante conversation sur Microsoft avec un certain Maya de cppfrance, très intéressant).
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
26 juin 2004 à 00:55
Je pense qu'il l'était déjà avant qd même...;)
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
25 juin 2004 à 17:57
alors Kirua est maintenant conu lol
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
25 juin 2004 à 17:52
rien qu'à voir le nombre de commentaires ! "seulement" 86 avec celui-là ! c'est énorme !
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
25 juin 2004 à 17:32
Heuuu c'est pas un forum ici qd meme :)
(J'aime bien jouer les mecs chiants :p surtout que mon post n'a pas plus de rapport avec ta source que le tien ^^)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 juin 2004 à 17:22
ouééééé, amk t'es pas mort :-D tu vas en france alors ette année??
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
25 juin 2004 à 13:33
houlaaa kirua je sens que j'aurai du boulot aprés le bac , notament decortiquer tout ce que t'as fait pendant mon hibernation :d
allez 10/10 !
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
23 juin 2004 à 00:37
meme avi que mon cher ami funto ;-)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 juin 2004 à 00:34
Très joli :)
Mais à part Particule2D_trainee.exe, ça rame bien sur mon PC :'(
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
22 juin 2004 à 15:09
L'histoire de flux, c'est pour eviter un effet que j'ai eu lorsque tu met une mortalité trop faible, tu te retrouve avec 6500 Particules lancées d'un seul coup et puis apres plus rien jusqu'à ce quelle meurent toutes et apres 10 sec à peu près elles sont bien réparties... C'est assez moche au début :) donc en mettant un flux, plutot que de lancer 6500 d'un coup tu en lance par ex 1000 en 1 seconde, mais bien réparties (tu en lance 1000/fps par frame) et là des le debut c'est bien repartit :)
Zouli ton screen :) Je m'occupe des couleurs, mais ce soir je fait un réseau donc si j'ai pas le tps de te le finir ça attendra demain :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 juin 2004 à 14:37
Le zip est à jour, mais sauf erreur il faut mtnt qu'il soit répercuté sur tous les miroirs CS.
Si dans le zip l'exe principal (Particle2D.exe) n'affiche pas la même chose que dans le screenshot de mon commentaire précédent, c'est que vous n'avez pas le nouveau zip. Vous pouvez aussi le voir au code source si vous n'être pas sous win: dans CParticle.h, les deux constructeurs doivent être devenus ceux-ci:

CParticle(float MinMort, float MaxMort);

CParticle(float MinMort, float MaxMort, int AngleMin, int AngleMax, int VMin, int VMax, CVecteur2D Pos);
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 juin 2004 à 14:29
http://nboumal.free.fr/ParticleEngine2DAccelerationRouge.png

- mortalité paramétrable
- accélération paramétrable

on voit en effet l'apparition de lignes sur lesquelles les particules ne passent jamais, c'est embêtant :(

laissez-moi 4 min pr mettre le zip à jour
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 juin 2004 à 13:34
vive la liberté.

le facteur vitesse est à 1.0f par défaut, comme ça, aucun effet. le mettre à plus que 1 accélère la particule (effet contraire aux frottements cinétiques) et le mettre à moins de 1 (mais plus que 0) crée un effet de frottement cinétique justement.

c'est quoi l'histoire de flux? pr la mortalité, je suis bien d'accord qu'il faut la rendre paramétrable. je vais coder l'accélération mtnt, occupe toi des couleurs plutôt ;) tu vas créer une palette 256?

eh, l'effet de facteur vitesse, il est activé depuis le premier post de la source, t'avais pas vu?
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
22 juin 2004 à 13:29
Ouais c'est vrai c'etait idiot de mettre le vecteur acceleration dans CPArticle puisque c'est tjs le meme j'avais pas fait attention... Le mettre dans CParticleEngine suffit puis on update directement à partir de là... Ca se fait aisément ;) Des que j'ai un peu de temps je modifie ça si tu l'as pas fait et je m'occupe de la gestion des couleurs (promis je rajoute que 1 octet par particule, je peux pas faire moins ^^) et de la gestion de flux (qui va permettre un rendu carrément chouette et plus simple d'utilisation dès qu'on gere des particules à longue vie)
Pour le facteur vitesse c'est pas idiot faut voir les resultats... En tout cas le laisser en option!

En tout cas bravo pour tes exams ;) Et content de te voir libre ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 juin 2004 à 13:10
Aaaaah, mes amiiis :-D
j'ai un secret à vous confier ...

<whisper>
je suis en vacances
</whisper>

J'ai passé mon examen de français avec brio ^^ (mention Très Bien), et mtnt je suis libre.

J'ai lu tous tes comments Wett, merci de t'être intéressé à mon code, ça me donne l'impression qu'il était assez propre :p L'idée de l'accélération est bienvenue, c'est d'ailleurs un grand classique des moteurs de particules. Les particules n'ayant pas de masse, je m'étais dit qu'une simulation de gravitation serait une insulte à Newton, mais il est mort: l'effet sur tes screens est franchement chouette! La manière dont tu l'as implémenté ne me satisfait paaaas tout à fait, comme j'ai déjà dit: hors de question de rajouter des propriétés à CParticle, pas de place pour ça. Je préfère de loin donner soit un vecteur Acceleration à CParticleEngine. Le générer aléatoirement entre deux bornes n'est pas une option, puisqu'il faut que le vecteur soit le même pour une particule à chaque instant (aaah, dé-rîves enchantées (suis allé à la mer hier)). Le mouvement de la particule sera de tte façon bien différent en fct de sa vitesse (vectorielle) de départ, pas de panique.

En fait, le "facteur vitesse" devait rendre un effet de frottement dans l'air (réduction/croissance du module de la vitesse, mais conservation de la direction), avec l'accélération, ça va faire de plus en plus vrai ^^

j'ai un peu de temps dans une heure ou deux, et après j'vais m'hydrater toute la nuit.
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juin 2004 à 16:53
Ben le kirua ça fait qlq jours que je le vois plus du tout... Kirua mon ami ou es-tu? :p
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
21 juin 2004 à 15:30
oui moi aussi j'attend avec impatience !!!!!!!!!!!!
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
21 juin 2004 à 14:45
Yeah, j'attends avec impatience l'update :)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juin 2004 à 03:24
:) Encore moi :) Promis apres je vais me coucher :)

un autre rendu style jet d'eau que j'aime bien, toujours rien d'extraordinaire mais bon :)

Engine3.SetFourchetteAngles(40, 60);
Engine3.Accely = -2;
Engine3.SetFourchetteVitesse(15, 20);
Engine3.Rayon = 8;
Engine3.Lieu.Type = liPoint;
Engine3.Lieu.SetPoint(400, 335);
Engine3.Couleur = CParticleEngine::clrEnergieBleue;
Engine3.CreerParticules(NbPart3);

Pour un petit apercu, http://perso.wanadoo.fr/wett/images/screen2.jpg
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juin 2004 à 03:07
Bon décidemment j'ai décidé de faire mumuse avec ton programme :)
Alors j'ai commencé à rajouter (c'est sale mais ça marche) une gestion d'accélération (gravité...) Et franchement ça rend bien! :)

Néanmoins quelques limitations : Il faudrait prévoir de laisser choisir la marge de mortalité des particules (hyper important pour une fontaine, moi comme j'ai fait il faut attendre qlq secondes avant d'avoir qlq chose de fluide et bien réparti) ou alors de ne pas toutes les créer au meme moment (genre donner un nombre max à ne pas depasser et un flux = le nb de particules lancées par seconde)
Encore autre chose : pour ta classe vecteur, passer en float au lieu de int, c'est vraiment trop visible, perso je vois des rangées de particules... Bon qlq part en tout cas y'a des int à passer en float, pas forcément dans la classe vecteur à bien y réfléchir...

Bref voila ce que ça donne :
http://perso.wanadoo.fr/wett/images/screen1.jpg

Les modifs sont simples, que des ajouts ou qlq modifs:

*CParticle.h

CParticle(int AngleMin, int AngleMax, int VMin, int VMax, int Accelx, int Accely, CVecteur2D Pos);
CVecteur2D Acceleration;

*CParticle.cpp

Dans CParticle::CParticle( etc )
Acceleration.X = Accelx;
Acceleration.Y = Accely;

Dans void CParticle::Deplacer()
Vitesse += Acceleration;

*CParticleEngine.h

int Accelx, Accely;

*CParticuleEngine.cpp

Dans void CParticleEngine::CreerParticules(int nb)
Particules[i] = CParticle(AngleMin, AngleMax, VMin, VMax, Accelx, Accely, Lieu.GetCouple());

Et bien sur dans main.cpp, on désactive les 2 premiers engine et le 3e:

Engine3.SetFourchetteAngles(-10, 10);
Engine3.Accely = -1;
Engine3.SetFourchetteVitesse(-10, 10);
Engine3.Rayon = 8;
Engine3.Lieu.Type = liPlaquette;
Engine3.Lieu.SetCoinsRect(350, 250, 100, 0);
Engine3.Couleur = CParticleEngine::clrEnergieBleue;
Engine3.CreerParticules(NbPart3);

Sans oublier les qlq modifs pour pas lagguer ;)
Voila je crois n'avoir rien oublié, sinon bah vous voyez surement ou je veux en venir et vous modifiez en conséquence :)
Encore merci kirua pour cette source! A+ et bonne prog
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juin 2004 à 01:23
Et voila comment optimiser un code en une seule leçon!
Alors maintenant je sais pourquoi tu laissais la texture en 256x256...

CParticleEngine.cpp ligne 108 tu mettais
GLuint dist = (unsigned)hypot(float(i - (texHeight / 2)),float(j - (texWidth / 2)));

Alors forcément qd la texture était pas en 256x256 ben le calcul était faux...
On remplace par
GLuint dist = (unsigned)hypot(float(i - (texHeight / 2))*256.0f/texHeight,float(j - (texWidth / 2))*256.0f/texWidth);

Et hop, on met la texture en 16x16, on a strictement le meme resultat graphique, et des perfs... 10x supérieures??? Je sais pas j'ai pas d'affichage du fps mais c'est bien plus que flagrant... Ce que je sais c'est qu'en mettant 20 000 à chaque systeme, sur ma geforce4Mx, ben je dois tourner dans les 20fps...
lool pardon je me fait plaisir mais ça me troublait depuis un bout de temps que pour un dessin si petit, une texture si grosse soit necessaire, alors maintenant que je peux compiler...
eldered Messages postés 232 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 mai 2022
19 juin 2004 à 09:39
Très sympas, beau travail Kirua.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 juin 2004 à 22:56
"pas toutes les deux secondes"
...
à 30 FPS ça fait bcp de fois par 2 secondes :/
StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006
18 juin 2004 à 22:52
en fait je parlais pas de glPush/PopAttrib mais de glPush/PopMatrix() puisque je parlai des matrices de transformation 3D (rtanslate, rotate etc...) de meme vau mieux utilisser les opérations matricielle d'OpenGL
j'ai pu exactement le graphique de fonctionnement du moteur graphique OpenGL mais changer les etats sans arret ralenti le fonctionnement donc vau mieux les changer qu'au bon moment et pas toutes les 2sec...
cppdupdup34 Messages postés 212 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 13 mai 2006
18 juin 2004 à 20:43
c'est tres zoli
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 juin 2004 à 19:50
c'est très clair, pas de souci, je devrai penser à l'implémenter.
là j'ai codé mon premier algo pour n reines, temps de programmation < 1h.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
18 juin 2004 à 19:33
En fait le truc avec glPushAttrib c est que c est lent si tu lui passe en parametre GL_ALL_ATTRIB_BITS, ce qui fait une sauvegarde de TOUS les etats. Par contre, si tu touche un peu au blending, un peu aux textures ... tu peux tres bien faire glPushAttrib (GL_TEXTURE | GL_BLEND ); afin de sauvegarder l etat d opengl avant ta fonction puis un glPopAttrib() afin de les retablir en sortant.
Mais le truc de Funto marche aussi très bien, c est dailleurs ce qu il est conseillé de faire dans la plupart des cas, cad ceux ou tu sais ce que tu modifie. GL_ALL_ATTRIB_BITS, c est la solution du flemmand (Oui je l utilise ? et alors ?) car ca evite davoir a chercher quels etats tu modifie pour ne pas les alterer.
Ca evite de modifier definitivement les etats d opengl, alors que tu n en as besoin que pour une portion de ton code.
Chuis sur que j ai du dire plusieurs fois la meme chose, mais j ai un peu la flemme de relire la ... =)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 juin 2004 à 23:57
l'idée y est. mtnt, je trouverais étonnant si c t tellement couteux que ça que OpenGL n'ai pas ce système "built-in"

examen de latin demain (enfin, presque ajd), je go :/
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
17 juin 2004 à 23:50
Pour glPushAttrib()/glPopAttrib() , d'après ce que je me rappelle de "OpenGL 1.2", ça permet de mettre dans une pile des "attributs", en gros une partie de l'état actuel d'OpenGL : des informations relatives à l'éclairage, à la couleur...etc, presque tout quoi.
Mais exactement, comment l'utiliser, ben j'ai pas le bouquin sur moi et j'ai la flemme de le chercher lol.

Pour les appels à glEnable()/glDisable(), je ne pense pas que ça soit vraiment coûteux (comme tu dis, à mon avis ce sont des flags) mais je n'en suis pas sûr du tout.

En fait, plutôt que d'utiliser push/pop attrib, tu pourrais aussi faire un truc du genre :

GLboolean texture_enabled = glIsEnabled(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_2D);
if(texture_enabled) glEnable(GL_TEXTURE_2D);

(je sais pas du tout si ce que je viens d'écrire est compilable).
StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006
17 juin 2004 à 12:19
ouai ya des petites techniques pour optimiser un peu les rendu opengl....
ya
* utiliser des listes d'affichage (bon la ct po possible bien que...)
* utiliser des tableau de points (pareil encore pour faire un carré c po nécessaire bien que...)
* penser à changer les états une fois pour toutes, ou tout du moins un minimum de fois : cad a dire eviter de les mettres dans une boucle
* générer les textures de facon aproprié : ici gl8linear sert pas a grand chose, fau mettre gl_nearest
* utiliser push et pop au lieu de faire des rotation ou translation supplémentaires, et surtout utiliser les opérations matricielle de opengl (gltranslate etc...) car elles seront bcp plus optimisées que toutes celle que tu pourras faire

parce que la faut qd meme une grosse carte graphique pour des effets qui sont pourtant tres basiques ;)

pour ce qui est des new et delete, ca n'apelle pa de constructeur pour les types de base comme les int, double etc....
par contre apres fau savoir ce qu'on veut...si on fait du C++ on utilise des new et delete po malloc (a part dans certain constructeur pour des utilisations bien particulieres) ou alors on fait du C
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 20:32
ok, merci pr l'info.
j'ai jamais mis de glEnable dans une boucle, c'est déjà ça :p quoiqu'au final, le programme étant une boucle, ça revient à ça aussi, mais en moins con ^^.
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
16 juin 2004 à 19:57
Ben Opengl c est une machine a état. Ca veut dire qu elle fait toujours la meme chose tant que son etat ne change pas. Et comme ces états sont sur la CG, lui faire appel coute cher ... C est pour quoi vaut mieux eviter
for (....)
{
glBegin (...)
}
et mettre plutot
glBegin (..);
for (...)
{

}
car a chaque fois que tu passe dans ta boucle tu demande de faire qqch qui ne sert a rien (sil te plait la CG, mets moi les blending dans son état actuel ...), ce qui est forcément couteux.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 18:51
les types embarqués du C++ n'ont pas de constructeur, donc si je n'utilise pas GLuint mais unsigned int, je peux utiliser les new[] et delete[] sans perte de performance.

Pour les glPushAttrib tu as parfaitement raison. J'ai compris à quoi ça servait en lisant quelques codes, mais comme je n'étais pas absolument certain du fonctionnement, je ne l'ai pas implémenté. D'ailleurs je devrais généraliser l'usage de cette fonction! Est-ce que tu pourrais me donner un mot d'explication sur ces fonctions, et aussi (si tu sais) me dire si ces appels répétés à glEnable/glDisable sont couteux, où si ils ne font que modifier des flags (bool) ?

Xarier, tu as su compiler alors?
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 18:35
Hoola pardon pour tout a heur car j'avait pas lue la source.
Mais apres que je l'ai lue j'ai changer l'image 256/256 par 32/32
et ca merche meiux :)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
16 juin 2004 à 18:16
J'admet mon erreur (quelques dizaines de posts plus haut lol), je savais pas que tu voulais laisser au programmeur la possibilité d'utiliser une autre texture que celle que produit GenerateTexture().

Au sujet de malloc()/free() vs new[]/delete[] en fait la principale différence c'est que new[]/delete[] appellent le constructeur de chaque objet alloué, C++ oblige.

Donc, quand on alloue des GLubyte comme dans ce cas, en toute logique new[] les initialisera à 0 (c'est ce que fait le constructeur par défaut non?) alors qu'on n'en a pas besoin -> garde les malloc()/free().
Arrêtez-moi si j'ai (encore...) dit une connerie, je ne suis pas sûr du tout de ce que j'avance mais c'est ce il me semble que c'est ça...

Ah oui aussi; y'a un glDisable(GL_TEXTURE_2D); à la fin de CParticleEngine::Dessiner() ; ça pourra conduire un gars qui veut utiliser le moteur de particules et qui n'aura pas lu le code à se demander pourquoi sa *** de texture ne veut pas s'afficher...
Le mieux dans ce cas-là c'est d'utiliser glPushAttrib()/glPopAttrib().
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 16:03
non mais please moi j'ai pas le devc++ alors la je ne peut avoir L'image. peut tu le recompiler pour Moi
ta mon mail ta msn alors ..fill le moi please :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 15:18
hmm, l'exe du zip est compilé avec la texture à 256*256 pixels. si vous recompilez avec le code que j'ai mis plus haut (je me souviens plus si j'ai modifé le zip avec la màj...) pour passer à une texture 64*64 (32*32 c'est pas très beau), vous aurez des meilleures perf!

ts vos ordinateurs st excellents, si mon moteur est lent sur ces ordis, c'est la faute du programmeur qui est un incapable, ça c'est du certain ;-)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juin 2004 à 14:53
Là c'est sur, le seul facteur c'est la vitesse brute de la carte graphique qui joue, les effets sont simples et ne demandent pas je pense plus de 16 Mo de ram... Et c'est pas le proco qui prend donc --> CG
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 14:43
bh ca peut que ca soit ma carte graphique car j'ai une de 32 Mo
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 juin 2004 à 14:22
euh chez moi aucuns problémes avec 6500*2 + 2000 particules sur une G4 Ti4200 128Mo, 512 DDR et un 1.1Ghz (AMD TBird)
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 14:19
hi bh la chez moii ca marche vraimment tres lent avec 6500 alors si quelqu'un peu l'optimizer :

j'ai un p4 1.60 GHz 520 mo ram .

Merci
StanOfSky Messages postés 43 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 7 octobre 2006
16 juin 2004 à 14:12
ouai la fonction la plus rapide est bien triangle_strip donc faire des carré. a noter que les objets 3d sont tres souvent exporté sont un format triangle_strip pour l'optimisation du rendu.
bien entendu 2 triangles = un carré (ou rectangle ou paralelogramme)

pour ce qui est de allocation en effet c assez lent c pourquoi fau faire ses allocation au tout début quitte à prevoir l'espace que tu devras allouer
de maniere générales tous les calculs lourds qui n'ont pas besoin d'etre dynamique ou qui peuvent etre précalculé doivent etre fait au debut quitte a perdre un peu d'espace ram pour plus de rapidité dans l'exécution.

sinon c vrai que le moteur est assez bleuffant, le rendu est vraiment tres beau.
mais chez moi c po tres rapide donc reste à optimisez tout ca.
parce qu'avec 6500 particules pour les 2 premiers et 2000 pour le 3e ca rame un peu
et pourtant j'ai une GF2 1600+ qui supporte parfaitement UT2004 ou warcraft iii ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 11:54
L'extrait qui nous intéresse: (url du document, commentaire précédent). ça parle de malloc et free en fait, pas de new et delete, mais je suppose que c'est le même genre de fonctionnement (?)

That opens another whole can of worms: memory allocators. Do you know how malloc works? The nature of malloc is that it has a long linked list of available blocks of memory called the free chain. When you call malloc, it walks the linked list looking for a block of memory that is big enough for your request. Then it cuts that block into two blocks -- one the size you asked for, the other with the extra bytes, and gives you the block you asked for, and puts the leftover block (if any) back into the linked list. When you call free, it adds the block you freed onto the free chain. Eventually, the free chain gets chopped up into little pieces and you ask for a big piece and there are no big pieces available the size you want. So malloc calls a timeout and starts rummaging around the free chain, sorting things out, and merging adjacent small free blocks into larger blocks. This takes 3 1/2 days. The end result of all this mess is that the performance characteristic of malloc is that it's never very fast (it always walks the free chain), and sometimes, unpredictably, it's shockingly slow while it cleans up. (This is, incidentally, the same performance characteristic of garbage collected systems, surprise surprise, so all the claims people make about how garbage collection imposes a performance penalty are not entirely true, since typical malloc implementations had the same kind of performance penalty, albeit milder.)

Smart programmers minimize the potential distruption of malloc by always allocating blocks of memory that are powers of 2 in size. You know, 4 bytes, 8 bytes, 16 bytes, 18446744073709551616 bytes, etc. For reasons that should be intuitive to anyone who plays with Lego, this minimizes the amount of weird fragmentation that goes on in the free chain. Although it may seem like this wastes space, it is also easy to see how it never wastes more than 50% of the space. So your program uses no more than twice as much memory as it needs to, which is not that big a deal.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 11:49
malheureusement avec Wett on risque de chercher longtemps parce qu'il s'enferme à Lyon. Il sait qu'il dit bcp de bêtises alors il se met ds un endroit où y a que des daubes comme connexions internet, et comme ça il risque pas de se dévoiler... naaah, c bientôt les vacances, tu vas retourner chez toi, pas vrai? on t'aura plus svt :)

le truc de l'opéro new qui est lent, j'ai pas trouvé ça tout seul, c'était dans un document sur les optimisations à prendre en compte en C++, tout spécialement en ce qui concerne les chaînes de caractères (qui sont dég. en C/C++ ;))

http://www.joelonsoftware.com/articles/fog0000000319.html

ça vaut vrmnt le coup de le lire en entier
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juin 2004 à 11:33
je me moquais pas de toi promis ^^ Juste je reprennais le concept parce qu'il se defandait ^^ Et t'inquiete si tu veux m'avoir à la 1ere gaffe tu va pas chercher longtemps ;o)
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 juin 2004 à 11:30
Spa bien de se moquer :'(
Jtaurai toi à la première gaffe :D
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juin 2004 à 11:24
LOOL j'imagine trop le concept : Pour optimiser l'acces à la ram et eviter de trop en bouffer... Privilégiez la mémoire virtuelle!!! ARGGG ou mieux : ils vont nous sortir de la HDDR à debit maxi de.... 50Mo/s!!! la galere... Pardon private joke ^^
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 juin 2004 à 11:23
Arg :D

Vous avez tout les deux raisons et Kirua a un excellent argument que je ne connaissais pas :D Pour le HDD, je me suis emmelé les pinceaux et pensais à la RAM (mais une fois que j'ai dis HDD je suis partis dedans :'( )

merci, je m'en vais, tête baissée, programmer un moteur en DX :D
cordialement
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 11:20
les 120 Ko ils vont ds les gencives de la RAM, et c'est pas parce que t'as 1024 Mo de RAM que 120 Ko ça ne représente rien. La fonction new d'allocation mémoire est très lente, elle doit chercher des plages mémoire continues dans la mémoire vive. Si tu cherches un tronçon continu de 120Ko tu risque de plus t'amuser que si tu cherches 4 octets pour stocker ton int. Le résultat il est clair: vitesse d'exécution en chûte. Puis je vois pas le rapport avec un disque dur ^^ si tu stockes ces données ds le DD t'es parti pour la gloire avec ta vitesse d'exécution ;-)
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juin 2004 à 11:18
Ici il n'est pas du tout question de HDD ou de sacrifier de la vitesse pour conserver de la mémoire (c'est fini l'époque des 512Ko de ram... On en est conscient t'inquiete!), simplement d'optimisations et d'éviter de bouffer trop de ram pour un simple moteur de particules, qui n'est qu'un supplément dans un moteur et non un programme à lui tout seul... Donc plus il est léger (autant en mémoire qu'en temps machine) mieux c'est!
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 juin 2004 à 11:12
Merci pour l'info Kirua mais : 4 triangles pour un carré ? Un carré moi je le divise en 2 triangles non :S ?

Sinon, je vois pas trop pourquoi vous vous prenez la tête avec des 120Ko, 10Ko, etc... : je vous rappel qu'un jeu (2D qui plus est) doit être 100% orienté vitesse : donc vaut mieux stocker quelques données pour gagner quelques fps (multipliés par le nombre de particules) que quelques kilo.. A moins que vous soyez restés à l'époque des HDD de 3Mo : Ce ne sont pas quelques centaines de kilo qui vont surcharger un HDD d'une 50aine de gigas (Les nouveaux jeux se fichent de leur consommation en place : ils veulent juste aller vite : quake3, ut2k4..) !

cordialement
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 10:59
la 3D serait pas plus dure à coder (effectuer la modif mtnt est lourd, mais si depuis le début j'avais tout orienté 3D, ça n'aurait pas été sensiblement plus compliqué). je l'ai fait en 2D parce que mon moteur de jeu est en 2D et que donc, ben pas besoin de 3D ^^
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
16 juin 2004 à 10:53
Kirua pour les couleurs, il ne faudrait pas conserver les couleurs pour chaque particule, simplement conserver par ex 255 couleurs differentes max et de conserver uniquement l'indice de la couleur dans chaque particule... ça reduit à un octet.. et on se reduit à meme pas 10Ko en plus, ça se tiens je trouve...
Sinon c'est dommage que tout soit en 2D pure meme si je comprends que ça te simplifie grandement la tache... Je verrais si je peux pas trafiquer un peu ça des que j'aurais à nouveau acces à internet depuis mon pc ;) idem pour les couleurs ^^
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 juin 2004 à 07:59
Funto, ton postulat de départ est erroné: tous les CParticleEngine's n'utilisent pas la même texture, et c'est bien pour ça que j'ai opté pour ce système. Ce qui est vrai, c'est que je pourrais avoir un flag qui détermine si la texture a déjà été générée, et j'y ai pensé. Mais on ne veut pas forcément créer la texture! Donc je laisse ça au gestionnaire de CParticleEngine's (je dois lui trouver un nom ;-))

Salut Xs. Ton effet esxt OK pour un petit flambeau ou qqch du genre, en effet, faudra que je pense à le mettre dans les donjons :p
Si tu veux convertir le code pour DirectX, c'est vraiment, vraiment easy. Tu ne dois changer que la méthode de Dessiner de CParticleEngine ainsi que la fonction GenerateTexte. C'est tout!
Je dessine en fait 4 triangles qui forment un carré. J'ai lu que c'était "mieux", et en général je fais confiance ;-)
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 00:25
bh jj'ai pas vue mais la plus part des fois en utilise des carré la aussi je pense qu'il utilisé des carré
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
16 juin 2004 à 00:24
bh jj'ai pas vue mais la plus part des fois en utilise des carré la aussi je pense qu'il utilisé des carré
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
16 juin 2004 à 00:10
Salut !

Si tu veux t'en servir dans un ptit rpg 2D, j'ai trouvé ca (c'est a peu prêt comme ca que je m'en servirai dans le mien) :

Engine3.SetFourchetteAngles(80, 100);
Engine3.SetFourchetteVitesse(4, 15);
Engine3.Rayon = 8;
Engine3.Lieu.Type = liPoint;
Engine3.Lieu.SetPoint(400, 335);
Engine3.FacteurVitesse = 0.95;
Engine3.Couleur = CParticleEngine::clrFeu;
Engine3.CreerParticules(50);

50 particules seulement pour un truc assez sympa.

Sinon, je suis pas habitué à l'openGL (je fais du DX9) donc je me pose une qustion : tes particules, ce sont bien des triangles ? Je veux dire, qu'est ce que tu dessines ? Un carré ou un triangle ? ou autre chose ?

merci
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
15 juin 2004 à 23:47
Tous les CParticuleEngine utilisent la même texture; ça serait pas mieux de créer son ID en static?
Je veux dire, plutôt que de donner un ID de texture arbitraire à chaque CParticuleEngine, d'autant plus que cet ID est le même pour tous, je verrai la chose comme ça :
- un membre de CParticleEngine : static GLuint IdTexture;
- à l'appel du constructeur de CParticuleEngine :

static bool PremierPassage= true;
if(PremierPassage)
{
glGenTextures(1, &IdTexture); // Evite d'utiliser un ID arbitraire; par contre dans tout le programme faudra utiliser des glGenTextures au lieu d'IDs arbitraires, ce qui est beaucoup plus clair et fiable.

// ICI : génération de la texture...
PremierPassage = false;
}

- la méthode CParticuleEngine::Dessiner() utilise IdTexture.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 21:03
Voici le code pour des textures plus petites (j'ai juste dû apporter qq modifs pour qu'il ne faille (mtnt) plus que changer les deux premières lignes pour changer la définition de la texture:

j'ai changé ça:
float color = 255-(dist*1.8);
en ça:
float color = 255-(dist*1.8*(256./texWidth));


//---------------------------------------------------------------
void CParticleEngine::GenerateTexture(int id)
{
int texWidth = 64;
int texHeight = 64;
GLubyte *texPixels, *p;
int texSize;
int i, j;
int radius;

texSize = texWidth*texHeight*4*sizeof(GLubyte);
texPixels = (GLubyte *) malloc(texSize);
if (texPixels == NULL)
return;

p = texPixels;
for (i=0; i<texHeight; ++i)
{
for (j=0; j<texWidth; ++j)
{
GLuint dist = (unsigned)hypot(float(i - (texHeight / 2)),float(j - (texWidth / 2)));

float color = 255-(dist*1.8*(256./texWidth));
if (color < 0) color = 0;
p[0] = (char)color;
p[1] = (char)color;
p[2] = (char)color;
p[3] = (char)color;
p+=4;
}
}

glBindTexture (GL_TEXTURE_2D, id);
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, 3, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, texPixels);

free(texPixels);

TextureID = id;
}
//-------------------------------------------------------------
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 juin 2004 à 20:55
exelent ! 10/10
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 20:55
le rayon des particules, tu suggères qu'une particule ait un rayon fixe généré aléatoirement, ou que le rayon de la particule soit redéfini à chaque frame? parce que dans le premier cas, c'est la même réponse qu'à Wett pr les couleurs: il faut minimiser les données nécessitées par les particules parce qu'il y en a bcp! faut être raisonnable dans la paramétrisation ^^

pour le timer, je l'ai vrmnt écrit en 4 secondes ;) c'était seulement pour l'application de démo (et de test). dans mon rpg, ce sera le timer du jeu qui fera la loi, et dans vos applications (éventuellement), ce sera le vôtre, pas de souci.

pour les triangles, j'ai suivi un conseil sur un site qui disait que les triangles étaient plus rapides à dessiner qu'un rectangle (même 4 triangles dans ce cas-ci! étonnant non?).

quant à la texture, c'est un des points à changer en effet.
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
15 juin 2004 à 20:49
Salut!
J'ai regardé la source. Si tu mets le rayon (taille de particule) en valeur aléatoire comprise dans une fourchette et si la texture au lieu de rond , tu mets en ovale comme suit:
GLuint dist = (unsigned)hypot(float(i-(texHeight/2)),float(j-(texWidth)/2))*2.0); l'effet sera plus réel.
Aussi, gère independamment le timer.
Dans la texture un 64x64 sera suffit ,meme 32x32 ,car le particule est petit, là tu perds quelque ms en utilisant 256x256.
A part celà c'est très bien.
J'ai remarqué aussi la presence de glBegin(GL_TRIANGLE_STRIP) dans le boucle for(...), tu peut mettre cela en dehors du boucle en remplaçant par (gl_Begin(GL_QUADS)) et changer le 4e glTexCoord en 3e. On gagne aussi quelque ms. Voilà , bonne prog!
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
15 juin 2004 à 20:35
excellent, magnifique, beau ... comme la note :)

tu n'as pas mis longtemps à sortir ta "petite" source que j'attendais :]
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 17:41
Salut Wett, thx pr le commentaire élaboré ^^

Le moteur est 2D complètement, donc pour l'adapter à de la 3D, faudrait du travail, à commencer par récrire une classe CVecteur3D et à remplacer tous les calculs de position (récrire Lieu et ses paramètres aussi...).

C'est vrai que la mortalité c'est le seul truc que j'ai pas rendu paramétrable, je devrais changer ça (juste quelques lignes mais dans plusieurs classes). Faut d'ailleurs aussi récrire la génération de texture.

Le mouvement de caméra, ben c'est en 2D, y a pas moyen ;-) mais si tu déplaces le lieu du système, les particules mortes renaissent toujours dans le nouveau lieu, ce qui permet les effets de trainées, puisque les particules en vie continuent de se mouvoir selon leur mvmt originel, indépendemment du déplacement du système. Tu pourras aussi simplement faire des transitions d'un point à un cercle puis d'un cercle à une droite, le tout en changeant les couleurs, ce serait simple à coder.

Pour les variations de couleurs d'ailleurs, c'est une idée... pas long à coder non plus mais il y a un problème: une particule ponctuelle doit garder la même couleur tout le temps, donc il faudrait donner une propriété Couleur à chaque particule (SRVB = 3*4 octets). Pour 10 000 particules ça fait 120 Ko de plus... c'est trop coûteux je trouve. A nouveau, c'est vrmt trivial à coder, donc si ça amuse qq un :)

Quant au mvmt des particules, m'étais demandé d'abord: est-ce que je dois gérer la gravitation? -> c'est tt léger, ça n'a "pas" de masse, donc non. Donc, il s'agira d'un mvmt rectiligne uniforme? pas vrmnt, elles sont quand même freinées par leur milieu... donc j'ai opté (sur conseil d'un tuto ;-)) pour l'option suivante: à chaque déplacement, je me contente de multiplier le vecteur vitesse (pas accélération!) par le scalaire FacteurVitesse (ce qui aura pour effet de modifier le module de la vitesse et donc la valeur scalaire de la vitesse) et ensuite j'additionne le vecteur vitesse au vecteur position de la particule, ce qui a pour effet de bien déplacer la particule dans le sens et la direction du vecteur vitesse.

Les composantes du vecteur, par trigonométrie élémentaire, sont calculées selon les sinus et cosinus de l'angle (cf. Cercle Trigonométrique) et le module, ben c'est du Pythagore :)


PS: si vous avez la possibilité de compielr chez vous, essayez de remplacer dans le code "main_trainee.cpp" le code d'initialisation de l'engine3 (la boule qui se déplace) par ça:

Engine3.SetFourchetteAngles(360-40, 0+40);
Engine3.SetFourchetteVitesse(4, 25);
Engine3.Rayon = 8;
Engine3.Lieu.Type = liPoint;
Engine3.Lieu.SetPoint(100, 335);
Engine3.FacteurVitesse = 0.95;
Engine3.Couleur = CParticleEngine::clrFeu; //CParticleEngine::clrNauseabond;
Engine3.CreerParticules(NbPart3);

ça fait un jet amusant ^^
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
15 juin 2004 à 17:22
Salut! Comme d'hab, excellente source ;)
Je viens de voir qu'une particule est gérée à l'aide de vecteurs, mais dans ta classe moteur c'est avec des angles... O_o plutot space comme truc... encore que non c'est pas idiot tu peux donner une fourchette et c'est bien mieux!
Simple question (pas trop le temps d'étudier ta source) le moteur est 2D ou 3D? On peut gérer un mouvement de caméra? Je pense à un exemple simple : une chute d'eau (vitesse initiale horizontale, acceleration verticale, couleur bleue-blanche (tu devrais mettre aussi des plages de couleur, genre possibilité de melanger selon des proportions + ou - alétoires plusieurs couleurs) ) ensuite on pourrait tourner autour, etc. Et donc l'intégrer dans un vrai moteur 3D! Meme en 2D ça peut toujours servir...
Tu devrais aussir permettre de gérer la mortalité de tes particules de differentes manières : pourcentage de mort à chaque secondes (genre la radioactivité), distance du point initial, temps etc... Que le tout soit paramétrable et bien sur soit tout de meme plus ou moins aléatoire comme tu t'es attaché à la faire jusqu'à présent...
Bon voila un peu à court d'idée là mais j'espere que ça t'aidera... Et en fait meme apres avoir regardé ta source je comprends pas bien comment tu gere la vitesse et l'accéleration d'une particule... Un mélange d'angles et de vecteurs ok je comprends mais... La vitesse ET l'accélération ont un angle bien distinct? Je repense toujours à mon exemple de chute d'eau : c'est réalisable? Désolé de poser des questions bêtes je peux pas compiler d'ici sinon j'aurais bien essayé voir ce que je pouvais faire ;)
a+ et encore bravo!
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 17:10
Bh ca na rien donner He j'ai mi la un 10/10 il ca n a fait aucun effet
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 17:03
il ont pas posé 9 mais oui
car il avait deja 10 + 8 / 2 = 9 mais c pas grave je vais faire en sorte que sa augmente regarde now

Kiruna mirite un 10/10 et je vais faire en sorte qu'il a
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 17:03
il ont pas posé 9 mais oui
car il avait deja 10 + 8 / 2 = 9 mais c pas grave je vais faire en sorte que sa augmente regarde now

Kiruna mirite un 10/10 et ca va rester
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
15 juin 2004 à 16:49
Qui a osé mettre 9? O_o
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 16:19
Alors tekken Vs Street :) :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 15:37
à part Tekken 3 et DOA 3 j'aime bof les jeux de combat, et puis, c'est pas parce que j'ai l'anim que je vais faire le jeu, ça me paraît rapide comme saut^^ Mais le code source est à toi, tu es libres d'en faire ce que tu veux ;-)
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 15:30
pense tu pas creé un jeu like street fighter et utiliser les particule comme des bull ( Hadouken) ca serait super :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 15:03
ils utilisent ça dans les final fantasy en 3D, qui n'ont rien de rétro depuis 6 ans ^^ regarde FF7, c'est une pure bombe, et ça date de ...

je me demande juste ce que ça va faire ces grosses boules d'énergies dans les mains de mes sprites en 2D bien plate sur fond 2D bien plat ...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
15 juin 2004 à 14:58
Bah de toutes façons ils utilisent bien ça dans Final Fantaisy non?
Bon c'est sûr je pense pas que ton RPG ressemblera niveaux graphismes à Final mais bon ça sera un 1er pas :p
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
15 juin 2004 à 14:44
Magnifique effet! 10/10.
J'ai recompilé la source en changeant la valeur du timer en 15ms et même avec des nombres de particules 3000, l'effet est plus naturel. Bravo!!!!!!!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 14:25
je savais pas pour le f après un nombre, je pensais que c'était facultatif, mais sans incidence.
je savais pas non plus que les libraires <c___> faisaient partie de l'espace de nom std, faudra que je modifie ça.

ben oui je fais référence en RPG Engine, bien entendu ^^ c'est pour ça que je l'ai créé ce moteur de particules, pour faire les effets des combats. Mais ça va faire bizarre ce truc "moderne" avec les graphismes rétro (vieillot? :p) du rpg...
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
15 juin 2004 à 11:59
c'est tres jolie !!! :)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
15 juin 2004 à 11:58
Moi aussi j'adore ce vert ;)
Pour les casts, en fait, c'est surtout avec l'usage de constantes; 1.0 est un double et 1.0f et un float.
Y'avait aussi des erreurs dûes à l'inclusion de GL/gl.h sans inclusion de windows.h avant (je sais c'est stupide mais Visual C++ veut ça...), et aussi M_PI n'était pas défini dans math.h.
Y'a aussi un truc qui est bizarre, c'est que ça compile impec sur les 2 compilos alors que tu fais des #include <cmath>, #include <cstdio>...etc sans aucun using namespace std...

Je t'envoie le mail avec la version VC++ée.

PS : à un moment dans un commentaire tu fais référence au RPG Engine, je sais pas si c volontaire ou si c un oubli...
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 11:02
CyberBoy: C'est une bonne idée, et je fais ça assez souvent quand je code une classe. Si j'en ai l'utilité, je le coderai (faudra juste rajouter une méthode pour savoir si le système est mort). Pas compliqué, mais je pense pas le coder ici. Dans mon moteur de RPG plus tard oui ;)

Funto: pourtant moi Dev m'embête déjà bcp pr que j'exprime les cast littéralement, comprends pas où il t'en a trouvé d'autres ton VC :(

La partie du code de génération de la texture n'est pas de moi, je l'ai extrait d'un code, d'ailleurs je dois encore rajouter les crédits de l'auteur. J'ai juste cherché à l'inclure dans ma classe sans chercher plus loin, je vais modifier ça, en effet c'est un peu idiot. Quant au malloc/free, je trouve ça moche :p je devrasi récrire la fct en fait.

j'adore ce vert ^^ autant que le bleu et le rouge/jaune en fait. Mais si l'animation n'est pas sur un fond noir, ça tue tout l'effet :( :( :(
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
15 juin 2004 à 10:54
L'effet est magnifique même sur ma carte graphique, même envoûtant des fois lol, bravo ;)

J'ai recompilé sous Visual C++ en supprimant tous lles errors et warnings (y'en avait un paquet :(, mais c'était surtout des histoires de conversions de types implicites ) je t'enverrai ça.

J'ai vu aussi dans ta génération de textures que tu utilisais un filtre GL_LINEAR; vu que les particules sont toutes petites on ne voit aucune différence lorsque l'on filtre en GL_NEAREST, et, chez moi en tous cas, les performances sont bien meilleures.

Extrait de ton code : "texPixels = (GLubyte *) malloc(texSize);" -> et toi qui me reprochais d'utiliser malloc() au lieu de new[]....d'ailleurs dans ce cas l'allocation dynamique n'est pas obligatoire vu que la taille de la texture allouée ne change pas...
Euh...d'ailleurs je viens de m'en rendre compte : si j'ai bien compris, ta texture est appliquée à chaque particule, chacune toute petite. Et ta texture fait 256x256??? C'est énorme !

PS : "//quelques couleurs remarquables qui seront souvent utilisées
static SRVB clrFeu, clrEnergieBleue, clrNauseabond;"

Mdr la couleur clrNauseabond :p
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
15 juin 2004 à 10:53
Au passage, si tu code un moteur 2D, on va problablement avoir plein de trucs a se raconter :)
Meme si le mien utilise SDL pour le rendu a la place d opengl, les concepts restent les memes ...
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
15 juin 2004 à 10:37
Trop fort, j adore l effet de trainée :)
On peut par dessus ton systeme de gestionnaire de particules imaginer un gestionnaire des gestionnaires. Pour quoi faire ? ben au lieu d avoir
Engine1.Deplacer();
Engine2.Deplacer();
Engine3.Deplacer();
dans ta boucle principale, tu cree un gestionnaire qui n est ni plus ni pour qu une liste des moteur de particules, et qui se chargerait de mettre a jour et afficher les systemes de particules, puis supprimer ceux qui sont morts. Chais pas si je suis clair, mais ca fait un truc comme ca
class PartManager
{
std::list <CParticleEngine*> m_List;
public:
void AddSystem (CParticleEngine* pEngine)
{
m_List.push_back(pEngine);
}
void Update ()
{
// met a jour les systemes, supprime ceux qui sont usagés
}
void Draw ()
{
// dessine les systemes presents
}
};

comme ca tu peut initialiser le manager
PartManager g_Manager;
g_Manager.AddSystem (&Engine1); g_Manager.AddSystem (&Engine2); g_Manager.AddSystem (&Engine3);

puis dans la boucle principale
g_Manager.Update ();
g_Manager.Draw();

Voili voulou :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 08:50
Désolé pour le mail supplémentaire, je viens de coder ça et ça marche! Suis content ^^, ça prend quasi rien comme lignes!

J'ai rajouté dans le zip un exécutable Win32 Particle2D_trainee.exe pour vous montrer l'effet, et un fichier main_trainee.cpp par lequel il faut remplacer main.cpp si vous voulez compiler cet exemple-là. Les seules modifs apportée au flambeau:


//les particules vont vers l'arrière
Engine3.SetFourchetteAngles(180-40, 180+40);
//le centre du jet commence plus à gauche (100px)
Engine3.Lieu.SetPoint(100, 335);

et dans la boucle principale:

Engine3.Lieu.Param1+=15;

Ce qui déplace le centre du jet de 15 px vers la droite 30 fois par seconde!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 juin 2004 à 08:43
viens d'avr une idée, je la poste ici pour que je m'en souvienne parce que là je peux pas coder. Pour faire une trainée derrière le centre de l'objet, il faut déplacer le point Lieu du moteur de particules, et pas effectuer une translation supplémentaire. Comme ça, les particules ne se déplacent pas avec la translation. (faites pas attention, je me parle tout seul, c'est un post-it ;-))
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juin 2004 à 00:54
Kirua, c'est joli tout plein et pour une fois voila un opengl qui daigne tourner chez moi.
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
15 juin 2004 à 00:49
10/10 bravo amigos
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
14 juin 2004 à 23:39
10/10! sans contestes ! Bravo!
Rejoignez-nous