HomeHome  CalendarCalendar  FAQFAQ  SearchSearch  MemberlistMemberlist  UsergroupsUsergroups  RegisterRegister  Log inLog in  

Share | 
 

 [Résolu]Créer une sphere de particule

View previous topic View next topic Go down 
AuthorMessage
nabouill



Messages : 12
Date d'inscription : 2010-07-13

PostSubject: [Résolu]Créer une sphere de particule   Sat Aug 07, 2010 7:56 pm

Bonjour,
Je cherche à créer une sphère de fumé (du genre pour une smoke grenade). Le problème que j'ai, c'est que quand je crée un system, ce n'est enfaite que un drap que j'ai devant les yeux, qui me donne l'impression que c'est une sphère de loin, mais je vois bien quand je suis tout près que ce n'est qu'un voile bien plat qui est devant moi. Et même pire, si je me trouve une seul unité derrière le system, je ne le vois même plus.
Donc ma question, est-il possible de créer une sphère de particule d'un rayon X et pouvoir se positionner dedans, la traverser, tourné autour...
J'imagine bien sûr que c'est possible, mais j'ai essayé plein plein de chose pendant des heures pour le faire, je ne trouve pas. est-ce que quelqu'un voudrais bien ma mettre sur la voie s'il vous plait ?

D'avance merci.


Last edited by nabouill on Sat Aug 21, 2010 4:05 am; edited 2 times in total
Back to top Go down
View user profile
Juff
Developer


Messages : 539
Date d'inscription : 2009-07-14
Age : 34

PostSubject: Re: [Résolu]Créer une sphere de particule   Mon Aug 09, 2010 3:07 pm

Bonjour, je ne comprend pas trop ou tu bloques.
Combien de particules as tu dans ton système ?

Le plus simple est je pense que tu partes de la fumée de la démo fire mais au lieu de générer en continue, tu génères x particules d'un coup a partir d'un RandomEmitter (pour qu'elles partent dans toutes les directions). Après c'est du réglage.

Après en effet chaque particule est un plan 2D qui fait face a la caméra mais tu peux simuler un volume avec plusieurs particules.

Sinon poste le code de ton system et je jetterai un coup d'oeil.
Back to top Go down
View user profile http://spark.developpez.com
nabouill



Messages : 12
Date d'inscription : 2010-07-13

PostSubject: Re: [Résolu]Créer une sphere de particule   Tue Aug 10, 2010 6:03 pm

Merci pour ta réponse. j'avoue avoir bien de la difficulté a bien comprendre comment marche un système de particule. J'ai quand même essayé pas mal de chose en recopiant depuis les démos, mais ça me donne toujours un peu près le même effet
Voici un bout de code de mon systeme:
Code:

 Interpolator* interpolator = NULL; // pointer to an interpolator that is used to retrieve interpolators
   Sphere* explosionSphere = Sphere::create(Vector3D(0.0f,0.0f,0.0f),0.4f);// This zone will be used by several emitters

    /// S M O K E
    // smoke renderer
IRRQuadRenderer* smokeRenderer = IRRQuadRenderer::create(device);
smokeRenderer->setTexturingMode(TEXTURE_2D);
smokeRenderer->setTexture(driver->getTexture("media/Textures/Explosion/fire2.bmp"));
smokeRenderer->setAtlasDimensions(2,2); // uses 4 different patterns in the texture
smokeRenderer->setBlending(BLENDING_ADD);
smokeRenderer->enableRenderingHint(DEPTH_WRITE,false);
smokeRenderer->setShared(true);
smokeRenderer->setScale(500.0,500.0);
// smoke model
Model* smokeModel = Model::create(FLAG_RED | FLAG_GREEN |
    FLAG_BLUE | FLAG_ALPHA | FLAG_SIZE |
    FLAG_ANGLE | FLAG_TEXTURE_INDEX,
    FLAG_SIZE | FLAG_ANGLE,
    FLAG_SIZE | FLAG_ANGLE | FLAG_TEXTURE_INDEX,
    FLAG_ALPHA);
smokeModel->setParam(PARAM_RED,0.2f);
smokeModel->setParam(PARAM_GREEN,0.2f);
smokeModel->setParam(PARAM_BLUE,0.2f);
smokeModel->setParam(PARAM_SIZE,0.6f,0.8f,1.0f,1.4f);
smokeModel->setParam(PARAM_TEXTURE_INDEX,0.0f,4.0f);
smokeModel->setParam(PARAM_ANGLE,0.0f,PI * 0.5f,0.0f,PI * 0.5f);
smokeModel->setLifeTime(8.0f,8.0f);
smokeModel->setShared(true);

interpolator = smokeModel->getInterpolator(PARAM_ALPHA);
interpolator->addEntry(0.0f,0.0f);
interpolator->addEntry(0.4f,0.4f,0.6f);
interpolator->addEntry(0.6f,0.4f,0.6f);
interpolator->addEntry(1.0f,0.0f);
    // smoke emitter
RandomEmitter* smokeEmitter = RandomEmitter::create();
smokeEmitter->setZone(Sphere::create(Vector3D(0.0f,0.0f,0.0f),0.6f),false);
smokeEmitter->setFlow(-1);
smokeEmitter->setTank(15);
smokeEmitter->setForce(0.03f,0.06f);
    // smoke group
Group* smokeGroup = Group::create(smokeModel,10);
smokeGroup->addEmitter(smokeEmitter);
smokeGroup->setRenderer(smokeRenderer);
smokeGroup->setGravity(Vector3D(0.0f,0.05f,0.0f));

///*******************************************

    /// S Y S T E M
IRRSystem* system = IRRSystem::create(sceneMgr->getRootSceneNode(),sceneMgr);

system->addGroup(smokeGroup);
system->setAutomaticCulling(EAC_OFF);
system->setTransformPosition(Vector3D(posi.X,posi.Y,posi.Z));
system->updateTransform();

Et voici ce que ça donne:


J'ai aussi essayé avec un "SphericEmitter" mais j'avais un peu près le même genre de problème.
J'avoue ne pas bien comprendre. Si tu voulais bien jeter un oeil...

Merci d'avance.

edit: version de Spark utilisé : 1.05.02
Back to top Go down
View user profile
Juff
Developer


Messages : 539
Date d'inscription : 2009-07-14
Age : 34

PostSubject: Re: [Résolu]Créer une sphere de particule   Tue Aug 10, 2010 6:59 pm

Ok, j'ai regardé ton code et en fait c'est parceque tu utilises peu de particules très grande. En plus elle ne change pas de position parceque la force que tu leur donne à l'émission est très petite. J'ai l'impression que ton repère est plus ou moins en centimètres (d'après la taille de tes particules) et tu donne une force de 3 a 6 N/s² donc en gros la vitesse de tes particules augmente de 3 à 6 cm par seconde.

