06-05-2009 12:11:09
- rainbow
- Membres
- Date d'inscription:
- Messages: 7
- IP: 86.203.50.170
- Courriel
Re-bonjour à vous!
Je suis de nouveau face à une petit problème bien ennuyeux ![]()
En effet je cherche à savoir quelle coordonnées (x,y,z) de l'espace est pointé par ma souris aux coordonnées (x,y)
Je voudrai donc faire un plan "de longueur infinie" horizontal à une altitude y=0 et tester les intersection à l'aide de Plane::getIntersectionWithLine
Cependant je créé mon plan core::plane3d<s32> plane_test(core::vector3d<int>(0,1,0),0); ainsi et les résultats ne sont pas concluants du tout pour les coordonnées z. Les coordonnées x calculées semblent bonnes mais je n'ai pas du tout les bonne coordonnées z (souvent entre 0 et 5)
Si quelqu'un pouvais me dépanner ou m'indiquer une autre méthode... ![]()
ciao !
Hors ligne
07-05-2009 20:25:20
- tmyke
- Administrateurs

- Date d'inscription:
- Messages: 1025
- IP: 90.56.126.87
- Courriel
Une histoire qui rejoint un peut je dirais le post prétendent http://forum.irrlicht.fr/viewtopic.php?id=900 et ou donc
ton problème pourrait efficacement se régler avec
l'emploie de fonction de picking, non ?
Force et sagesse...
Hors ligne
08-05-2009 09:23:55
- rainbow
- Membres
- Date d'inscription:
- Messages: 7
- IP: 86.203.116.237
- Courriel
Merci de ta réponse, je suis un peu honteux d'avoir utilisé la fonction recherché du forum et de ne même pas avoir lu le topic précédent le miens mais bon ![]()
En tout cas ça me semble intéressant oui, mais un seul problème m'arrête :
getCollisionPoint (const core::line3d< f32 > &ray, ITriangleSelector *selector, core::vector3df &outCollisionPoint, core::triangle3df &outTriangle)
Que dois-je envoyer en second argument puisque je veux l'intersection avec un plan "d'origine" de type plane3d? Je ne peux pas utiliser les fonctions du SceneManager CreateTriangleSelector... car j'utilise un simple plan et non un mesh... Comment faire ?
Et le plan d'origine est bien (0,1,0) ? non ?
Encore merci, ciao !
Hors ligne
08-05-2009 10:27:32
- dark calculator
- Membres
- Date d'inscription:
- Messages: 153
- IP: 88.178.191.172
- Courriel
moi je ferais un getRayFromScreenCoordinates() on recupere une ligne et il te suffit de calculer son intersection avec ton plan(je suppose qu'une fonction existe) ou si ton plan est bien y=0, il suffit de prendre les coordonnées du point dont le y est 0.
EDIT :
getIntersectionWithLine de plan3d calcul l'intersection il faut juste passer le vecteur directeur de la ligne et un point.
il y a aussi getIntersectionWithLineLimited qui prends les deux extrémités de la ligne en argument a la place(peut etre mieu pour line3d)
Hors ligne
14-05-2009 17:45:22
- rainbow
- Membres
- Date d'inscription:
- Messages: 7
- IP: 90.59.191.254
- Courriel
Merci pour votre réponse cependant je ne suis pas bien avancé depuis le temps --'
Voici ce que je fais :
_App_Scene->setActiveCamera(...);
_App_Driver->setViewPort(...); //(j'initialise la bonne zone de l'écran puisque je bosses en splited screen)
core::plane3d<s32> origin_plan(core::vector3d<int>(0,1,0),0);
core::line3d<f32> ray = this->_App_Scene->getSceneCollisionManager()->getRayFromScreenCoordinates(core::position2d<int>(X_Souris, Y_Souris),Actual_VP->Get_Camera());
core::vector3d<s32> out; //coordonnée du point de la nouvelle position
core::vector3d<s32> start = core::vector3d<s32>((s32)ray.start.X, (s32)ray.start.Y, (s32)ray.start.Z);
core::vector3d<s32> end = core::vector3d<s32>((s32)ray.end.X, (s32)ray.end.Y, (s32)ray.end.Z);
origin_plan.getIntersectionWithLimitedLine(start, end, out);Et quand je teste la valeur de la variable "out" et bien tout est à 0
Merci d'avance !
Hors ligne
14-05-2009 18:48:50
- dark calculator
- Membres
- Date d'inscription:
- Messages: 153
- IP: 88.178.191.172
- Courriel
Ah vérifier mais je suppose que ray.start est un vector donc pourquoi passer par un constructeur ?
Sinon les viewports je pense que sa peut mettre le basard.
Autrement je vois pas de problème, il faudrait faire un affichage des points pour voir quels valeurs ils ont.
Hors ligne



