IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

[Direct3d 9.0][Vb.Net] Conversion coordonnées de souris dans le monde


Sujet :

DirectX

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut [Direct3d 9.0][Vb.Net] Conversion coordonnées de souris dans le monde
    J'ai une structure dessinée en 2D avec Direct3D. Le support pour mon device c'est un Panel. Je voudrais juste convertir les coordonnées de mon click de souris en coordonnées de mon monde. J'ai fait de quoi, qui me semble logique, mais ça ne fonctionne pas du tout... Voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Dim wScale, hScale As Double
    Dim adjacent As Double
    Dim transX, transY As Double
     
    'distance entre la caméra et le plan affiché
    adjacent = Math.Abs(camOrigin.Z - camLookAt.Z)
     
    'échelle horizontale monde/support
    wScale = Math.Tan(camAngle) * adjacent * 2 / DP.Width
     
    'échelle verticale proportionnelle
    hScale = wScale / DP.Width * DP.Height
     
    'Transfert des coordonnée X,Y cliqués dans le monde
    'Translation vers le centre et mise à l'échelle
    transX = (Click.X - DP.Width / 2) * wScale
    transY = (DP.Height / 2 - Click.Y) * hScale
     
    Dim coord As New Vector3(transX, transY, 0)
     
    'Applique la matrice transform.world aux coordonnées
    coord.TransformCoordinate(D3DDev.Transform.World)
     
    'Affiche les coordonnées transformées finales
    Msgbox(coord.X & " " & coord.Y)
    Mais bon, ça marche pas du tout. Quelqu'un peut m'éclairer un peu?
    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu t'embêtes pour pas grand chose. DirectX fournit des fonctions pour ce genre de transformation 2D -> 3D.

    Sinon habituellement ce qu'il faut faire, c'est simplement les transformations inverses que subissent tes sommets. C'est-à-dire viewport -> espace homogène, puis multiplication par l'inverse de World x View x Proj.

  3. #3
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Points : 57
    Points
    57
    Par défaut
    Merci, mais c'est un peu ça que je fais me semble non? Je fais les transformations inverses.

    Sinon c'est quoi les fonctions fournies par DirectX pour faire ça dont tu parles?

    Merci

    Edit:
    Bon, j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim coord As Vector3 = New Vector3(MouseClick.X, MouseClick.Y, 0)
    coord.Unproject(D3DDev.Viewport, D3DDev.Transform.Projection, D3DDev.Transform.View, D3DDev.Transform.World)
    Mais, ça marche pas plus.

    Edit 2: :-)
    Bon, j'ai réussi en modifiant comme suit:

    coord = new vector3(Viewport.width - Mouseclick.x, viewport.height - mouseclick.Y, 0)

    sauf que je vais devoir vérifier quelques trucs, surtout pour la partie width - .X, me semble que je devrais pas avoir à faire cette opération...

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. coordonnées curseur/souris dans l'écran
    Par one_piece dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/09/2010, 13h59
  2. [DX9 VB.Net]Conversion coordonnées écran
    Par lelulu dans le forum DirectX
    Réponses: 12
    Dernier message: 23/12/2007, 19h17
  3. [VB.NET] Conversion de caractères
    Par WriteLN dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/03/2005, 08h45
  4. [C++.NET] Conversion Byte*/Byte[]
    Par SteelBox dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 13/02/2005, 19h12
  5. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo