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
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 ?
Hors ligne
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 !
Dernière modification par rainbow (08-05-2009 11:27:48)
Hors ligne
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)
Dernière modification par dark calculator (08-05-2009 12:35:23)
Hors ligne
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 En gros quelque chose doit encore clocher... Savez-vous quoi ?
Merci d'avance !
Hors ligne
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
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 71 invités en ligne Aucun membre connecté RSS Feed |