| [irrlicht]Déplacement d'un node | |
|
|
Author | Message |
---|
teto
Messages : 19 Date d'inscription : 2010-08-29
| Subject: [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. | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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. | |
|
| |
Darktib Committer
Messages : 389 Date d'inscription : 2009-07-20 Localisation : A coté de Paris
| Subject: 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. | |
|
| |
teto
Messages : 19 Date d'inscription : 2010-08-29
| Subject: 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 ? | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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. | |
|
| |
teto
Messages : 19 Date d'inscription : 2010-08-29
| Subject: 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. | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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. | |
|
| |
teto
Messages : 19 Date d'inscription : 2010-08-29
| Subject: Re: [irrlicht]Déplacement d'un node Tue Aug 31, 2010 4:55 am | |
| | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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 . Je vais corriger çà et releaser une nouvelle version dès que possible. Merci à toi. | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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. | |
|
| |
teto
Messages : 19 Date d'inscription : 2010-08-29
| Subject: 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 ? | |
|
| |
Juff Developer
Messages : 539 Date d'inscription : 2009-07-14 Age : 41
| Subject: 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. | |
|
| |
Sponsored content
| Subject: Re: [irrlicht]Déplacement d'un node | |
| |
|
| |
| [irrlicht]Déplacement d'un node | |
|