Historique des modifications - Message

Message #6643

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


TypeDateAuteurContenu
Création du message08-08-2009 07:50:59tmyke
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

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
84 invités en ligne
membre en ligne: -
RSS Feed