Historique des modifications - Message

Message #11250

Sujet: Problème de node avec getCollisionPoint


Type Date Auteur Contenu
Dernière modification 11-05-2013 08:58:43 johnplayer
Tu t'y prends mal. Pour la detection prends plutot le rayon qui va vers l'avant de la camera.

Code c++ :


// segment de détection
line3df ray;
// distance maximale de détection voulue (tout objet face à toi mais trop loin ne sera pas détecté)
f32 longueur = 1000.0f;
// calcule du segment de détection
ray.start = camera->getPosition();
ray.end = normalize(camera->getTarget() - camera->getPosition())*longueur; // target-position = vecteur avant de la camera, c'est là où tu regardes
// détection de la collision
ISceneCollisionManager *collisionMgr = smgr->getCollisionManager();
vector3df outPoint;
triangle3df outTri;
ISceneNode *outNode = collisionMgr->getSceneNodeAndCollisionPointFromRay(ray, outPoint, outTri);
// si une collision a été détecté
if(outNode)
{
    outNode->setPosition(vector3df(0,100,0));
}

1/ Tu n'as plus besoin de triangleselector;
2/ Tu peux limiter la détection en distance mais aussi au niveau des nodes détectable!
Les paramètres "idBitMask" et "collisionRootNode" te servent à filtrer les nodes compatibles avec la détection.
Pour "idBitMask", ce sont des flags, regardes le tuto 7. ( node = smgr->addAnimatedMeshSceneNode(smgr->getMesh("../../media/faerie.md2"), 0, IDFlag_IsPickable | IDFlag_IsHighlightable); )
Pour "collisionRootNode", c'est là où débute ta collision. Normalement, il est à 0 donc on scrute tout les nodes enfants au RootSceneNode. Si tu mets un autre node, seul ce node et ses enfants seront soumis à la détection).
Création du message 11-05-2013 08:50:53 johnplayer
Tu t'y prends mal. Pour la detection prends plutot le rayon qui va vers l'avant de la camera.

Code c++ :


// segment de détection
line3df ray;
// distance maximale de détection voulue (tout objet face à toi mais trop loin ne sera pas détecté)
f32 longueur = 1000.0f;
// calcule du segment de détection
ray.start = camera->getPosition();
ray.end = normalize(camera->getTarget() - camera->getPosition())*longueur; // target-position = vecteur avant de la camera, c'est là où tu regardes
// détection de la collision
ISceneCollisionManager *collisionMgr = smgr->getCollisionManager();
vector3df outPoint;
triangle3df outTri;
ISceneNode *outNode = collisionMgr->getSceneNodeAndCollisionPointFromRay(ray, outPoint, outTri);
// si une collision a été détecté
if(outNode)
{
    outNode->setPosition(vector3df(0,100,0));
}

1/ Tu n'as plus besoin de triangleselector;
2/ Tu peux limiter la détection en distance mais aussi au niveau des nodes détectable!
Les paramètres "idBitMask" et "collisionRootNode" te servent à filtrer les nodes compatibles avec la détection.
Pour "idBitMask", ce sont des flags, regardes le tuto 7. ( node = smgr->addAnimatedMeshSceneNode(smgr->getMesh("../../media/faerie.md2"), 0, IDFlag_IsPickable | IDFlag_IsHighlightable); )
Pour "collisionRootNode", c'est là où débute ta collision. Normalement, il est à 0 donc on scrute tout les nodes enfants au RootSceneNode. Si tu mets un autre node, seul ce node et ses enfants seront soumis à la détection).

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
155 invités en ligne
membre en ligne: -
RSS Feed