__?! DirectX ou OpenGL ?!__

Généralités sur la programmation 3D

Vous préférez DirectX ou OpenGL ?

DirectX
4
19%
OpenGL
9
43%
Je ne sais pas !
8
38%
 
Nombre total de votes : 21

Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

__?! DirectX ou OpenGL ?!__

Message par Mytic »

Bonjour…
Je suis entrain de développer un FPS multi joueur en ligne, et j’ai cru bon le faire avec PureBasic , pour gagner du temps !
Alors, comme Purebasic date un peu en matière de 3D avec une version très ancienne d’OGRE, j’ai fait un petit tour dans le site d’OGRE pour me mettre l’eau à la bouche, Donc j’ai téléchargé les Démo officiel créer avec le moteur 3D Ogre.
Tout aller bien, sauf qu’au démarrage de chaque démo, on nous propose quelle api utiliser, DirectX ou OpenGL , alors par curiosité j’exécute chaque démo avec les deux , et à ma grande surprise avec OpenGL j’ai un gain de 10 à 30 Fps/s, et un résultat plus beau que DirectX.

La question est : est ce que Purebasic nous permet de choisir entre ces deux api (DirectX ou OpenGL) ?
Et laquelle vous préférez ? Sachant que OpenGL est multi plateforme et que le moteur de Doom3 utilise OpenGL seulement !
Merci…
:?:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Purebasic est capable de faire la même chose que les démo que tu à utilisé, car avec Ogre3D on choisis OpenGL ou DirectX à l'initialisation si je me rappel bien :wink:

Moi perso j'ai toujours mieux aimer DirectX, mais je n'ai pas vraiment d'argument en faveur de l'un ou de l'autre !
(parfois on pense OpenGL = débutant, truc moche etc, mais certain jeux pro sont fait avec ça et n'en sont pas moins beau !)
La preuve en est avec la PS3 qui utilise uniquement OpenGL pour les jeux me semble t'il, et le résultat est là.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

a mon avis ,en l'etat Ogre est tout simplement inexploitable pour faire un FPS multijoueur sous purebasic !!


regarde plutot du coté de Dreamotion3D ou du wrapper Irlich .. :)
Anonyme

Message par Anonyme »

Tout dépend du final de ton jeu. Si tu veut la portabilité , oublie Dx.
Perso , je préfère de très loin OpenGL , qui est largement plus abordable pour un débutant, essaye d'afficher un pixel en Dx pure tu vas comprendre ta douleur :D , puis de toute facon, sous linux , j'ai pas le choix :D
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

C’est vraiment la galère avec DirectX, pour initialiser l’écran, ça demande plusieurs déclarations et préparatifs, pas pratique pour faire un projet en solo. :?
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

bonjour,

moi je ne sais pas vu que je ne fait pas de 3d's :lol:
ok sa n'avance a rien :wink: Image



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Sans problème : OpenGL

Tu touches toutes les plateformes (GNU/Linux, Mac OSX, Windows) donc plus d'utilisateurs :wink:
Seyhajin
Messages : 17
Inscription : jeu. 03/mars/2005 13:24

Message par Seyhajin »

les écarts de performance entre les deux API, dépend surtout de ta carte graphique, système d'exploitation, MAJ des drivers, etc...Jusqu'à la dire que tel API est plus performant que l'autre en se basant sur le nombre de FPS, n'est pas très fiable, pour moi les deux API se valent, après tout dépend de ta façon de coder. OpenGL est simple ?, oui et non, il est simple si on utilise le Mode Immédiat, mais à la longue c'est pas très conseiller pour un projet de grande envergure, en utilisant par exemple les VBO, tu verras que c'est une autre paire de manche. Les deux sont codés en C, DirectX utilise lui le modèle COM, ce qui permait une rectro-compatibilité entre les versions, OpenGL utilise un système d'extensions. Le gros avantage de OpenGL, c'est qu'il est multi-platforme avec un code équivalent, DirectX n'est destiné uniquement pour les systèmes Windows. Il y aussi qu'OpenGL est juste une API graphique alors que DirectX regroupe plusieurs librairie (Graphique, Réseaux, Entrée/Sortie, Audio,...). Et bien sûr tout dépend de comment c'est codé, on peut très bien avoir les même performances en optimisant comme il faut les deux API.