J'ai fait quelques modification dans ton système, ca devrait être mieux. Je vais t'expliquer en détails :

Déjà on va réduire la taille des particules :
Code:
smokeRenderer->setScale(100.0f,100.0f);

Par contre on augmente la différence de taille entre la taille a la naissance et la taille a la mort des particules (pour donner un effet de fumée qui s'étend). Don la on a une taille max de 300 (100 * 3) contre 700 (500 * 1.4) pour ton système initial.
Code:
smokeModel->setParam(PARAM_SIZE,0.6f,0.8f,2.0f,3.0f);

Ensuite les particules étend plus petites, on va augmenter leur nombre (c'est ca qui va permettre l'effet de volume) :
On demande a l'émetteur d'emettre 75 particules :
Code:
smokeEmitter->setTank(75);
Du coup on définie la capacité maximum du groupe a 75. Attention dans ton système, l'émetteur emet 15 particules mais le groupe ne peux en contenir que 10. Du coup 5 particules ne sont pas émise.
Code:
Group* smokeGroup = Group::create(smokeModel,75);

Finalement on va augmenter la force d'émission pour que la fumée occupe de plus en plus de place. On met une force assez puissante :
Code:
smokeEmitter->setForce(75.0f,200.0f);
Mais si on laisse comme çà les particules vont continuer a l'infinie et ca va être moche. On veut que la fumée gagne en volume rapidement (explosion de la grenade) puis ralentisse ensuite. On va donc rajouter une friction au groupe qui va freiner les particules :
Code:
smokeGroup->setFriction(1.0f);

Voila c'est vite fait mais ca devrait être mieux quand meme. Après il y a de beaucoup améliorer le truc. Par exemple en mettant un petit random dans la durée de vie des particules pour que l'effet de dissipation soit plus réaliste...

Un autre truc ce serait de réduire un peu l'alpha, de changer le blend mode en BLEND_ALPHA et eventuellement de mettre une texture de fumée avec plus de volume. Je ferai éventuellemt un test quand j'aurai le temps.


Back to top Go down
View user profile http://spark.developpez.com
nabouill



Messages : 12
Date d'inscription : 2010-07-13

PostSubject: Re: [Résolu]Créer une sphere de particule   Thu Aug 12, 2010 2:07 am

Ok merci pour beaucoup pour toute ces précisions, je comprend vraiment les paramètre du système Smile
Je ne savais absolument pas a quoi correspondait la setTank() ou même le setScale() je pensait que c'était la taille qu'aurait le système (j'avais rien compris quoi)
Maintenant ma smoke grenade commence vraiment à ressemblé a quelque chose . Il ne me reste plus qu'à affiné un peut tout çà.

Aussi te serait-il possible (si je n'abuse) de vite fait m'expliquer à quoi corresponde:
-setFlow(float)
-setShared(bool)
et setZone(Sphere::create(Vector3D(0.0f,0.0f,0.0f),1.0f),false).
J'ai pas mal essayé de bricoler le setZone, par exemple en changeant le 1 en 100, j'ai aperçu que le systeme prenait du volume en profondeur, mais je n'ai pas bien compris la encore a quoi correspond tout çà, quand au 2 autres je ne sais pas du tout Neutral

Merci d'avance.
Back to top Go down
View user profile
Darktib
Committer


Messages : 389
Date d'inscription : 2009-07-20
Localisation : A coté de Paris

PostSubject: Re: [Résolu]Créer une sphere de particule   Thu Aug 12, 2010 1:47 pm

setFlow = débit de l'émetteur. Par exemple, setFlow(100) veut dire que l'émetteur émettra 100 particules par secondes.
setShared = cette fonction vient de la classe de base Registerable, elle permet de choisir si quand 2 éléments(par ex, 2 groupes) veulent utiliser un 3eme élément (commun aux 2), ce 3 eme élément sera vraiment partagé entre les 2 (true) ou copié pour que chacun ait sa copie (false).
setZone(Sphere::create(Vector3D(0.0f,0.0f,0.0f),1.0f),false):
- le premier paramètre est une zone, ici une sphere. Pour rentrer dans les détails, cette sphère à pour position (0,0,0) (le Vector3D que tu vois), et pour rayon 1.
- le deuxième paramètre indique si l'émission se fera dans toute la zone (true) ou uniquement aux bords de celle-ci (false).

PS: et accessoirement, il y a une doc...
Back to top Go down
View user profile
nabouill



Messages : 12
Date d'inscription : 2010-07-13

PostSubject: Re: [Résolu]Créer une sphere de particule   Fri Aug 20, 2010 2:14 am

Ok merci beaucoup. Je pense du coup avoir pas trop mal compris tout çà.
Après avoir essayer pas mal de chose voici ce que ça donne:

J'avoue être assez content du résultat Smile
Quand pensez-vous ?
Back to top Go down
View user profile
Darktib
Committer


Messages : 389
Date d'inscription : 2009-07-20
Localisation : A coté de Paris

PostSubject: Re: [Résolu]Créer une sphere de particule   Fri Aug 20, 2010 7:29 am

Ca rend très bien, par contre le blanc est peut être un poil trop 'vif' - a moins que l'effet soit recherché, dans ce cas ca serait réussi!

Peut-être essayer le mode ALPHA pour le SPK::BlendingMode du renderer ?
Back to top Go down
View user profile
nabouill



Messages : 12
Date d'inscription : 2010-07-13

PostSubject: Re: [Résolu]Créer une sphere de particule   Sat Aug 21, 2010 4:04 am

Le blanc est plus vif au milieu pour qu'un ne voit rien de ce qui se passe autour quand on est au milieu. Sans ça, la fumée n'était pas assez épaisse, et de l'intérieur on voyait tout ce qui se passait à l'extérieur. Donc c'est vrai que ça donne un peut un effet "grenade flash" en même temps. Mais je trouve ça pas trop mal.
Peut-être qu'un de ces jour, (en espérant pour moi) tu pourras le constater par toi même en live, si mon projet avance bien.
Merci pour ton aide.
A+
Back to top Go down
View user profile
Juff
Developer


Messages : 539
Date d'inscription : 2009-07-14
Age : 34

PostSubject: Re: [Résolu]Créer une sphere de particule   Sat Aug 21, 2010 9:49 am

Ouais ca rend bien. Attention par contre a pas avoir trop de particules trop grosses à l'écran qui se superposent sinon il risque d'y avoir une chute de framerate quand tu es au milieu de la fumée à cause du fillrate.

Pour les modes de blending, c'est vrai que normalement pour de la fumée il faudrait plutôt utiliser un blending alpha plutot qu'un blending additif. L'additif étant en général utilisé pour les particules sensés émettre de la lumière (flammes , étincelles, effets magiques...).

Maintenant pour un blending alpha, il faudrait utiliser une autre texture avec des effets d'ombrages dedans pour donner du volume. Il faudra aussi certainement trier les particules en z (alors que pour l'additif, pas besoin de tri). La fumée du tuto 2 en SFML est réalisée avec un blending de ce type par exemple.
Back to top Go down
View user profile http://spark.developpez.com
Sponsored content




PostSubject: Re: [Résolu]Créer une sphere de particule   Today at 3:38 am

Back to top Go down
 
[Résolu]Créer une sphere de particule
View previous topic View next topic Back to top 
Page 1 of 1
 Similar topics
-
» Shadow Sphere and Mystic Knights manga
» Queen's Hall Wigan

Permissions in this forum:You cannot reply to topics in this forum
 :: Forum Francais :: Questions (fr)-
Jump to: