Historique des modifications - Message

Message #10153

Sujet: Taille d'une boudingBox


Type Date Auteur Contenu
Dernière modification 24-07-2011 10:01:44 Superjaco
J'utilisait déjà des valeurs fixes avant, et sa fonctionnez bien, jusqu'à se que je commence à intégrer l'ia.
En effet en utilisant des valeurs fixe, les écart bb-elipsoide de différent mesh était différents se qui faisait de gros foirage lorsque les 2 nodes avancaient l'un vers l'autre (l'une des ellipsoide rentrait dans la bouding box de l'autre, du fait du mouvement du 2eme mesh, donc les meshs se coincait entre eux).
Je cherche donc à se que les valeurs de l'ellipsoide se fasse automatiquement pour 2 raison :
  • que l'ellipsoide colle a la bb, se qui permet des collisions précise et qui fonctionne parfaitement.
  • par simplicité, je ne vais m'amuser à chercher les tailles correct des ellipsoide de tt mes personnages.


Donc il ne me faut pas de valeur fixe, j'ai déjà passé cet étape.


Voilà le code du méta :

pNode->removeAnimators();
irr::scene::IMetaTriangleSelector * meta = m_scnMgr->createMetaTriangleSelector();

irr::core::array<irr::scene::ISceneNode *> nodes;
m_scnMgr->getSceneNodesFromType(irr::scene::ESNT_ANY, nodes); // Find all nodes

for (irr::u32 i=0; i < nodes.size(); i++)
{
irr::scene::ISceneNode * node = nodes;
irr::scene::ITriangleSelector * selector = 0;
if (node->getID() != pNode->getID() )
{
switch(node->getType())
{
case irr::scene::ESNT_ANIMATED_MESH:
selector = m_scnMgr->createTriangleSelectorFromBoundingBox(node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);
break;

case irr::scene::ESNT_MESH:
selector = m_scnMgr->createTriangleSelectorFromBoundingBox(node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);

case irr::scene::ESNT_TERRAIN:
selector = m_scnMgr->createTerrainTriangleSelector((irr::scene::ITerrainSceneNode*)node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);
break;

case irr::scene::ESNT_OCTREE:
selector = m_scnMgr->createOctreeTriangleSelector(((irr::scene::IMeshSceneNode*)node)->getMesh(), node);
break;

default:

break;
}
}

if(selector)
{
meta->addTriangleSelector(selector);
selector->drop();
}
}


irr::scene::ISceneNodeAnimatorCollisionResponse* anim = m_scnMgr->createCollisionResponseAnimator
(meta, pNode,
(m_perso->getNode()->getBoundingBox().MaxEdge - m_perso->getNode()->getBoundingBox().getCenter()),
irr::core::vector3df(0, -1, 0), irr::core::vector3df(0,0,0));
pNode->addAnimator(anim);

meta->drop();


edit : en relisant mon code je viens de voir se que je m'étais trompé.
J'ai réctifié, voilà ce que sa me donne sur le rendu :
http://img263.imageshack.us/img263/6980/nouvelleimagebitmap3a.png

faeri et sydney ne touche pas tt à fait le sol, mais sa je pense que c'est rectifiable avec le cinquieme argument : Le centre de l'elips ne doit pas etre le centre du mesh mais le centre de la bb.

Par contre pour le nain je vois pas...
Création du message 24-07-2011 09:48:59 Superjaco
J'utilisait déjà des valeurs fixes avant, et sa fonctionnez bien, jusqu'à se que je commence à intégrer l'ia.
En effet en utilisant des valeurs fixe, les écart bb-elipsoide de différent mesh était différents se qui faisait de gros foirage lorsque les 2 nodes avancaient l'un vers l'autre (l'une des ellipsoide rentrait dans la bouding box de l'autre, du fait du mouvement du 2eme mesh, donc les meshs se coincait entre eux).
Je cherche donc à se que les valeurs de l'ellipsoide se fasse automatiquement pour 2 raison :
  • que l'ellipsoide colle a la bb, se qui permet des collisions précise et qui fonctionne parfaitement.
  • par simplicité, je ne vais m'amuser à chercher les tailles correct des ellipsoide de tt mes personnages.


Donc il ne me faut pas de valeur fixe, j'ai déjà passé cet étape.


Voilà le code du méta :

pNode->removeAnimators();
irr::scene::IMetaTriangleSelector * meta = m_scnMgr->createMetaTriangleSelector();

irr::core::array<irr::scene::ISceneNode *> nodes;
m_scnMgr->getSceneNodesFromType(irr::scene::ESNT_ANY, nodes); // Find all nodes

for (irr::u32 i=0; i < nodes.size(); i++)
{
irr::scene::ISceneNode * node = nodes;
irr::scene::ITriangleSelector * selector = 0;
if (node->getID() != pNode->getID() )
{
switch(node->getType())
{
case irr::scene::ESNT_ANIMATED_MESH:
selector = m_scnMgr->createTriangleSelectorFromBoundingBox(node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);
break;

case irr::scene::ESNT_MESH:
selector = m_scnMgr->createTriangleSelectorFromBoundingBox(node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);

case irr::scene::ESNT_TERRAIN:
selector = m_scnMgr->createTerrainTriangleSelector((irr::scene::ITerrainSceneNode*)node);
node -> setMaterialFlag(irr::video::EMF_LIGHTING, true);
break;

case irr::scene::ESNT_OCTREE:
selector = m_scnMgr->createOctreeTriangleSelector(((irr::scene::IMeshSceneNode*)node)->getMesh(), node);
break;

default:

break;
}
}

if(selector)
{
meta->addTriangleSelector(selector);
selector->drop();
}
}


irr::scene::ISceneNodeAnimatorCollisionResponse* anim = m_scnMgr->createCollisionResponseAnimator
(meta, pNode,
(m_perso->getNode()->getBoundingBox().MaxEdge - m_perso->getNode()->getBoundingBox().getCenter()),
irr::core::vector3df(0, -1, 0), irr::core::vector3df(0,0,0));
pNode->addAnimator(anim);

meta->drop();


edit : en relisant mon code je viens de voir se que je m'étais trompé.
J'ai réctifié, voilà ce que sa me donne sur le rendu :
http://img263.imageshack.us/img263/6980/nouvelleimagebitmap3a.png

faeri et sydney ne touche pas tt à fait le sol, mais sa je pense que c'est rectifiable avec le cinquieme argument : Le centre de l'elips ne doit pas etre le centre du mesh mais le centre de la bb.

Par contre pour le nain je vois pas...

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
117 invités en ligne
membre en ligne: -
RSS Feed