En résumé :
OpenGL : Multi-platforme, codé en C, utilise les extensions
DirectX : Uniquement sur Windows, Modele COM, Plusieurs librairies indépendantes

En conclusion, il n'y a pas d'API plus rapide que l'autre, tout dépend comment ça a été codé et du matériel, les gouroux de chaque API peuvent très bien apporter leurs optimisations, pour démontrer que l'un est plus puissant que l'autre, pour une fois encore montrer qui c'est qui à la plus grosse :), donc si tu veux du multi-platforme, prends OpenGL, si tu reste sur Windows, prends DirectX, car Microsoft mettra toujours en avant son API.
Dernière modification par Seyhajin le dim. 23/déc./2007 22:49, modifié 2 fois.
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Hé ben… je pense que >Seyhajin< a bien répondu à la question.
Merci pour vos réponses
:) :idea:
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Qu'est ce que tu fait là Seyhajin ?
On est pas encore à Noël, retourne bosser sur DM3D ! :twisted:

En tout cas je suis d'accord avec toi pour ta réponse.
Seyhajin
Messages : 17
Inscription : jeu. 03/mars/2005 13:24

Message par Seyhajin »

wolfjeremy a écrit :Qu'est ce que tu fait là Seyhajin ?
On est pas encore à Noël, retourne bosser sur DM3D ! :twisted:

En tout cas je suis d'accord avec toi pour ta réponse.
C'est le seul moment où TMyke avait le dos tourné, j'en ai profiter pour sortir de la cave et répondre à Mytic :wink: , pour une fois que ce genre de post ne part pas en troll ^^, c'est rarissime 8)

@Mytic : du coup tu as choisit quel API ?
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

OpenGL , c’est plus simple pour commencer ! , mais du coup, je devrai créer un mini moteur 3D pour automatiser les routines. :?
Buckethead
Messages : 122
Inscription : jeu. 27/sept./2007 20:25

Message par Buckethead »

Salut!

De mon coté, j'aimerais aussi faire du DirectX mais OpenGL à l'avantage d'être plus abordable aux débutants.

Le faible feedback et experience de mon coté:
J'ai un souci avec les cartes ATI et tout marche (ou presque hein! ;P) avec Nvidia.

En premier lieu c'est avec les textures. Il semble qu'il faut des puissances de 2, dans un carré. (16*16, 640*640, 800*600 etc) Je ne sais pas si c'est le cas aussi sous DirectX.
Ca parait annodin mais si on veut utiliser l'écran comme une texture (radial blur par exemple) on se retrouve avec un rectangle. Bref stretcher une image capturée sur l'écran principale semble poser des problème avec une ATI.
J'imagine qu'on doit pouvoir tricher en faisant un carré de la plus grande valeur, enfin qu'il doit y avoir une solution, je n'ai pas encore abordé ça.

Ensuite, j'ai vu des gens se plaindrent des drivers ATI, des trucs parfois indebuggable sous OpenGL. Je le savais déjà quand j'ai débuté.

Voila, attention je dis peut etre des bêtises, j'attend l'avis de gens plus expert que moi en la matière!

Et sinon, Joyeux noël à tous !
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Entre ATI et Nvidia c’est la guerre !
Mais ce qui est sure, c’est que Nvidia est plus compatible DirectX que OpenGL, par conre ATI gère très bien OpenGL , surtout les FireGL.
Anonyme

Message par Anonyme »

Ca parait annodin mais si on veut utiliser l'écran comme une texture (radial blur par exemple) on se retrouve avec un rectangle. Bref stretcher une image capturée sur l'écran principale semble poser des problème avec une ATI.
J'imagine qu'on doit pouvoir tricher en faisant un carré de la plus grande valeur, enfin qu'il doit y avoir une solution, je n'ai pas encore abordé ça.
glViewport(0,0,TextureWidth,TextureHeight);

glOrtho(0,TextureWidth,TextureHeight, 0, -1, 1);

//De la scene à rendre dans la TextureID

glOrtho(0,ScreenW,ScreenH, 0, -1, 1);


glBindTexture(GL_TEXTURE_2D,TextureID);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0,TextureWidth, TextureHeight, 0);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0,0,ScreenW,ScreenH);

Tu affiches un plan a la taille de ton écran , les vertices doivent êtres définie dans le sens des aiguilles d'une montre en commençant par le vertex Haut/Gauche.

@++
Répondre