Exemple d'affichage multiplateforme d'un triangle (directx et opengl)

Soyez le premier à donner votre avis sur cette source.

Vue 7 559 fois - Téléchargée 405 fois

Description

Cette étude personnelle est développée en C++. Les API DirectX et OpenGL sont utilisées. La source est compilable à la fois sur Windows (via Visual Studio 2005, ainsi DirectX ou OpenGL peut-être utilisé avec une gestion de la fenêtre grâce aux libs de windows) et sur d'autres plateforme (testé sur Linux : Ubuntu 7.10, ainsi OpenGL est utilisé avec une gestion de la fenêtre grâce à la lib GLUT). Je n'ai pas voulu utiliser SDL, ce qui permet de s'affranchir de programmes externes.
(FreeGLUT a été utilisé pour remplacer GLUT)

Il n'y a aucune modification à apporter au code pour compiler l'ensemble sur visual studio 2005 ou par g++.

Historique :

22-01-2008 ::: Création du projet OGL/DX multi-plateformes

Conclusion :


Au final, on obtient un tas de #ifdef _WINDOWS... Ce qui est assez redondant mais nécessaire.
Un autre problème beaucoup plus embêtant est l'utilisation de GLUT. C'est une bibliothèque développée en C, ce qui pose donc quelques inconvénients quand à la modélisation du rendu sous forme de classes : glut nécessite de faire appel à des fonctions globales effectuant le rendu.
glutReshapeFunc(reshape);
glutDisplayFunc(draw);

Ces deux méthodes prennent une fonction en paramètre, et on ne peut les remplacer par des méthodes de classe. Il faut donc créer deux fonctions globales appelant les méthodes des diverses classes.

Je suis donc en train de réfléchir à une meilleur solution que GLUT pour le développement sous linux (ou d'autres plateformes).

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
vendredi 31 août 2007
Statut
Membre
Dernière intervention
22 janvier 2008

Pour SDL, ça fait un truc de moins à distribuer et je suis un peu plus propriétaire du code comme ça, c'est juste une histoire de goûts. De plus, tout est installé par défaut normalement pour OpenGL et DirectX, quoiqu'il faut mettre à jour DirectX sur la machine cible suivant le SDK utilisé, c'est vrai. Le problème peut se poser pour GLUT sur Linux, mais sur la plupart des distributions il y a de quoi le gérer par défaut.
Bref juste une histoire de goûts encore une fois.

Je te remercie pour tes critiques, j'ai justement posté ces sources pour ça. Je cherche tout de même à garder une compatibilité OpenGL et DirectX sur Windows. Peut-être vais-je abandonner l'idée de compiler sous Linux, puisque des softs comme Wine gèrent très bien l'émulation windows. Je réfléchis donc à un bon compromis pour redévelopper mon moteur.

Je te remercie de même pour le cours que tu m'as donné. Le problème avec le net, c'est qu'on trouve bien souvant de la documentation qui n'est plus à jour depuis pas mal de temps. Et la plupart des sites les plus connus proposent encore de développer avec OpenGL de la même manière que j'ai procédé. Je savais que le système de VB et IB existait aussi sur OGL mais je n'étais pas tombé sur de la bonne documentation à ce propos.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
"SDL impose d'avoir une DLL en externe or mon moteur est aussi compilé sous la forme d'une bibliothèque dynamique"
=> Avoir deux dlls, ne posent un pb particulier ?

"si ce n'est pour comparer les rendus"
=> Les rendus sont censés être rigoureusement équivalent: la somme et le produit de deux nombres fera tjs le meme résultat sous DirectX ou OpenGL (heureusement) et comme la 3D, ca ne se résume qu'a ca...

"la bonne méthode permettant d'afficher un triangle (VertexBuffers ?)"
=> Oui, il s'agit simplement d'utiliser le meme principe que DirectX.
http://www.g-truc.net/article/vbo-fr.pdf
Messages postés
2
Date d'inscription
vendredi 31 août 2007
Statut
Membre
Dernière intervention
22 janvier 2008

En fait, cette étude me sert de tests préliminaires pour le redéveloppement de mon moteur. A la base, il n'utilise que DirectX et ne fonctionne que sur Windows. J'ai envie d'intégrer OpenGL et de le rendre compilable multiplateforme, et ce sans utiliser SDL puisque SDL impose d'avoir une DLL en externe or mon moteur est aussi compilé sous la forme d'une bibliothèque dynamique.

Il est donc intéressant de pouvoir utiliser à la fois DirectX et OpenGL, si ce n'est pour comparer les rendus, offrir ce choix à l'utilisateur. Comme ce que font pas mal d'applications vidéo-ludiques.

Bref, vu qu'à la base je suis plutôt orienté DirectX, pourrais-tu me donner un lien pour observer la bonne méthode permettant d'afficher un triangle ? (VertexBuffers ?)
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Une question et une remarque.

La question: Je me demandais quel est l'intérêt de gérer openGL et directX:
- Si on faire un soft uniquement pour windows, alors autant faire que du DirectX.
- Si on veut faire du portable, alors autant tout faire en OpenGL.
Non ?

La remarque: Ta méthode pour afficher un triangle est openGL est un peu dépassée.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.