Page 1 sur 2

__?! DirectX ou OpenGL ?!__

Publié : dim. 23/déc./2007 15:33
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…
:?:

Publié : dim. 23/déc./2007 16:11
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à.

Publié : dim. 23/déc./2007 16:59
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 .. :)

Publié : dim. 23/déc./2007 17:00
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

Publié : dim. 23/déc./2007 17:16
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. :?

Publié : dim. 23/déc./2007 17:22
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



@++

Publié : dim. 23/déc./2007 18:25
par flaith
Sans problème : OpenGL

Tu touches toutes les plateformes (GNU/Linux, Mac OSX, Windows) donc plus d'utilisateurs :wink:

Publié : dim. 23/déc./2007 18:33
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.

Publié : dim. 23/déc./2007 18:48
par Mytic
Hé ben… je pense que >Seyhajin< a bien répondu à la question.
Merci pour vos réponses
:) :idea:

Publié : dim. 23/déc./2007 19:00
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.

Publié : dim. 23/déc./2007 22:47
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 ?

Publié : dim. 23/déc./2007 23:29
par Mytic
OpenGL , c’est plus simple pour commencer ! , mais du coup, je devrai créer un mini moteur 3D pour automatiser les routines. :?

Publié : lun. 24/déc./2007 0:46
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 !

Publié : lun. 24/déc./2007 1:18
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.

Publié : lun. 24/déc./2007 1:31
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.

@++