HomeHome  CalendarCalendar  FAQFAQ  SearchSearch  MemberlistMemberlist  UsergroupsUsergroups  RegisterRegister  Log inLog in  

Share | 
 

 [irrlicht]Déplacement d'un node

View previous topic View next topic Go down 
AuthorMessage
teto



Messages : 19
Date d'inscription : 2010-08-29

PostSubject: [irrlicht]Déplacement d'un node   Sun Aug 29, 2010 5:41 pm

Bonjour,

Tout d'abord félicitations pr Spark, c'est un super projet (québequois ?!).
J'aimerai faire la trainée des réacteurs de mon vaisseau avec Spark. Pr l'instant j'utilse un straightEmetter que j'enregistre dans un groupe puis dans un IRRSystem (pompé depuis la démo irrlicht de base).

Quand je change de position mon IRRSystem, les particules sont créées depuis le même endroit (origine) or j'aimerais qu'elles suivent le system:
Code:
   
// mon bone change de position a chaque frame
irr::scene::IBoneSceneNode* bone = _animatedNode->getJointNode("booster_left");
_leftBooster->setPosition( bone->getAbsolutePosition() );

Merci


PS1: C'est normal que le système ne s'affiche si je ne lui attribue pas de parent ?
Genre
Code:
IRRSystem* system = IRRSystem::create(0,_device->getSceneManager() );
n'afiche rien alors que si je remplace le 0 par _device->getSceneManager()->getRootSceneNode() ca s'affiche.

PS2: J'ai compilé la lib en statique pr mingw mais j'ai du corrigé 2/3 lignes incompatibles.
Back to top Go down
View user profile
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 2:15 pm

Bonjour,

Pour ne mets tu pas directement le vaisseau en tant que parent du système de particule. Comme ca le système de particule bougera avec le vaisseau.

Sinon si tu pouvais me dire les erreurs de compilation que tu as eu avec minGW, ce serait cool comme çà je l'ai corrige pour la prochaine version.
Back to top Go down
View user profile http://spark.developpez.com
Darktib
Committer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 2:27 pm

Quote :
C'est normal que le système ne s'affiche si je ne lui attribue pas de parent ?
C'est normal que le système ne s'affiche pas si tu ne lui met pas de parent, car cela est nécessaire afin que le scene manager le prenne bien en compte lors du rendu.
Back to top Go down
View user profile
teto



Messages : 19
Date d'inscription : 2010-08-29

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 4:55 pm

Darktib wrote:
Quote :
C'est normal que le système ne s'affiche si je ne lui attribue pas de parent ?
C'est normal que le système ne s'affiche pas si tu ne lui met pas de parent, car cela est nécessaire afin que le scene manager le prenne bien en compte lors du rendu.
Irrlicht mets le rootNode par défaut si aucun parent n'est précisé. Le comportement de IRRSpark diffère donc un peu de celui d'irrlicht non ?


@Juff>
Il manque une fwd declaration "class Group" dans Core/SPK_Emitter.h .
Aussi y avait un pb avec une variable membre "static const float PI" vu que j'avais deja defini un PI dans mon projet mais ca c'est pas vraiment ta faute.

quand j'utilise un ring au lieu d'un point ca plante (ptet du parce que j'ai compilé ma version de spark mais ca marchait pas avec celle livrée avec spark).
particleEmitter->setZone(Ring::create());
avec point ca marche: particleEmitter->setZone( Point::create() );
Si on definit pas de zone ca plante aussi.

Apparemment le debug me dit que ca vient du constructeur d'une string mais je suis pas allé voir plus loin.
Sinon je me demandais si spark était censé bien marcher

Puis mon émetteur est censé créer les particules se déplacant selon l'axe -Z (mon vaisseau se déplace selon +Z dans le plan X/Z) or si je fais:
particleEmitter->setDirection( Vector3D(0,0,-0.7f) );
mes particules partent vers la droite. Est-ce que c'est ma faute ou bien celle du bind irrlicht (j'utilise 1.7.1).

