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 :

DirectX vers OpenGL


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 DirectX vers OpenGL
    Bonjour,

    Je travail avec DirectX mais j'ai des tutoriaux en OpenGL à comprendre pour les convertir en DirectX.

    Ce que j'ai compris d'OpenGL c'est que les Matrices sont en column-major contrairement à DirectX donc les Matrices sont en row-major.

    Pour OpenGL les Matrices sont dans un repère "Main Droite" pour les Matrices du Monde et la Matrice de caméra.
    Mais la Matrice de Projection est dans un repère "Main Gauche" comme pour DirectX mais en column-major.

    En OpenGL la Matrice de Transformation complète = mat_Projection * mat_camera * mat_Monde.
    En DirectX la Matrice de Transformation complète = mat_Monde * mat_camera * mat_Projection.

    Un vecteur DirectX (x,y,z) devient (-x,y,z) en OpenGL.

    Les coordonnées de Texture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          DirectX                OpenGL
     
    (0,0)---------(1,0)    (0,1)---------(1,1)
      |             |        |             |
      |             |        |             |
      |             |        |             |
      |             |        |             |
    (0,1)---------(1,1)    (0,0)---------(1,0)
    Pouvez-vous me dire si ce que j'ai écrit est correcte.
    Car je veux pas avoir de mauvaise surprise pendant la conversion.
    Et si vous avez d'autre points important à souligner pour la conversion DirectX/OpenGL vous être les bienvenue!

    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
    C'est pas terrible d'utiliser des tuto d'openGL pour faire des rendu directX
    De toute facon au final, que tu utiliser openGL ou directX les meme calculs sont effectués, le rendu est différent entre Opengl et directx parce que les matrices de vue et de projection sont initialement différentes.
    Il suffit donc de récupérer la formule de la matrice de projection et modelview/vue d'une des 2 apis et de l'envoyer à l'autre via un tableau de float. Après, les 2 apis auront exactement les meme comportement au niveau des transformations des vertex (plus besoin de -x à la place de x dans les coordonnées de vertex)

    Pour les textures, il suffit de retourner verticalement le tableau de pixel de l'image en mémoire avant de l'envoyer à openGL ou à directX pour obtenir un meme rendu au niveau des texture. l'image sera à l'envers, mais quand elle sera rendu, elle sera dans le bon sens.

  3. #3
    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 cdd59554 pour ton message!

    C'est pas terrible d'utiliser des tuto d'openGL pour faire des rendu directX
    J'ai pas vraiment le choix comme les moteur de physic ou d'autre tutorial que j'ai trouvé qui sont uniquement codé en OpenGL. Je dois comprendre OpenGL pour porter le code vers DirectX.


    Je veux comprendre la logique d'OpenGL car je veux rester dans un system de coordonnée "Main Gauche" de DirectX.

    Si je prend la Matrice ModelView d'OpenGL je me retrouve avec un système de coordonnée "Main Droite" et ça ne marchera pas avec le reste de mon code écrit dans un système de coordonnée "Main Gauche". Juste la matrice du Monde d'OpenGL va me servir car je vais utiliser la Matrice de caméra et de Projection de DirectX. Je doit tout retranscrire en "Main Gauche" aucune Matrice ou vecteur ne doit rester en "Main Droite".

    Je veux juste intégré des technique de certain tutoriel en OpenGL vers mon projet DirectX.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 386
    Points
    20 386
    Par défaut
    Salut,

    Citation Envoyé par demss Voir le message
    Merci cdd59554 pour ton message!
    J'ai pas vraiment le choix comme les moteur de physic ou d'autre tutorial que j'ai trouvé qui sont uniquement codé en OpenGL. Je dois comprendre OpenGL pour porter le code vers DirectX.
    Merci
    je suis d'accord avec cdd59554 Open GL c'est une architecture radicalement différente à base d'objets COM..donc il faut avoir une conception autre des choses

    Citation Envoyé par demss Voir le message
    Pouvez-vous me dire si ce que j'ai écrit est correcte.
    Car je veux pas avoir de mauvaise surprise pendant la conversion.
    Et si vous avez d'autre points important à souligner pour la conversion DirectX/OpenGL vous être les bienvenue!

    Merci
    Qu'est ce que tu veux faire au final ?
    Il ne faut pas t'inspirer d'Open GL il faut que tu prennes le SDK de Direct X facilement téléchargeable, que tu t'inspires des tutos du SDK.
    Je te conseille de commencer par Direct 3d 9 avec les textures, les vertex buffers quitte à passer à Dx11 ensuite.
    Le SDK parle parfaitement bien des transformations
    Je te conseille ce chapitre là :

    Tutorial 3: Using Matrices

    Pour le moteur physique le principal c'est que tu aies accès à des vecteurs ou des matrices..

  5. #5
    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
    Bonjour,

    J'ai lu et comprit la majorité des samples de DirectX 9.

    Je voulais juste connaitre les différences entre DirectX et OpenGL.

    Je trouve que les 2 ce ressemble beaucoup. Ce son 2 équivalent.
    Beaucoup de Programme gère ces 2 api comme pour les samples du SDK d'ATI et de Nvidia ou aussi Ogre 3D. C'est juste la partie du rendu qui change vraiment.

    J'ai eu aussi l'idée d'utiliser ces 2 api dans mon moteur de jeux.
    Pour que mon moteur de jeux soit aussi sous Mac, Linux et solaris.
    Car DirectX c'est juste pour Windows.

    Je vais surement prendre les fonction du SDK d'ATI pour les Matrice et Vecteur. Et avoir un système en coordonnée Main droite pour c'est 2 api.
    Comme pour les Sample du SDK d'ATI.

  6. #6
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    je suis d'accord avec cdd59554 Open GL c'est une architecture radicalement différente à base d'objets COM..donc il faut avoir une conception autre des choses
    Les différences objets/pointeurs de fonctions c'est principalement de l'habillage.

    Aussi la convention "main droite/main gauche" c'est un détail plutôt faible. Tu t'en préoccuperas une seule fois (lorsque tu composeras ta matrice finale), et après tu l'oublieras parce que toutes tes autres données et ton code resteront les mêmes (pour ce point de détails, puisqu'après il faudra régler les formats de texture exotiques, les alignements au pixel près de ton UI, les différences introduites par widescreen/standard screen, les plateformes big endian/little endian et j'en passe).

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/04/2006, 17h04
  2. DirectX ou OpenGL.... pour débuter ?
    Par Rekiem dans le forum API graphiques
    Réponses: 10
    Dernier message: 28/03/2006, 13h25
  3. [C#] Choix de technologie, DirectX ou OpenGL ?
    Par tio dans le forum DirectX
    Réponses: 2
    Dernier message: 13/12/2005, 21h14
  4. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29

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