#1 

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


#2 

07-05-2009 20:25:20

tmyke
Administrateurs
Avatar de tmyke
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


#3 

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


Hors ligne


#4 

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


#5 

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

Merci d'avance !


Hors ligne


#6 

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


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