Voici mon code de création:
Code:
IRRSystem*
CParticleManager::createBooster(irr::scene::ISceneNode* parentNode){
//_device->getSceneManager()->getRootSceneNode()
    IRRSystem* system = IRRSystem::create( parentNode ,_device->getSceneManager() );

   IRRQuadRenderer* particleRenderer = IRRQuadRenderer::create(_device);
   particleRenderer->setTexture( _device->getVideoDriver()->getTexture("images/point.bmp"));
   particleRenderer->setTexturingMode(TEXTURE_2D);
   particleRenderer->setScale(1.f,1.f);
   particleRenderer->setBlending(BLENDING_ADD);
   particleRenderer->enableRenderingHint(DEPTH_WRITE,false);

   // Model
   Model* particleModel = Model::create(FLAG_RED | FLAG_GREEN | FLAG_BLUE, FLAG_ALPHA, FLAG_RED | FLAG_GREEN | FLAG_BLUE);
   particleModel->setParam(PARAM_ALPHA,0.8f,0.2f); // constant alpha
   particleModel->setLifeTime(2.0f,3.0f);

   // Emitter
   //SphericEmitter* particleEmitter = StraightEmitter::create(Vector3D(0.0f,1.0f,0.0f),0.1f * M_PI,0.1f * M_PI);
   StraightEmitter* particleEmitter = StraightEmitter::create();

//create (const Vector3D &position=Vector3D(0.0f, 0.0f, 0.0f), const Vector3D &normal=Vector3D(0.0f, 1.0f, 0.0f), float minRadius=0.0f, float maxRadius=1.0f)
   // normale du ring
   // Z
   //particleEmitter->setZone(Ring::create(Vector3D(0.0f, 0.0f, 0.0f), Vector3D(0.0f, 1.0f, 0.0f)  ));
   //Vector3D(0.0f,0.02f,0.0f)
   // La zone definit la forme et la position du point dans l'univers
   particleEmitter->setZone(Point::create());
   particleEmitter->setFlow(30);  // nb de particules par unite de temps donne
   particleEmitter->setDirection( Vector3D(0,0,0.7f) );

   //Utiliser irr2spk() pr convertir vecteur
   //particleEmitter->setDirection(Vector3D());
   particleEmitter->setForce(1.4f,1.5f);

   // particle group 2nd param = capacite du pool
   Group* particleGroup = Group::create(particleModel,2100);
   particleGroup->addEmitter(particleEmitter);
   particleGroup->setRenderer(particleRenderer);
   //particleGroup->addModifier(obstacle);
   //particleGroup->setGravity(gravity);
   particleGroup->enableAABBComputing(true);

    system->setParent(parentNode);
   system->addGroup(particleGroup);
    system->setAutoUpdateEnabled(true,true);
   return system;
}


Ps: quel dommage qu'il y ait pas de moter de recherche dans la doc doxygen (normalement c un parametre dans la génération de doxygen il me semble). Sinon y aurait ptet moyen de fournir un .chm ?
Back to top Go down
View user profile
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 5:06 pm

As tu bien initialisé la randomSeed avant de faire quoi que ce soit avec SPARK ? Avec Irrlicht tu peux faire :

Code:

SPK::randomSeed = device->getTimer()->getRealTime();

Sinon oui cest sensé bien marcher. Après il y a sans doute quelques bugs mais chez toi il y a un problème apparement.
Back to top Go down
View user profile http://spark.developpez.com
teto



Messages : 19
Date d'inscription : 2010-08-29

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 6:59 pm

J'avais pas mis à jour la randomSeed mais mm en faisant comme tu dis le bug persiste.

J'ai recompilé la lib en mode debug et mon gdb trouve une erreur dans cette partie (qd j'essaye de créer une Ring zone) :

Code:
   const std::string NO_NAME;

   Registerable::Registerable() :
      ID(NO_ID),
      nbReferences(0),
      shared(false),
      destroyable(true),
      name(NO_NAME)        // Ici ca plante
   {}

Ci joint la trace
Quote :

#0 00000000 0x00474632 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string() (??:??)
#1 0040D3C5 Registerable(this=0x4b0260) (D:\projets\SPARK_1_05_03\src\Core\SPK_Registerable.cpp:36)
#2 00412277 Zone(this=0x4b0260, position=@0x28fed4) (D:\projets\SPARK_1_05_03\src\Core\SPK_Zone.cpp:31)
#3 0041327A Point(this=0x4b0260, position=@0x28fed4) (D:\projets\SPARK_1_05_03\src\Extensions\Zones\SPK_Point.cpp:30)
#4 0041335A __static_initialization_and_destruction_0(__initialize_p=1, __priority=65535) (D:\projets\SPARK_1_05_03\src\Extensions\Zones\SPK_Point.cpp:27)
#5 00413382 global constructors keyed to _ZN3SPK11defaultZoneE() (D:\projets\SPARK_1_05_03\src\Extensions\Zones\SPK_Point.cpp:40)
#6 00000000 0x00425b82 in __do_global_ctors() (??:??)
#7 00000000 0x00401095 in __mingw_CRTStartup() (??:??)
#8 00000000 0x00401148 in mainCRTStartup() (??:??)

