#0 

06-05-2009 14:11:09

rainbow
Petit nouveau
Date d'inscription: 11-01-2009
Messages: 7

Re-bonjour à vous!

Je suis de nouveau face à une petit problème bien ennuyeux sad
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... smile

ciao !

Hors ligne


#1 

07-05-2009 22:25:20

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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


#2 

08-05-2009 11:23:55

rainbow
Petit nouveau
Date d'inscription: 11-01-2009
Messages: 7

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 sad
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


#3 

08-05-2009 12:27:32

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#4 

14-05-2009 19:45:22

rainbow
Petit nouveau
Date d'inscription: 11-01-2009
Messages: 7

Merci pour votre réponse cependant je ne suis pas bien avancé depuis le temps --'
Voici ce que je fais :

Code:

_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 sad En gros quelque chose doit encore clocher... Savez-vous quoi ?

Merci d'avance !

Hors ligne


#5 

14-05-2009 20:48:50

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
25 invités en ligne
Aucun membre connecté
RSS Feed