Pages: 1
- Accueil forums
- » Collisions
- » Tester une collision entre un impact et un mesh
13-03-2010 13:45:28
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 79.85.232.12
- Courriel
Bonjour,
Voila je commence à vraiment saturer de perdre mon temps à faire des camera->getPosition() pour tester la position du joueur et faire réagir certains éléments en fonction de cela.
J'ai fait une classe interActionArme qui gére le tire et l'impact de mon flingue avec la map et tout ce qui est lier à la map et je voudrais tester dans ma classe jeu.cpp si je tire sur ce node alors la porte s'ouvre par exemple.
Est-ce que je peut réaliser ce test if( ....) { ouvrirPorte == true;} ?
Que dois je mettre dans les parenthéses ?
merci bien !
Hors ligne
13-03-2010 14:01:40
- nabouill
- Membres

- Date d'inscription:
- Messages: 242
- IP: 77.195.185.153
- Courriel
Je pense qu'il faudrait faire un test de collision entre la balle de ton flingue et la porte, en gros
Code c++ :
if(estEnCollision(balle, porte))
{
laPorteEstOuverte = true;
}
mais il faut bien sur codé la fonction "bool estEnCollision(ISceneNode *element1, ISceneNode *element2)"
Hors ligne
14-03-2010 17:01:23
- Ilovechocolat
- Membres
- Date d'inscription:
- Messages: 125
- IP: 90.28.156.122
- Courriel
Pour tester la collision entre deux objets tu a la technique des bounding box :
Code c++ :
mesh->getTransformedBoundingBox.intersectsWith(mesh2->getTransformedBoundingBox());la méthode getTransformedBoundingBox se trouve dans la class ISceneNode (et donc tout ce qui en hérite).
Hors ligne
18-03-2010 13:15:15
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
Bon après avoir bien rechercher j'ai trouvais une solution mais je n'arrive pas à savoir pourquoi çà ne marche pas :
J'utilise ceci :
virtual bool irr::scene::ISceneCollisionManager::getCollisionPoint ( const core::line3d< f32 > & ray,
ITriangleSelector * selector,
core::vector3df & outCollisionPoint,
core::triangle3df & outTriangle,
const ISceneNode *& outNode
) [pure virtual]Et mon code est :
if (sceneManager->getSceneCollisionManager()->irr::scene::ISceneCollisionManager::getCollisionPoint(line , meta, 10, tri, Ncaisse))
{
// code
}L'erreur est :
error no matching fonction call to ' irr::scene::ISceneCollisionManager::getCollisionPoint ( const core::line3d< f32 > & ray, ITriangleSelector * selector, core::vector3df & outCollisionPoint, core::triangle3df & outTriangle, const ISceneNode *& outNode ) '
merci pour votre aide
Hors ligne
18-03-2010 17:15:22
- Ilovechocolat
- Membres
- Date d'inscription:
- Messages: 125
- IP: 90.28.156.122
- Courriel
Euh, tu est sur que c'est une bien l'erreur qu'il te donne, car a ma connaissance aucuns compilo n'est capable de retrouver le nom des variables, il devrait plutôt de donner un truc comme ça :
error no matching fonction call to ' irr::scene::ISceneCollisionManager::getCollisionPoint (const core::line3d< f32 >, ITriangleSelector*, core::vector3df, core::triangle3df, const ISceneNode*) 'Est tu sur que c'est vraiment l'erreur qu'il te donne ?
Et il faudrait aussi avoir plus de code parce que des variables, c'est pas super précis .
Hors ligne
18-03-2010 19:41:47
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 195.221.123.215
- Courriel
oui je suis certain mais pourtant je pensais avoir bien rempli les paramétres de la fonction je ne vois pas pourquoi il me dit çà !!!
Hors ligne
18-03-2010 21:13:12
- nabouill
- Membres

- Date d'inscription:
- Messages: 242
- IP: 77.195.185.153
- Courriel
ton 3em paramètre
tu lui envoie un "10", alors que lui il veut un "vector3df"
Hors ligne