J'ai créé un petit projet de test/sandbox basé sur irrlicht basic pr tester et ca fait le mm pb.
Back to top Go down
View user profile
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Mon Aug 30, 2010 7:47 pm

En effet il y a un petit problème du a l'ordre d'initialisation des variables statiques. C'est à cause de la zone par défaut. Comme c'est un problème non deterministe, on me l'avait jamais rapporté. Mais c'est quand même bizarre que çà arrive parceque tout le code du noyau est dans la même unité de compilation. Tu as bien compilé SPK_All.cpp ?

Enfin en attendant tu peux remplacer dans le constructeur NO_ID par 0 et NO_NAME par "". Ca devrait marcher. Je corrigerai ce bug dans la prochaine version de maintenance. Dis moi ce que ca donne.
Back to top Go down
View user profile http://spark.developpez.com
teto



Messages : 19
Date d'inscription : 2010-08-29

PostSubject: Re: [irrlicht]Déplacement d'un node   Tue Aug 31, 2010 4:55 am

J'ai bien compilé SPK_All.cpp et SPK_irr.cpp (j'ai supprimé le SFML et GL du projet).

Ta solution fonctionne !!
Je vais donc reessayer de résoudre mes pb d'interaction avec irrlicht.

Sinon pr une solution plus globale, voici ce que donne la faq
http://cpp.developpez.com/faq/cpp/?page=static#CONSTRUCTEUR_static_fiasco

J'utilise gcc 4.4.1 (mingw install TDM).
Back to top Go down
View user profile
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Tue Aug 31, 2010 5:28 am

Je connais bien le problème de l'initialisation des variables statiques. Normalement il ne devrait pas y avoir de problème les variables étant dans la même unité de compilation. Enfin de toute facon c'est un bug et dans l'opensource les bugs sont corrigés et identifiés en fonctions des retours utilisateurs comme j'ai pas sous la main une armée de testeurs Very Happy. Je vais corriger çà et releaser une nouvelle version dès que possible. Merci à toi.
Back to top Go down
View user profile http://spark.developpez.com
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Wed Sep 01, 2010 2:46 pm

J'ai mis des modif sur le svn qui devrait fixer les quelques bugs. Peux tu essayer chez toi et me dire s'il y a toujours des problèmes à la compil et/ou à l'execution. merci !

teto wrote:
Irrlicht mets le rootNode par défaut si aucun parent n'est précisé. Le comportement de IRRSpark diffère donc un peu de celui d'irrlicht non ?

Es tu sur de cela, je n'ai rien vu dans le code d'Irrlicht le confirmant.
Back to top Go down
View user profile http://spark.developpez.com
teto



Messages : 19
Date d'inscription : 2010-08-29

PostSubject: Re: [irrlicht]Déplacement d'un node   Thu Sep 02, 2010 5:24 am

Ok je vais essayer via le svn ce soir. Pour créer les nodes tu es censé passer par la factory sceneManager via les fonctions addXXXXSceneNode (XXX etant camera/mesh/sphereetc...) et si tu regardes dans CSceneManager.cpp, tu rremarques ca:
if (!parent) parent = this;

Ci joint l'extrait:
Code:
//! the returned pointer must not be dropped.

IMeshSceneNode* CSceneManager::addMeshSceneNode(IMesh* mesh, ISceneNode* parent, s32 id,

   const core::vector3df& position, const core::vector3df& rotation,

   const core::vector3df& scale, bool alsoAddIfMeshPointerZero)

{

   if (!alsoAddIfMeshPointerZero && !mesh)

      return 0;



   if (!parent)

      parent = this;

Pour le svn, le code se trouve dans un répertoire particulier ?
Back to top Go down
View user profile
Juff
Developer


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

PostSubject: Re: [irrlicht]Déplacement d'un node   Thu Sep 02, 2010 5:38 am

Ok c'est en passant par le scene manager. En passant par un constructeur il ne le fait pas. Je vais regarder s'il y a moyen de passer par le scene manager ce soir.
Pour SVN, c'est dans le repertoir trunk. L'addresse du svn est sur le forum.
Back to top Go down
View user profile http://spark.developpez.com
Sponsored content




PostSubject: Re: [irrlicht]Déplacement d'un node   Today at 9:29 am

Back to top Go down
 
[irrlicht]Déplacement d'un node
View previous topic View next topic Back to top 
Page 1 of 1
 Similar topics
-
» Tree View: Expanding a node by searching for element by text using xpath

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