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 :

coordonnées xy d'écran d'un objet 3D


Sujet :

DirectX

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 108
    Points : 59
    Points
    59
    Par défaut coordonnées xy d'écran d'un objet 3D
    Bonjour,
    Je voudrai savoir comment on fait pour trouver les coordonnées xy d'écran de la position d'un objet 3D.

    Je sais comment trouver la "Matrice de transformation complète" mais je sais pas quoi faire avec cette Matrice pour trouver les coordonnées xy d'écran.

    matWorld = Matrice du Monde de l'objet 3D.
    matView = Matrice de la caméra. (D3DXMatrixLookAtLH)
    matProj = Matrice de Projection. (D3DXMatrixPerspectiveFovLH)

    // La Matrice World View.
    matrice_World_View = matWorld * matView;

    // La Matrice de transformation complète.
    matrice_transformation_complete = matrice_World_View * matProj;

    // Le vecteur de position xyz de l'objet 3D dans le repère du Monde.
    Vecteur_positionxyz_repère_World (matWorld._41, matWorld._42, matWorld._43);

    // Le vecteur de position xyz de l'objet 3D dans le repère de Caméra.
    Vecteur_positionxyz_repère_Camera (matrice_World_View._41, matrice_World_View._42, matrice_World_View._43);

    // Le vecteur de position xy de l'objet 3D dans le repère écran.
    ??????????????????????????????????????????????????????????????
    ??????????????????????????????????????????????????????????????
    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Salut, tu a oublié le viewport qui transforme les coordonnées 2D projetée en coordonnées écran, par contre je ne connait pas la formule de cette matrice.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 395
    Points : 5 009
    Points
    5 009
    Par défaut
    il suffit de multiplier P(x, y, z) par ta matrice worldViewProj et tu auras ton point dans l'espace écran

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 108
    Points : 59
    Points
    59
    Par défaut
    Merci pour ta réponse stardeath!

    Mais si j'ai un Viewport de 400x300.

    Avec ce code je fait comment pour savoir sur quel pixel de l'écran la position de l'objet 3D va être?

    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
     
    // La Matrice du Monde de l'objet 3D.
    D3DXMatrixIdentity(&matWorld);
     
    // La Matrice de caméra.
    D3DXVECTOR3 vEyePt    = D3DXVECTOR3( 0.0f, 0.0f, -3.0f );
    D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec    = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
     
    // La Matrice de Projection.
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 400.0f/300.0f, 0.1f, 225.0f );
     
    // La Matrice de Transformation complète.
    matrice_transformation_complete = matWorld * matView* matProj;
     
    // Le vecteur de position xyz de l'objet 3D dans le repère du Monde.
    D3DXVECTOR3 Vecteur_positionxyz_repere_World = D3DXVECTOR3(matWorld._41, matWorld._42, matWorld._43 );
     
    D3DXVECTOR3 Vecteur_positionxy_repere_Ecran;
     
    // Trouve le vecteur de position xy de l'objet 3D dans le repère écran. (Selon stardeath)
    D3DXVec3TransformCoord(&Vecteur_positionxy_repere_Ecran, &Vecteur_positionxyz_repere_World, &matrice_transformation_complete);
    Avec ce code l'objet 3D est environ au milieu du Viewport.
    Ce qui donnerai environ le pixel x=200 et y=150.

    et la valeur x du Vecteur_positionxy_repere_Ecran.x = -6.078338
    et la valeur y du Vecteur_positionxy_repere_Ecran.y = -1.655134

    Je fait comment avec ces valeurs pour trouver le bon pixel où la position de l'objet 3D est projeté?

    Merci.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 395
    Points : 5 009
    Points
    5 009
    Par défaut
    avec ton code j'obtiens :

    Vecteur_positionxy_repere_Ecran = (0.0, 0.0, 0.96) ce qui me semble parfait du fait que ton objet est au centre de l'écran. (donc je sais pas où tu obtiens ton (-6; -1))

    ensuite ce qu'il faut savoir c'est que la matrice de projection ne donne pas directement les coordonnées écran, son intervalle de sortie est :
    ]-1; 1[ sur l'axe x
    ]-1; 1[ sur l'axe y
    [0; 1[ sur l'axe z

    donc ensuite il suffit de faire une petite règle pour transformer ]-1; 1[ en [0; 400[, ]-1; 1[ en [0; 300[ et voilà.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 108
    Points : 59
    Points
    59
    Par défaut
    Merci stardeath!

    Oui avec cette règle ça donne le pixel x=200 et y=150.

    J'ai refait le calcule et ça me donne aussi Vecteur_positionxy_repere_Ecran = (0.0, 0.0, 0.96). J'avais faite une erreur.

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

Discussions similaires

  1. Comment retrouver les coordonnées X et Y d'un objet ?
    Par denisC dans le forum Téléchargez
    Réponses: 7
    Dernier message: 07/03/2018, 11h06
  2. capture d'écran d'un objet
    Par papy_taupe dans le forum Flex
    Réponses: 2
    Dernier message: 06/04/2009, 14h02
  3. Réponses: 4
    Dernier message: 07/05/2008, 21h36
  4. Réponses: 5
    Dernier message: 25/04/2008, 15h59
  5. comment faire pour imprimer à l'écran un objet
    Par GConstant dans le forum Général Python
    Réponses: 10
    Dernier message: 11/08/2004, 11h31

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