Accueil > Forum > > > > Souris en 3D
Souris en 3D
dimanche 31 juillet 2005 à 14:49:02 |
Souris en 3D

nicographx
|
Bonjour
Dans un programme en 2D, il est facile de connaitre la correspondance entre la map et la souris : il suffit de connaitre la position de la souris, et on en deduit immediatement la position sur la map.
Mais comment faut-il proceder en 3d ? (j'utilise opengl avec glut) Je n'arrive pas a calculer la position de ma souris par rapport à ma map. Il faut bien sur prendre en compte la position de la camera, mais je n'y arrive pas.
Si quelqu'un pouvais me filer un coup de main, ca serait sympa ;)
Merci d'avance
|
|
dimanche 31 juillet 2005 à 15:42:24 |
Re : Souris en 3D

mondrone
|
va voir là, je pense que ca peut t'aider. La question à plus ou moins deja été posée !
 Qui ne tente rien... Ne risque pas d'avoir grand chose !!!
|
|
dimanche 31 juillet 2005 à 21:13:38 |
Re : Souris en 3D

nicographx
|
Oui, j'avais deja lu cet article, mais merci qd meme Mais j'ai toujours un soucis : ma selection ne bouge pas sous ma souris (seulement a certains endroits) et plus on s'eloigne du 0, plus ma selection prend de l'avance.
Voici mon code :
GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); glGetIntegerv( GL_VIEWPORT, viewport ); winX = (int)xsouris; winY = (int)viewport[3]-(int)ysouris; glReadPixels( (int)winX, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
plan((int)posX, 0, (int)posZ, SELECTION);
|
|
lundi 1 août 2005 à 15:49:53 |
Re : Souris en 3D

Galmiza
|
Il te faut faire du picking (Google): La matrice de projection te donne le point 2D qui correspond au point 3D du terrain. Toi, tu veux les point 3D a partir du point 2D de l`ecran. Or, la matrice de projection n`est pas inversible car un point 2D peut "venir" de plusieurs points 3D.
POINT ptCursor; GetCursorPos( &ptCursor ); ScreenToClient( m_hWnd, &ptCursor ); // Compute the vector of the pick ray in screen space D3DXVECTOR3 v; v.x = ( ( ( 2.0f * ptCursor.x ) / m_d3dsdBackBuffer.Width ) - 1 ) / m_matProj._11; v.y = -( ( ( 2.0f * ptCursor.y ) / m_d3dsdBackBuffer.Height ) - 1 ) / m_matProj._22; v.z = 1.0f; // Get the inverse view matrix D3DXMATRIX m; D3DXMatrixInverse( &m, NULL, &m_matView ); // Transform the screen space pick ray into 3D space vPickRayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31; vPickRayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32; vPickRayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33; D3DXVec3Normalize(&vPickRayDir,&vPickRayDir); vPickRayOrig.x = m._41; vPickRayOrig.y = m._42; vPickRayOrig.z = m._43;
Voila, maintenant tu as le rayon 3D recherche. Bon, c`est du DirectX mais l`equivalent opengl est facile a deduire. L`exemple complet DirectX est ici:
[ Lien ]
|
|
jeudi 4 août 2005 à 14:12:16 |
Re : Souris en 3D

keil
|
sinon ca vient du fait que t'as initialiser avec autre chose que glOrtho(...). Parce qu'en effet les gluPerspective(...) posent probleme dans ce genre de situation
KS
|
|
vendredi 5 août 2005 à 10:24:19 |
Re : Souris en 3D

nicographx
|
Oui, j'ai justement utilisé des gluPerspective... Ca viens surement de ca, mais existe t-il un moyen pour que ca marche qd meme ?
|
|
vendredi 5 août 2005 à 12:23:39 |
Re : Souris en 3D

Galmiza
|
Pourquoi n`utilises-tu pas la methode que j`ai decrite plus haut ? Elle fonctionne, je l`ai utilise.
Variables: m_hWnd handle de la fenetre ptCursor position du curseur en pixel relative au coin haut-gauche de la fenetre m_d3dsdBackBuffer structure de description du back buffer m_matProj la matrice qui a servit a projeter les meshes
vPickRayDir direction du vecteur vPickRayOrig origine du vecteur Ce vecteur est le vecteur recherche: il passe par tous les points qui se projete sous la souris avec la matrice m_matProj
C`est du DirectX, mais bon, il n`y a quasiment rien a changer pour OpenGL
|
|
lundi 8 août 2005 à 22:06:19 |
Re : Souris en 3D

keil
|
Ecoute Galmiza; je pense qu'il a besoin de réponse concrète donc plutot que de lui donner une reponse en directX donnes lui une réponse en openGL. Tu penses qu'il n'y a rien a changer parce que tu doit pas trop connaitre l'openGL, mais si ca se trouve, lui ne connait pas du tout directX
KS
|
|
mardi 9 août 2005 à 13:11:41 |
Re : Souris en 3D

Galmiza
|
Excuse moi, mais le changement de taille de texte est involontaire. Il y a comme un bug. Il y a ecrit taille 3 par defaut. Lorsque je copie-colle des trucs, ca passe a 2, donc je remets a 3 la suite, mais ca devient trop grand. (une fois poste seulement)
C`est vrai je n`y connais rien a l`OpenGL, c`est pour ca que je ne donne que l`algorithme.
Age inconnu pour NicographX, donc je ne sais pas si seul un copier-coller de ce qu`il faut ecrire est satisfaisant, ou alors l`algorithme. Cependant la source est toujours valable. Il n`y a pas trop de DirectX dedans. Seule une connaissance du C/C++ est necessaire pour la decrypter.
J`avais pas mal galere au debut pour trouver un algorithme. J`en avais fait un presque parfait mais il y avait toujours quelques pixels de difference. J`ai donc repris l`algorithme DirectX.
|
|
mardi 9 août 2005 à 15:02:45 |
Re : Souris en 3D

nicographx
|
Scusez moi pour ne pas avoir repondu avant, j'étais un peu debordé ces derniers jours.
en effet, je ne connait pas du tout directx. J'ai apris le c++ durant toute l'annee, et je commence tout seul a apprendre l'opengl (ca fai a peu pres 2 mois que je suis dedans)
mais je ne connai pas toutes les fonctions... mais j'ai trouver 2-3 trucs sur le net qui parlais d'une fonction pour le faire, sinon, je serais parti dans les calculs de maths.. mdrrr
Voila Merci pour vos reponses qui finiront j'en suis sur par m'aider
|
|
Cette discussion est classée dans : 3d, position, souris, connaitre, map
Répondre à ce message
Sujets en rapport avec ce message
Connaitre position de la souris à chaque déplacement [ par maxinfos ]
Bonjourje voudrais savoir comment récupérer la position de la souris à chaque instant, lors de son déplacement. (merci d'être précis, je suis débutant
directx position souris [ par sam20 ]
Salut a tous.J'ai entendu parler du picking mais j'ai du mal a trouver.Je suis en train de faire un un jeu,j'ai le monde 3d,le hero,les decors.je cher
Position du Curseur [ par Ftrunk ]
Salut je suis à la recherche d'un code en C++ sous Linux permettant de connaitre la position du curseur de la souris a chaque instant. Je m'explique :
Position de la souris -SDL- [ par UltimAKnighT ]
Bonjour, Je crée un Morpion avec la lib SDL, et je coince sur un probleme, j'aimerai recuperer la position de la souris ( non recuperer la position x
position souris [ par blinix123 ]
Bonjour,Voila question toutes bête quicontient déjà un tas de réponse sur le web je sais, mais bon ca ne marche pas avec ce que je veux faire.J'aimera
Utilisation de STL map [ par xavprog ]
Bonjour, je suis nouveau en c++ je viens de javaJ'ai une classe élément qui contient un objet position (X,Y)J'ai une classe monde qui contient un vect
position souris avec GLUT opengl [ par jibons ]
Bonsoir, J'aimerais savoir s'il est possible de récupérer les coordonnées relatives à la position de la souris dans une fenêtre OpenGL avec GLUT. Et
Position souris sur un bouton avec vc++6 [ par hadrien1 ]
Bonjour, Voila j'ai fabriqué une classe CBtButton dérivé de CButton, j'ai ajouté aussi la gestion du message WM_MOUSEMOVE jusque la impecable. J'ai
Acquisition signaux de position souris [ par berneo ]
BonjourJe cherche un soft d'acquisition des signaux de position de la souris. Je ne parle pas de la position du pointeur sur l'écran mais bien de l'en
Coordonnes souris en SDL [ par lamiae89 ]
Je suis entrain de travailler sur une interface graphique en sdl , pour faire un jeu .Je veux ecrire chaque chiffre là où j'avais cliqué avec la souri
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|