Historique des modifications - Message

Message #6643

Sujet: Problême pour récupérer un Node après clic sur lui


Type Date Auteur Contenu
Création du message 08-08-2009 07:50:59 tmyke
Bon, je sais pas si cela peut aider, mais dans N3xtD, pour faire un test de picking j'utilise cette façon de faire:

Code c++ :


// pickType est un flag qui spécifie si l'on fait un picking seulement sur les boundingBox de MEsh (plus rapide quand
// même, ou si l'on veut quand même un picking sur les faces de l'objet


	core::position2d<s32> pos(mousex,mmousey);
	scene::ISceneNode *node = NULL;

	node = globenv.smgr->getSceneCollisionManager()->getSceneNodeFromScreenCoordinatesBB( pos );

	if( node == globenv.smgr->getRootSceneNode() )	return NULL;
	if( node == camera )				return NULL;


	if (pickType == ENT_PICKBOX)	return node;


	core::vector3df vPickRayDir;
	core::vector3df vPickRayOrig;

	// compute les vecteur 3D Ray, routine perso
	CameraVectorCompute3D(mx, my, &vPickRayOrig, &vPickRayDir);
	
	vPickRayDir = (vPickRayDir*distance) + vPickRayOrig;
	const core::line3d< f32 > ray(vPickRayOrig.X, vPickRayOrig.Y, vPickRayOrig.Z, vPickRayDir.X, vPickRayDir.Y, vPickRayDir.Z);


	scene::IMeshSceneNode *mesh = (scene::IMeshSceneNode*) node;
	scene::ITriangleSelector *tri = globenv.smgr->createTriangleSelector( mesh->getMesh(), mesh ); 

	bool res = globenv.smgr->getSceneCollisionManager()->getCollisionPoint( ray, tri, outCollisionPoint, outTriangle);
	tri->drop();
	if(res) return mesh;
   return NULL;

Cela fonctionne, du moins jusqu'a preuve du contraire, et je n'ai pas de soucis de profondeur des mesh, il me selectionne toujours le mesh au premier
plan. (j'utilise toujours la version 1.5.0 d'Irrlicht).

a+

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