Bonjour Je développe un petit FREE FPS Online, le projet avance pas mal (une petite démo qui date un peut mais qui donne une idée) Le projet a bien avancé depuis. En essayant les démos de Spark, j'avoue avoir vraiment adoré les explosions. J'aimerais donc les insérer dans mon projet.
Le problème est que je n'est pas bien compris avec les 2 codes exemples de Spark/Irrlicht comment faire pour utiliser Spark dans Irrlicht (les démo fournie oui j'ai un peu près compris, mais je n'arrive vraiment pas à insérer la même explosion dans Irrlicht , et c'est vrai que je suis bien loin d'être une vedette en prog).
Serait-il possible d'avoir, ne serait-ce qu'un tout petit bout de code d'exemple qui pourrais intégrer une si belle explosion dans Irrlicht SVP ?
D'avance merci.
Last edited by nabouill on Mon Aug 02, 2010 7:12 pm; edited 1 time in total
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Il n'y a pas grand chose a faire pour porter la démo explosion sur Irrlicht. Il te suffit de de changer les GL...Renderer en IRR...Renderer et puis d'utiliser un IRRSystem a la place d'un System. Après regarde bien le code des démos Irrlicht. Si tu as des problèmes, dis nous ou tu bloques plus précisément.
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sat Jul 31, 2010 7:16 pm
OK merci pour ta réponse, effectivement cela n'a pas été si compliqué que ce que je pensais au début. (bien que cela ma pris quelque temps quand même) Donc ça marche impec, merci encore. Seulement il y a une chose que je n'es pas compris, dans le code de démo j'ai repompé ça:
Code:
list<System*>::iterator it = particleSystems.begin(); while(it != particleSystems.end()) { // Updates the particle systems if (!(*it)->update(deltaTime * 0.001f)) { // If a system is sleeping, destroys it destroyParticleSystem(*it); // And erases its entry in the container it = particleSystems.erase(it); } else ++it; }
je n'es pas compris le parametre envoyer à "update(...)" à la ligne: if (!(*it)->update(deltaTime * 0.001f))
vue que je n'utilise pas de "deltatime" moi je lui est envoyer en paramètre (0.0001f) au hasard, ça marche, mais je ne sais pas pourquoi, ni a quoi correspond le paramètre exact a envoyer!
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sun Aug 01, 2010 5:40 am
update prend généralement en paramètre le temps qui s'est écoulé depuis le dernier appel, ce qui permet souvent de faire correspondre le temps de la simulation avec le temps réel.
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sun Aug 01, 2010 5:20 pm
OK merci, mais juste une petite chose, il prend en paramètre le temps en nanoseconde si j'ai bien compris ?
Aussi, j'aurais une autre petite question, ma petite explosion fonctionne à merveille sauf quand je la déplace si je ne touche pas à sa position je peut faire le tour avec ma camera, tout se passe bien, je la vois tout le temps.
Par contre si je change sa position, je ne la vois pas toujours, cela dépend de l'angle de vue de ma camera, je ne vois l'explosion que si ma camera est mise en rotation entre -50 et 140 sur l'axe de Y, sinon je ne la vois pas ! j'ai le même problème avec l'axe des X (mais je n'es pas pris de mesure, je peux le faire si il le faut). Pour changer la position de mon explosion, j'utilise:
Est-ce moi qui n'utilise pas la bonne méthode pour changer la position, est-ce un bug... Quelqu'un aurait-il une petite idée comment régler ce problème ?
Si il vous voulez des bouts de codes, une vidéo de démo du bug, où autres..., faite signe, je mettrais ça.
D'avance merci.
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sun Aug 01, 2010 6:48 pm
Dans les démos, le temps est passé en secondes (deltatime etant en millisecondes) mais ca n'a pas vraiment d'importance. L'unité est totalement arbitraire. L'important étant que, si tu passes le temps en secondes, les paramètres utilisés pour setter le système de particule soit en secondes aussi. Par exemple setFlow(10) sur un emitteur te donne 10 particules par seconde si tu passes le temps en seconde mais si tu le passe en miliseconde ce sera 10 particules par millisecondes... Pareil pour les forces et tout ce qui a une unité fonction du temps en général.
Pour la disparation de l'explosion, je ne pense pas qu'il y ai un bug a ce niveau. Est ce que ce n'est pas tout simplement parceque l'explosion sort du champ de la caméra que tu ne la vois plus ?
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Mon Aug 02, 2010 7:19 am
ben non, il me semble qu'une vidéo s'impose: si tu regarde bien, quand je me tourne un peu vers la droite, l'explosion disparait, et dés que je me retourne vers la gauche, elle réapparait.
Et ce qui est plus étrange, c'est que si je ne fais aucun changement sur la position de l'explosion, c'est a dire que je la laisse exploser a sa position initial (0,0,0) il n'y à aucun problème.
Ce soir j'essayerais de mettre mon code en upload si tu veux.
stardeath Committer
Messages : 140 Date d'inscription : 2009-08-24
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Mon Aug 02, 2010 10:52 am
ça me ferait penser à une erreur dans l'orientation des billboards, spark doit mal récupérer la matrice de vue et ça fout donc le merdier.
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Mon Aug 02, 2010 11:54 am
Il semblerais que cela dépend de la position a la quel se produit l'explosion, dans le projet de la vidéo ci dessus, le phénomène se produit seulement si l'explosion éclate a + de 170 unité du point 0, et cela sur n'importe quel axe. Mais si je fais éclaté l'explosion par exemple a Vector3D(50.0, 10.0, 40.0) il n'y a aucun problème. Aussi je me suis rendu compte que plus on plaçait l'explosion loin plus l'angle sur le quel on ne vois pas l'explosion est grand.
Aussi pour des test, j'ai recréer un petit projet qui fait une explosion au point 0,0,0 avec le clic gauche, et a 500,0,0 avec le clic droit. Une petite boule bleu est à la position de l'explosion 2 comme point de repère. (pour être sur que l'on regarde au bonne endroit quand on ne vois pas l'explosion) dans ce test le phénomene ne se produit seulement dépasser les environ 500 unitées
edit: la creation de lien ne veut pas marcher, faite un copier/coller du lien et enlevé les espaces pour le téléchargé (le sort s'acharne!)
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Mon Aug 02, 2010 2:40 pm
Ca m'a tout l'air d'être un problème de culling. Le calcul de la bounding box du system ne doit pas être activé alors qu'elle est testé (du coup c'est le point (0,0,0) qui est testé je pense). Essaie de faire un setAutomaticCulling(irr::scene::EAC_OFF) sur le systeme pour desactiver le culling ou alors d'activer le calcul des bounding box des groupes et du systeme.
De mon coté je vais regardé si je ne pas améliorer le truc.
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Problème résolue Mon Aug 02, 2010 5:57 pm
Quote :
Essaie de faire un setAutomaticCulling(irr::scene::EAC_OFF) sur le systeme pour desactiver le culling
C'est EXACTEMENT ça, vraiment impeccable.
Merci
teto
Messages : 19 Date d'inscription : 2010-08-29
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sun Aug 29, 2010 5:27 pm
Bonjour nabouill,
J'ai vu que tu avais transposé le code des explosions de spark vers irrlicht et c'est exactement ce que je comptais faire. Est-il possible que tu postes le code correspondant ici pour d'autres step ?
Nb: je t'ai pm le mm message pr mettre toutes les chances de notification de mon côté :p
nabouill
Messages : 12 Date d'inscription : 2010-07-13
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Mon Aug 30, 2010 7:12 pm
Juff a dit:
Quote :
Il te suffit de de changer les GL...Renderer en IRR...Renderer et puis d'utiliser un IRRSystem a la place d'un System
en faite c'est exactement ça ni plus ni moins. et de rajouter la solution poster 2 post au dessus. Je veux bien te mettre mon code si tu veut, Mais je ne sais pas si il va bien corresponde a ce que tu cherche faire suivant les dimensions dans l'espace + j'ai remodifié pas mal de truc pour mes besoins donc il n'est plus tout à fait comme l'original.
Tu peux aussi télécharger le code qui correspond au dimension d'origine de la demo de Spark que j'ai converti pour Irrlicht que j'ai mis 4-5 post au dessus (convertie heuu.. , pas entièrement, mais le system est bien là).
Mais si vraiment ça ne te suffit pas, refait signe je te mettrais mon code exact, y a pas de soucis (c'est juste que ça fait un peu lourd je trouve pour un post sur un forum)
teto
Messages : 19 Date d'inscription : 2010-08-29
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Tue Aug 31, 2010 6:40 am
ok, après avoir un peu touché à irrlicht, je me rends compte qu'effectivement je peux le faire rapidement seul.
Si jamais j'ai un pb, je te redemanderai ton code
teto
Messages : 19 Date d'inscription : 2010-08-29
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Tue Aug 31, 2010 8:58 am
J'ai qques soucis Juste pour signaler que il y a ambiguité quand on appelle getID d'un IRRsystem car il sait pas choisir entre le getID de Registerable ou du SceneNode (dont hérite IRRSystem).
J'ai résolu ca en faisant comme suit mais d'un point de vue design on peut faire mieux je pense: system->SPK::Registerable::getID();
J'arrive a compiler le code sous irrlicht mais je peux pas vraiment tester maintenant. Je vous tiendrai au courant demain :p
Signé: le spammeur fou.
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Tue Aug 31, 2010 9:12 am
Soit çà (c'est tout à fait correct d'un point de vue design quoi qu'un peu lourd), soit tu manipules le systeme avec un System* plutot qu'un IRRSystem* comme çà çà lève l'ambiguité :
Je leverais l'ambiguité dans la version à venir en remplacant la méthode par un getSPKID() tout en gardant l'autre méthode en deprecated pour la rétro compatibilité. Merci pour tes remarques en tout cas qui me sont très utiles pour améliorer la lib.
Tu m'encourages à spammer donc j'y vais: Petite remarque en passant, spark ne fournit pas sa version de PI alors que c'est utilisé dans tous les exemples (qd on fait un copier/coller, on est obligé de remplacer les PI par M_PI ou bien définir PI). Comme tu déclare 2 fois PI dans le scope de 2 fonctions, pk ne pas créer une variable SPK_PI (ou bien SPK::PI) mais j'imagine que tu as déjà du peser le pr/contre.
Autre rq que j'ai déjà faite dans l'autre post, c'est vraiment contraire à la philosophie d'irrlicht de ne pas afficher le Node si y a pas de parent de précisé (dans irrlicht si y a pas de parent alors on le rattache au getRootSceneNode() ).
Sinon pb genant tt de mm, je crée une explosion au point 0,0,0 ca s'affiche nickel. Je fais un SPK_Copy de ce system sur lequel je change la position via system->setPosition( core::vector3df(100,100,400) ); et l'explosion s'affiche quand mm en 0,0,0 :s
matt
Ps: qd j'aurai un peu de temps je finirai de transposer le code de l'explosion vers irrlicht (y a certain truc pas évidents genre transposer le code "GLPointRenderer::loadGLExtPointSprite() && GLPointRenderer::loadGLExtPointParameter()" en utilisant irr::COpenGLExtensionHandler::queryOpenGLFeature . Par défaut irrlicht propose pas de vérifier si une extension Point_sprite est disponible (trop bas niveau), j'ai du farfouillé un peu dans le code avt ( c pas documenté xS ) )
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Pour PI ce n'est pas définie dans spark tout simplement parceque je juge que c'est en dehors du scope de la librairie. Je le définie en constante dans les démos quand j'en ai besoin et aussi en interne dans la lib mais je ne l'expose pas.
Pour le node avec un parent null je veux bien mais ca me parait pas être implémenté comme çà dans le constructeur de ISceneNode :
D'après le constructeur, si le parent est null, il n'est attaché à rien. Est ce que ce serait pas construisant son Node d'une autre manière qu'il est attaché au root si null (genre avec une factory ou autre pattern de construction) ?
Pour le setPosition tu as raison, il y a une petite modif a faire pour que ca fonctionne, je la ferais demain. En attendant, si tu appelles un updateAbsolutePosition() après le setPosition() ca devrait marcher.
Pour les extesions OpenGL, laisse tomber, utilise directement le IRRQuadRenderer. Le rendu des point étant mal géré dans Irrlicht, les point sprites ne feront pas l'affaire.
Merci pour tes remarques. Le module Irrlicht a encore besoin d'être amélioré. N'utilisant pas Irrlicht moi même, je compte sur les retours des utilisateurs pour m'aider à l'améliorer. Le module Irrlicht de la version 2 devrait être beaucoup plus en accord avec la philosophie d'Irrlicht.
[EDIT] J'ai mis sur svn les modifs. Maintenant le set de la transformée devrait fonctionner en passant par l'interface d'Irrlicht
la version du svn a l'air de marcher . Le changement de position est pris en compte maintenant sur la démo je peux pas voir si ca bouge selon le bon axe donc je vais tester sur mon projet principal.
Code:
Pour les extesions OpenGL, laisse tomber, utilise directement le IRRQuadRenderer. Le rendu des point étant mal géré dans Irrlicht, les point sprites ne feront pas l'affaire.
j'ai demandé de l'aide sur le forum d'irrlicht et bon j'abandonne, suffit de passer par les fonctions du GLRenderer pr obtenir le resultat (pr opengl :s):
Je me demandais comment savoir si mon IRRSystem est encore actif ? apparemment on le sait quand update renvoie false mais si irrlicht l'update lui mm alors je recupère pas cette valeur ? Faut-il que je vérifie groupe par groupe ?
merci pr ta réactivité et vive le Quebec libre xD
Darktib Committer
Messages : 389 Date d'inscription : 2009-07-20 Localisation : A coté de Paris
Note: il est tout de même possible de texturer des point sprite avec Irrlicht, dans le IRRPointRenderer il faut mettre une taille d'environ 40-60 voir plus. Après, c'est moins évolué que les quads. Cela peut être plus performant que les quads, mais attention, ca dépend vraiment du système (si les points doivent être très gros, genre taille à ~ 200 et +, vaut mieux utiliser les quads), enfin le mieux c'est de tester
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 42
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Fri Sep 03, 2010 4:28 am
matt wrote:
Je me demandais comment savoir si mon IRRSystem est encore actif ? apparemment on le sait quand update renvoie false mais si irrlicht l'update lui mm alors je recupère pas cette valeur ? Faut-il que je vérifie groupe par groupe ?
Regarde du coté de la méthode hasFinished() de IRRSystem.
Quote :
merci pr ta réactivité et vive le Quebec libre xD
Je suis plus au Québec en fait, j'étais exilé à Montréal l'année dernière mais je suis de nouveau en France. J'ai oublié d'updater mon statut
teto
Messages : 19 Date d'inscription : 2010-08-29
Subject: Re: [Résolu] Explosion Spark dans Irrlicht Sun Sep 05, 2010 2:15 pm
ok merci pr les infos
Sponsored content
Subject: Re: [Résolu] Explosion Spark dans Irrlicht