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

Développement 2D, 3D et Jeux Discussion :

Explication fonction WorldToScreen!


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 15
    Points
    15
    Par défaut Explication fonction WorldToScreen!
    Bonjours à tous

    Je travail actuellement sur un projet dans lequel j'ai besoin d'afficher sur une fenêtre (en 2D donc) l'emplacement de certains objets se trouvant dans un espace 3D. J'ai donc fait des recherches là dessus et je me suis aperçu que pas mal de fonction existaient déjà pour convertir de la 3D en 2D. Cependant voilà, je n'arrive pas à utiliser ces fonctions :S Après une petite semaine d'essaie avec ce procédé j'ai essayé de me faire ma propre fonction mais au regret de constater qu'elle ne fonctionne pas... (j'obtiens un léger décalage avec la position réel de l'objet dans l'espace 3D :/).

    Je viens donc vous voir à ce sujet: Quelqu'un pourraient il m'expliquer comment utiliser cette fonction WorldToScreen?

    La fonction qui reviens le plus souvent est la suivante. Maintenant si vous en utilisez une autre et êtes près à me l'expliquer, je prend tous ^^

    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
    26
    27
    28
    bool cD3D::WorldToScreen(Vector from, Vector2D &to) { 
        float w = 0.0f; 
     
        to.x = m_vMatrix[0][0] * from[0] + m_vMatrix[0][1] * from[1] + m_vMatrix[0][2] * from[2] + m_vMatrix[0][3]; 
        to.y = m_vMatrix[1][0] * from[0] + m_vMatrix[1][1] * from[1] + m_vMatrix[1][2] * from[2] + m_vMatrix[1][3]; 
        w    = m_vMatrix[3][0] * from[0] + m_vMatrix[3][1] * from[1] + m_vMatrix[3][2] * from[2] + m_vMatrix[3][3]; 
     
        if(w < 0.01f) 
            return false; 
     
        float invw = 1.0f / w; 
        to.x *= invw; 
        to.y *= invw; 
     
        int width = (int)(m_Rect.right - m_Rect.left); 
        int height = (int)(m_Rect.bottom - m_Rect.top); 
     
        float x = width / 2; 
        float y = height / 2; 
     
        x += 0.5 * to.x * width + 0.5; 
        y -= 0.5 * to.y * height + 0.5; 
     
        to.x = x + m_Rect.left; 
        to.y = y + m_Rect.top; 
     
        return true; 
    }
    Après un moi je ne vois plus d'autres solutions que de demander de l'aide ^^'

    En vous remerciant d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    si ton seul souci c'est l'affichage, pourquoi tu ne le réalises pas en OpenGL ou DirectX ?
    Ils se chargent de faire ces calculs chiants pour toi
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Je pense que directx risque de pas mal me compliquer la vie pour pas grand chose. Je cherche juste à afficher des segments, rien de bien compliqué en soit
    Après si directX dispose de ce genre de fonction, pourquoi pas

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    si ton seul souci c'est l'affichage, pourquoi tu ne le réalises pas en OpenGL ou DirectX ?
    Ils se chargent de faire ces calculs chiants pour toi
    Bah pas vraiment, on doit dans tous les cas définir les matrices world(objet), vue(caméra), et projection.
    Les "calculs chiants" se résument à une multiplication de matrice.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mat4 world; // une par objet
    mat4 view; // la caméra
    mat4 proj;
     
    mat4 m = world * view * proj; // ou proj *view * world ça dépend de l'orientation des matrices
    pour chaque point de l'objet {
        vec2 pos2D = (posDansRepereObjet * m).xy; // ou m * posDansRepereObjet
    }
    Utiliser OpenGL ou DirectX n’empêche pas de devoir faire ces calculs.

    edit : oui OpenGL / DirectX permettent de dessiner des droites assez simplement (il faut toujours ces 3 matrices), et ça apporte l'accélération matérielle.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Ok, et pourrait tu m'en dire un peux plus sur les matrice. En fait ma question c'est de quoi est composé une matrice (que ce soit objet ou caméra)? :o

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Les points d'un l'objet sont donnés dans le repère objet.

    Les matrices objets permettent de ramener tous les objets dans un repère commun. Elles contiennent les transformations des objets (translations / rotations / mises à l'échelle).

    La matrice de vue transforme le repère commun en repère caméra. Elle contient les transformations de la caméra (translations / rotations).

    La matrice de projection permet de projeter tout ça sur une surface 2D (l'image), elle contient le ratio de l'image (largeur divisée par hauteur), et les limites de vision (gauche / droite / haut / bas / avant / arrière).

    J'ai pas les formules en tête mais ça se trouve facilement sur le net.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Ok, donc les paramètres à indiqués aux fonction WorldToScreen doivent variés celon la fonction

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je vous conseille la lecture de ce tutoriel : http://jeux.developpez.com/tutoriels...el-3-matrices/ qui explique en détail les transformations en question
    Sinon, il y a aussi cela : http://geeks3d.developpez.com/ (les trois premiers de la liste).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Ho merci, Je vais voir tous ça et je reviens vous dire le résultat

Discussions similaires

  1. explication fonction remap OpenCv
    Par Vestaproman dans le forum OpenCV
    Réponses: 0
    Dernier message: 15/10/2014, 12h00
  2. Demande d'explications fonctions MATLAB
    Par lemoussel dans le forum MATLAB
    Réponses: 4
    Dernier message: 17/07/2014, 15h36
  3. Besoin d'explication : fonction sinus un peu bizarre
    Par Contact2012 dans le forum Signal
    Réponses: 9
    Dernier message: 08/09/2008, 13h25
  4. Explication fonction surfht
    Par cmtcamarche dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/02/2008, 08h57
  5. [Fonction]Explication sur la fonction EXPLODE de php
    Par daudet dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2006, 17h06

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