Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1055 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Pour débutant : OpenGL ou DirectX ?

n°829166
bjone
Insert booze to continue
Posté le 23-08-2004 à 01:05:19  profilanswer
 

Reprise du message précédent :
en fait avec le SDK du DirectX, les "samples" sont imbuvables pour un débutant, c'est surtout les tutoriaux (qui sont dans un répertoire à coté) qui sont instructifs (car minimaux).
 
après c'est vrai qu'il y a un peu plus de Windowseries chiantes coté DirectX (au niveau init), le glut simplifie un peu les choses...
 
bon allez qu'il commence avec de l'OpenGl+Glut....
il pourra afficher des triangles plus facilement :D

mood
Publicité
Posté le 23-08-2004 à 01:05:19  profilanswer
 

n°829214
Ace17
Posté le 23-08-2004 à 09:19:41  profilanswer
 

WhatDe a écrit :

Toi tu dois être un adepte du topic sur le français non ? :o

Non, non, pas besoin d'être un adepte pour savoir écrire correctement; cependant ce topic est une bonne idée.

n°829222
Ace17
Posté le 23-08-2004 à 09:29:04  profilanswer
 

chrisbk a écrit :

ce qui ne derange qu'environ 1% de la population, et 0% des débutants qui ont mieux a faire que se prendre le choux d'emblée avec des pb de portabilités [:joce]


Je ne suis pas d'accord. OK pour dire que les débutants se foutent des problèmes de portabilité, mais ils devraient savoir dès le début où sont les dépendances par rapport au système dans leur code. Qu'est-ce qui fait partie du langage, qu'est-ce qui fait partie de l'API du système. Or il se trouve que borner les débutants à un environnement Windows, c'est leur masquer cette différence.
La programmation PC et la programmation Windows, c'est pas la même chose.
 
 

n°829278
chrisbk
-
Posté le 23-08-2004 à 10:25:18  profilanswer
 

Ace17 a écrit :

Je ne suis pas d'accord. OK pour dire que les débutants se foutent des problèmes de portabilité, mais ils devraient savoir dès le début où sont les dépendances par rapport au système dans leur code. Qu'est-ce qui fait partie du langage, qu'est-ce qui fait partie de l'API du système. Or il se trouve que borner les débutants à un environnement Windows, c'est leur masquer cette différence.
La programmation PC et la programmation Windows, c'est pas la même chose.


 
oué, ben le débutant n'est pas non plus un jeanjean, il sait que Dx c'est windows only, basta. Ensuite, je suis assez convaincu que +90% des debutants ont un environnement windows et qu'ils se foutent comment d'une guigne des autres OS.
Maintenant si il commence par Dx il apprendra directement la bonne maniere de faire (Vb/Ib) et ainsi lorsqu'il passera sous ogl il cherchera a retrouver ces objets la, tandis qu'a l'inverse si il commence sous ogl il va nous tailler du glBegin a tire larigot et en cas de passage sur Dx c'est un coup a se manger du DrawPrimitiveUP plein le code. L'api OGL est pas belle, tout simplement, elle est meme plutot laide et te pousse au début a utiliser ce qui est le plus simple, mais aussi le plus laid. Dx n'a peut etre pas non plus une API des plus bandantes, mais elle n'est pas tres compliqués non plus et te fait aller dans la bonne direction.
 
(y'a http://nexe.gamedev.net au fait, pour les tutos dx)

n°829302
Ace17
Posté le 23-08-2004 à 10:49:32  profilanswer
 

A mon avis, les débutants se foutent autant de la maniere de faire le dessin que de la portabilité... :D

n°829445
BlackShark
En 3D c'est mieux.
Posté le 23-08-2004 à 12:04:49  profilanswer
 

merci pour ce magnifique débat DX vs OpenGL
 
...... et pendant ce temps la.... je remplis mes favoris...

n°829589
chrisbk
-
Posté le 23-08-2004 à 13:38:39  profilanswer
 

BlackShark a écrit :

merci pour ce magnifique débat DX vs OpenGL


 
c'est nous qui te remercions, ca faisait longtemps qu'on en avait plus eu un :'(

n°829902
oliv5
Pourquoi ? Parce que !
Posté le 23-08-2004 à 17:29:01  profilanswer
 

OpenGL : trés simple pour la majorité des trucs de base. Il est possible de faire des choses propres, en fait tout est à la charge du programmeur : beau code/merde. Au passage, pour débuter http://rvirtual.free.fr/programmation/opengl.htm ,meme si le site date un peu et que les exemples sont simplistes.
 
DirectX : le peu que j'ai fait m'a montré que ce n'est pas si compliqué que ca.
 
Bilan : kifkif. Sauf qu'en Dx, on a acces à tous les effets possibles sans rajouts.
 
A ce propos, je ne me suis jamais penché sur les extensions opengl dont vous parlez. Il faut dire que je n'ai jamais cherché à faire des effets compliqués. Ou puis-je en trouver une liste (google me refile pleins de liens pourris) ?

n°829950
WhatDe
Posté le 23-08-2004 à 18:02:50  profilanswer
 

oliv5 a écrit :

OpenGL : trés simple pour la majorité des trucs de base. Il est possible de faire des choses propres, en fait tout est à la charge du programmeur : beau code/merde. Au passage, pour débuter http://rvirtual.free.fr/programmation/opengl.htm ,meme si le site date un peu et que les exemples sont simplistes.
 
DirectX : le peu que j'ai fait m'a montré que ce n'est pas si compliqué que ca.
 
Bilan : kifkif. Sauf qu'en Dx, on a acces à tous les effets possibles sans rajouts.
 
A ce propos, je ne me suis jamais penché sur les extensions opengl dont vous parlez. Il faut dire que je n'ai jamais cherché à faire des effets compliqués. Ou puis-je en trouver une liste (google me refile pleins de liens pourris) ?


http://oss.sgi.com/projects/ogl-sample/registry/

n°830035
oliv5
Pourquoi ? Parce que !
Posté le 23-08-2004 à 19:43:17  profilanswer
 

Hooooo miracle...
Merci

mood
Publicité
Posté le 23-08-2004 à 19:43:17  profilanswer
 

n°830180
LeGreg
Posté le 23-08-2004 à 22:33:30  profilanswer
 

oliv5 a écrit :


A ce propos, je ne me suis jamais penché sur les extensions opengl dont vous parlez. Il faut dire que je n'ai jamais cherché à faire des effets compliqués. Ou puis-je en trouver une liste (google me refile pleins de liens pourris) ?


 
http://developer.nvidia.com/object [...] specs.html

n°834825
Panini
Posté le 27-08-2004 à 23:49:03  profilanswer
 

oliv5 a écrit :

OpenGL : trés simple pour la majorité des trucs de base. Il est possible de faire des choses propres, en fait tout est à la charge du programmeur : beau code/merde. Au passage, pour débuter http://rvirtual.free.fr/programmation/opengl.htm ,meme si le site date un peu et que les exemples sont simplistes.
 
DirectX : le peu que j'ai fait m'a montré que ce n'est pas si compliqué que ca.
 
Bilan : kifkif. Sauf qu'en Dx, on a acces à tous les effets possibles sans rajouts.
 
A ce propos, je ne me suis jamais penché sur les extensions opengl dont vous parlez. Il faut dire que je n'ai jamais cherché à faire des effets compliqués. Ou puis-je en trouver une liste (google me refile pleins de liens pourris) ?


 
A peu près tout est dit. J'ai commencé avec OpenGL à la fac sans aller bien loin. La mise ne place d'une application de base avec GLUT est très simple. J'avais également testé DirectX 7 à l'époque et c'était imbuvable.  
L'avantage majeur de DirectX 8/9 sur OpenGL est l'uniformité de l'API. Il n'y a pas à s'occuper de la moindre extension pour obtenir des performances décentes ou des effets avancés. Les exemples sont certes indigestes, la faute à un framework générique pas toujours très lisible. Cependant, on peut aussi jeter un oeil sur les sections développeur de nVidia et ATI. On y trouve beaucoup de docs et d'exemples. Il y a également tous les sites orientés jeux vidéo : gamedev, flipcode, gamasutra avec leurs forums assoociés et bien souvent des séries d'articles de tout niveaux qui interesseront donc aussi les débutants.
 
ps : premier message sur ces forums, bonjour tout le monde donc ^^.


Message édité par Panini le 27-08-2004 à 23:49:52
n°835126
Kyle_Katar​n
Posté le 28-08-2004 à 15:33:17  profilanswer
 

Pour débuter, je ne peux que te recommander OpenGL+GLUT (OpenGL Utility Toolkit qui simplifie pas mal OpenGL...)

n°835221
drasche
Posté le 28-08-2004 à 18:55:02  profilanswer
 

perso je compte attaquer la prog 3D ce mois ci. Je commencerai par OpenGL/GLUT, et j'ai vu un miniport pour PalmOS, ce qui ne  manque pas de m'intéresser histoire de voir ce que la bébête à dans le ventre :D
 
Et après, Direct3D :)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°835224
sircam
I Like Trains
Posté le 28-08-2004 à 19:02:07  profilanswer
 

La toute grande majorité des gens ici qui s'adonnent à la 3D le feront par plaisir, sans chercher à aller très loin, et probablement avec un soucis limité de perf.
 
Après tout, c'est plus pour s'amuser et pour apprendre qu'autre chose.
 
+1 OpenGL et GLUT (rien que pr éviter les windowzeries ;-)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°835233
bjone
Insert booze to continue
Posté le 28-08-2004 à 19:34:17  profilanswer
 

non finalement, si c'est pour apprendre, SDL et rasterizer logiciel, comme dans les années 90.
 
déjà commencer à appendre à faire un rectangle et une ligne, ensuite le triangle :D

n°835242
drasche
Posté le 28-08-2004 à 19:58:59  profilanswer
 

tiens c'est vrai que je perds de vue SDL alors que j'ai envie de plancher dessus un peu aussi :)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°835293
WhatDe
Posté le 28-08-2004 à 21:27:14  profilanswer
 

SDL ca a l'air bien mais il faut distribuer le code source complet. Imaginons (et pas qu'un peu :D) que je code un super jeu de la mort multijoueur et que pour empecher le cheat/hack je désire garder secret certains algos et la partie réseau (en gros) je serais obligé de le donner quand meme avec SDL. C'est ca ou je me trompe ?

n°835328
Ace17
Posté le 28-08-2004 à 23:39:10  profilanswer
 

13.  What is the essential difference between the GPL and the LGPL?
 
      When code licensed under the GPL is combined or linked with any other code, that code must also then be licensed under the GPL. In effect, this license demands that any code combined with GPL'd code falls under the GPL itself.
 
      Code licensed under the LGPL can be dynamically or statically linked to any other code, regardless of its license, as long as users are allowed to run debuggers on the combined program. In effect, this license recognizes kind of a boundary between the LGPL'd code and the code that is linked to it.  
 
Source : http://www.openoffice.org/FAQs/faq-licensing.html#13
 
 
Pour info, la SDL est sous la license LGPL. Donc non, tu fais ce que tu veux de ton code


Message édité par Ace17 le 28-08-2004 à 23:39:30
n°835355
Zeross
Posté le 29-08-2004 à 02:49:24  profilanswer
 

bjone a écrit :

+1 pour le DirectX.
 
entre le glBegin() de base de l'OpenGl, et les VertexsBuffers/IndexBuffers du DirectX, y'a pas photo, c'est comme comparer un Unix avec le Dos.
 
quand on apprends la programmation système proprement, on apprends sous Unix/Linux, on apprends pas sour Dos ou Windows 3.1.
 
ça n'a rien à avoir avec l'optimisation prématurée, ça a avoir avec les bonnes pratiques à connaitre.
 
----
 
ceci dit l'OpenGl n'est pas mauvais, mais apprendre à stoquer des vertexs avec un tableau maison, pousser les vertex avec des glBegins, c'est degueulasse, autant apprendre directement à confier le tableau de vertex à ce qui en a besoin.
 
ceci dit tu as parfaitement des équivalences d'approches entre le DirectX / OpenGl, sauf qu'en DirectX ce qui est optimal est le standard, et celà s'apprends naturellement, en OpenGl, ça deviens de l'extension qui est présente sur tous les drivers de cartes modernes, mais d'une part il faut aller la chercher, et d'autre part tu ne l'auras pas sur du vieux matos, alors qu'en DirectX les VB/IB sont omni-présent, incontournables et leur emploi (le coté T&L/Shader) est émulé par l'API pour le matos obsolète (et il est plus facile d'émuler au niveau CPU des capacités SIMD hardware avec un buffer d'éléments contigus, qu'avec un enchevêtrement de glBegin()/glVertex() ).
 
ceci dit ça n'empêche pas en utilisant les bonnes extensions  , d'avoir parfaitement un rendement identique (ou supérieur grâce à d'autres à coté) de l'OpenGL face au DX, mais la notion de VertexBuffer / IndexBuffer n'est en rien une optimisation prématurée.  
 
A partir du moment que tu comprends malloc/realloc/free ou new/delete, les VB/IBs sont naturellements plus simple et optimaux.
 
Bref, pas de problème pour commencer avec l'OpenGl, mais gare aux mauvaises habitudes.
 
la première règle d'optimisation depuis les Geforces 1, c'est "Use a VertexBuffer for EVERYTHING".
 
Et comme ça peut être vu comme un bête conteneur à vertex, ça pose pas de problème pour un débutant.  
 
(a part des écrans bleus si on se chie dessus :D)


 
Je ne vois pas pourquoi opposer OpenGL et DirectX sur la base des Vertex Arrays : ce n'est pas parce que le mode immédiat glBegin ()/glEnd() est plus intuitif sous OpenGL qu'il empêche l'utilisation des Vertex Arrays.
 
Les Vertex Arrays sont disponibles nativement sous OpenGL, lorsque j'ai appris OpenGL j'ai commencé par faire mes premiers tests avec glBegin ()/glEnd () essentiellement parce que c'est plus pratique surtout parce que de toute façon j'affichais pas grand chose donc le coût sur les perfs me dérangeait pas :D. Et au bout de quelques jours je suis passé aux Vertex Arrays comme il est trés largement conseillé de le faire dans le Redbook.  
 
Alors certes les VBO ne sont pas disponibles sans passer via une extension en OpenGL, mais avant qu'il ait besoin du gain de perfs qu'ils apportent il aura certainement appris à aller chercher une extension ;)
 
En tout cas +1 pour OpenGL mais c'est plus un choix idéologique qu'autre chose car aujourd'hui les deux API sont trés solides. Personnellement ma dernière expérience de DirectX date de la version 6.1 et j'en garde un trés mauvais souvenir qui aujourd'hui encore m'empêche de coder quoi que ce soit même avec la version 9 et puis comme je n'ai pas vraiment de raison de passer d'OpenGL à DirectX...

n°835488
bjone
Insert booze to continue
Posté le 29-08-2004 à 14:13:48  profilanswer
 

oki. c'est pas faux aussi.
bah, en même temps, tout le monde conseille ce qu'il utilise ;)
 

n°842983
Player_One
O'rly?
Posté le 05-09-2004 à 23:36:54  profilanswer
 

Cette année j'ai commencé la prog en pascal avec Delphi et j'ai utilisé DirectX alors que la plupart de mes potes tournaient sous OpenGL.
 
Au début OpenGL est bien plus simples, c'est sur, surtout quand on y connaît rien, en partie grâce aux nombreux tuto dispo mais au final ça reveint au même, une fois que t'as pigé le truc en DirectX, le sdk est ton ami et tu sais où chercher en cas d'erreur.
 
Je te conseille OpenGL car y'a une meilleure communauté autour il me semble  (c'est libre contrairement à Dx).
 
Mes liens DirectX:
http://msdn.microsoft.com/
http://nexe.gamedev.net/News/News.asp
http://www.drunkenhyena.com/
 
Et les sites généralistes:
http://www.games-creators.org/
http://www.developpez.com/ (surtout les forums)


Message édité par Player_One le 05-09-2004 à 23:37:23

---------------
640K ought to be enough for anybody.
n°842987
chrisbk
-
Posté le 05-09-2004 à 23:39:59  profilanswer
 

tiens, y'a ptet un remplacant au malheureusement defun (ou agonisant) flipcode : www.devmaster.net
 
(mais merde quoi, flipcode, toute ma jeunesse, ou presque)

n°843665
Kristoph
Posté le 06-09-2004 à 20:06:59  profilanswer
 

J'ai cru comprendre que l'API Direct3D allait être completement refaite pour la prochaine version de Windows. Si c'est le cas, il n'y à pas grand interet à apprendre Direct3D maintenant pour devoir jeter les connaissances acquises dans quelques années ;)

n°843675
WhatDe
Posté le 06-09-2004 à 20:21:12  profilanswer
 

Kristoph a écrit :

J'ai cru comprendre que l'API Direct3D allait être completement refaite pour la prochaine version de Windows. Si c'est le cas, il n'y à pas grand interet à apprendre Direct3D maintenant pour devoir jeter les connaissances acquises dans quelques années ;)


 :non:  
 
Tout acquis n'est jamais inutile. Et quelques années en informatique ca fait déjà assez longtemps, alors c'est pas super important.

n°843686
LeGreg
Posté le 06-09-2004 à 20:32:59  profilanswer
 

Kristoph a écrit :

J'ai cru comprendre que l'API Direct3D allait être completement refaite pour la prochaine version de Windows. Si c'est le cas, il n'y à pas grand interet à apprendre Direct3D maintenant pour devoir jeter les connaissances acquises dans quelques années ;)


 
La réécriture se fera principalement au niveau des drivers.
l'API sera très fortement semblable à celle de Dx9, en généralisant (geometry shaders, remapping), et en aplanissant les quelques points qui posaient probleme dans l'API actuelle (enfin ça c'est une demande personnelle ;) ).

n°881327
4bis
Posté le 24-10-2004 à 15:00:48  profilanswer
 

Je vais relancer un peu le debat :D
 
Cette année, je dois faire un projet avec d'autres personnes afin de creer un programme qui simule le vol d'un avion sur une carte (en 2D ou 3D suivant le temps que l'on aura et suivant ce qui sera le plus simple).
 
J'aimerais savoir ce qui serait le plus simple a utiliser et integrer dans le programme entre les deux ?
 
Nous devrons renvoyer les images aussi sur d'autres pc par reseau, d'utiliser un des deux changera-t-il quelque chose sur la partie reseau ?
De plus, nous utiliserons soit QT/MFC, y'aura-t-il une difference a utiliser opengl/directx ?
 
 
PS : nous avons tous un niveau moyen en programmation (en C++ notamment).
 
Merci pour les reponses :)

n°881341
piwi
Da Païwaï Is Back From Hell
Posté le 24-10-2004 à 15:38:54  profilanswer
 

et ben on voit que tt le monde est ds la meme galere
 
moi aussi, je me demande quoi utiliser de opengl et directx
 
le seul indice que g trouvé aujourd'hui, c que opengl n'est pas mort (j'aurai cru pourtant, on en a plus entendu parlé depuis bien longtemps ds le monde des jeux vidéos)
 
j'attends aussi impatiemment des réponses :)
Merci d'avance
Piwi

n°881659
Panini
Posté le 25-10-2004 à 01:02:54  profilanswer
 

On rentre plus facilement dans OpenGL, notamment grâce à glu et glut.  
Pour faire un rendu pas trop évolué c'est selon moi la solution la plus simple.
Après, quand il s'agit d'optimiser ou de faire des effets complexes, il faut se taper les extensions et DirectX regagne en simplicité car avec une interface unique de programmation (ce qui n'empêche pas de devoir faire des optis par cartes).
 
Les MFC ne sont pas drôles à assimiler non plus.

n°881706
chrisbk
-
Posté le 25-10-2004 à 08:29:07  profilanswer
 

si t'es un debutant et que tu veux afficher rapidement deux cubes en te foutant de pondre un code degueu cracra beurk : ogl
 
si t'es un debutant et que tu veux afficher rapidement deux cubes en souhaitant avoir un truc assez bien ficelé : d3d


---------------
NP: HTTP Error 764 Stupid coder found
n°881708
chrisbk
-
Posté le 25-10-2004 à 08:30:35  profilanswer
 

Zeross a écrit :

Je ne vois pas pourquoi opposer OpenGL et DirectX sur la base des Vertex Arrays : ce n'est pas parce que le mode immédiat glBegin ()/glEnd() est plus intuitif sous OpenGL qu'il empêche l'utilisation des Vertex Arrays.
 
Les Vertex Arrays sont disponibles nativement sous OpenGL, lorsque j'ai appris OpenGL j'ai commencé par faire mes premiers tests avec glBegin ()/glEnd () essentiellement parce que c'est plus pratique surtout parce que de toute façon j'affichais pas grand chose donc le coût sur les perfs me dérangeait pas :D. Et au bout de quelques jours je suis passé aux Vertex Arrays comme il est trés largement conseillé de le faire dans le Redbook.  


 
bah les vertex arrays, ca reste toujours en sysmem, non ? Pourquoi diable encore surcharger ce pauvre agp alors que la CG a de la place en veux tu en voila pour stocker tes vtx ?


---------------
NP: HTTP Error 764 Stupid coder found
n°881714
Tortoose
made in TortooseLand
Posté le 25-10-2004 à 08:50:18  profilanswer
 

Si tu veux juste faire un jeu 2D/3D sans connaitre toutes les arcanes OpenGL, tu peux aussi utiliser ça
http://home.gna.org/oomadness/en/s [...] sic-1.html


---------------
Quelle est la différence entre un canard ?
n°881721
LeGreg
Posté le 25-10-2004 à 09:09:18  profilanswer
 

je ne suis pas de son avis et ça date de 96 (ouch!)
mais voilà un .plan de Carmack à la grande époque de dx3.
 

Citation :

[idsoftware.com]
 
Login name: johnc
Directory: /raid/nardo/johnc
On since Dec 15 01 : 19 : 05
on ttyp2 from idnewt
 
 
 
In real life: John Carmack
Shell: /bin/csh
13 hours Idle Time
 
Plan:
 
I am going to use this installment of my .plan file to get up on a soapbox about an important issue to me: 3D API. I get asked for my opinions about this often enough that it is time I just made a public statement. So here it is, my current position as of december '96...
 
While the rest of Id works on Quake 2, most of my effort is now focused on developing the next generation of game technology. This new generation of technology will be used by Id and other companies all the way through the year 2000, so there are some very important long term decisions to be made.
 
There are two viable contenders for low level 3D programming on win32: Direct-3D Immediate Mode, the new, designed for games API, and OpenGL, the workstation graphics API originally developed by SGI. They are both supported by microsoft, but D3D has been evangelized as the one true solution for games.
 
I have been using OpenGL for about six months now, and I have been very impressed by the design of the API, and especially it's ease of use. A month ago, I ported quake to OpenGL. It was an extremely pleasant experience. It didn't take long, the code was clean and simple, and it gave me a great testbed to rapidly try out new research ideas.
 
I started porting glquake to Direct-3D IM with the intent of learning the api and doing a fair comparison.
 
Well, I have learned enough about it. I'm not going to finish the port. I have better things to do with my time.
 
I am hoping that the vendors shipping second generation cards in the coming year can be convinced to support OpenGL. If this doesn't happen early on and there are capable cards that glquake does not run on, then I apologize, but I am taking a little stand in my little corner of the world with the hope of having some small influence on things that are going to effect us for many years to come.
 
Direct-3D IM is a horribly broken API. It inflicts great pain and suffering on the programmers using it, without returning any significant advantages. I don't think there is ANY market segment that D3D is apropriate for, OpenGL seems to work just fine for everything from quake to softimage. There is no good technical reason for the existance of D3D.
 
I'm sure D3D will suck less with each forthcoming version, but this is an oportunity to just bypass dragging the entire development community through the messy evolution of an ill-birthed API.
 
Best case: Microsoft integrates OpenGL with direct-x (probably calling it Direct-GL or something), ports D3D retained mode on top of GL, and tells everyone to forget they every heard of D3D immediate mode. Programmers have one good api, vendors have one driver to write, and the
world is a better place.  
 
To elaborate a bit:
 
"OpenGL" is either OpenGL 1.1 or OpenGL 1.0 with the common extensions. Raw OpenGL 1.0 has several holes in functionality.  
 
"D3D" is Direct-3D Immediate Mode. D3D retained mode is a seperate issue. Retained mode has very valid reasons for existance. It is a good thing to have an api that lets you just load in model files and fly around without sweating the polygon details. Retained mode is going to be used by at least ten times as many programmers as immediate mode. On the other hand, the world class applications that really step to new levels are going to be done in an immediate mode graphics API. D3D-RM doesn't even really have to be tied to D3D-IM. It could be implemented to emit OpenGL code instead.
 
I don't particularly care about the software only implementations of either D3D or OpenGL. I haven't done serious research here, but I think D3D has a real edge, because it was originally designed for software rendering and much optimization effort has been focused there. COSMO GL is attempting to compete there, but I feel the effort is misguided. Software rasterizers will still exist to support the lowest common denominator, but soon all game development will be targeted at hardware rasterization, so that's where effort should be focused.
 
The primary importance of a 3D API to game developers is as an interface to the wide variety of 3D hardware that is emerging. If there was one compatable line of hardware that did what we wanted and covered 90+ percent of the target market, I wouldn't even want a 3D API for production use, I would be writing straight to the metal, just like I allways have with pure software schemes. I would still want a 3D API for research and tool development, but it wouldn't matter if it wasn't a mainstream solution.
 
Because I am expecting the 3D accelerator market to be fairly fragmented for the forseeable future, I need an API to write to, with individual drivers for each brand of hardware. OpenGL has been maturing in the workstation market for many years now, allways with a hardware focus. We have exisiting proof that it scales just great from a $300 permedia card all the way to a $250,000 loaded infinite reality system.
 
All of the game oriented PC 3D hardware basically came into existance in the last year. Because of the frantic nature of the PC world, we may be getting stuck with a first guess API and driver model which isn't all
that good.  
 
The things that matter with an API are: functionality, performance, driver coverage, and ease of use.  
 
Both APIs cover the important functionality. There shouldn't be any real argument about that. GL supports some additional esoteric features that I am unlikely to use (or are unlikely to be supported by hardware -- same effect). D3D actually has a couple nice features that I would like to see moved to GL (specular blend at each vertex, color key transparancy, and no clipping hints), which brings up the extensions issue. GL can be extended by the driver, but because D3D imposes a layer between the driver and the API, microsoft is the only one that can extend D3D.
 
My conclusion about performance is that there is not going to be any significant performance difference (< 10%) between properly written OpenGL and D3D drivers or several years at least. There are some arguments that gl will scale better to very high end hardware because it doesn't need to build any intermediate structures, but you could use tiny sub cache sized execute buffers in d3d and acheive reasonably similar results (or build complex hardware just to suit D3D -- ack!). There are also arguments from the other side that the vertex pools in d3d will save work on geometry bound applications, but you can do the same thing with vertex arrays in GL.  
 
Currently, there are more drivers avaialble for D3D than OpenGL on the consumer level boards. I hope we can change this. A serious problem is that there are no D3D conformance tests, and the documentation is very poor, so the existing drivers aren't exactly uniform in their functionality. OpenGL has an established set of conformance tests, so there is no argument about exactly how things are supposed to work. OpenGL offers two levels of drivers that can be written: mini client drivers and installable client drivers. A MCD is a simple, robust exporting of hardware rasterization capabilities. An ICD is basically a full replacement for the API that lets hardware accelerate or extend any piece of GL without any overhead.
 
The overriding reason why GL is so much better than D3D has to do with ease of use. GL is easy to use and fun to experiment with. D3D is not (ahem). You can make sample GL programs with a single page of code. I think D3D has managed to make the worst possible interface choice at every oportunity. COM. Expandable structs passed to functions. Execute buffers. Some of these choices were made so that the API would be able to gracefully expand in the future, but who cares about having an API that can grow if you have forced it to be painful to use now and forever after? Many things that are a single line of GL code require half a page of D3D code to allocate a structure, set a size, fill something in, call a COM routine, then extract the result.
 
Ease of use is damn important. If you can program something in half the time, you can ship earlier or explore more aproaches. A clean, readable coding interface also makes it easier to find / prevent bugs.  
 
GL's interface is procedural: You perform operations by calling gl functions to pass vertex data and specify primitives.  
glBegin (GL_TRIANGLES);
glVertex (0,0,0);
glVertex (1,1,0);
glVertex (2,0,0);
glEnd ();
 
D3D's interface is by execute buffers: You build a structure containing vertex data and commands, and pass the entire thing with a single call. On the surface, this apears to be an efficiency improvement for D3D, because it gets rid of a lot of procedure call overhead. In reality, it is a gigantic pain-in-the-ass.
 
(psuedo code, and incomplete)
v = &buffer.vertexes[0];
v->x = 0; v->y = 0; v->z = 0;
v++;
v->x = 1; v->y = 1; v->z = 0;
v++;
v->x = 2; v->y = 0; v->z = 0;
c = &buffer.commands;
c->operation = DRAW_TRIANGLE;
c->vertexes[0] = 0;
c->vertexes[1] = 1;
c->vertexes[2] = 2;
IssueExecuteBuffer (buffer);
 
If I included the complete code to actually lock, build, and issue an execute buffer here, you would think I was choosing some pathologically slanted case to make D3D look bad.
 
You wouldn't actually make an execute buffer with a single triangle in it, or your performance would be dreadfull. The idea is to build up a large batch of commands so that you pass lots of work to D3D with a single procedure call.
 
A problem with that is that the optimal definition of "large" and "lots" varies depending on what hardware you are using, but instead of leaving that up to the driver, the application programmer has to know what is best for every hardware situation.
 
You can cover some of the messy work with macros, but that brings its own set of problems. The only way I can see to make D3D generally usable is to create your own procedural interface that buffers commands up into one or more execute buffers and flushes when needed. But why bother, when there is this other nifty procedural API allready there...
 
With OpenGL, you can get something working with simple, straightforward code, then if it is warranted, you can convert to display lists or vertex arrays for max performance (although the difference usually isn't that large). This is the right way of doing things -- like converting your crucial functions to assembly language after doing all your development in C.
 
With D3D, you have to do everything the painful way from the beginning. Like writing a complete program in assembly language, taking many times longer, missing chances for algorithmic improvements, etc. And then finding out it doesn't even go faster.  
 
I am going to be programming with a 3D API every day for many years to come. I want something that helps me, rather than gets in my way.  
 
John Carmack Id Software


Message édité par LeGreg le 25-10-2004 à 09:15:26
n°881728
chrisbk
-
Posté le 25-10-2004 à 09:17:36  profilanswer
 

legreg, tu me decois, ressortir ce vieux truc pourri... :o


---------------
NP: HTTP Error 764 Stupid coder found
n°881736
LeGreg
Posté le 25-10-2004 à 09:28:22  profilanswer
 

chrisbk a écrit :

legreg, tu me decois, ressortir ce vieux truc pourri... :o


 
bah c'est marrant.  
 
 
 
 
 
Non ?

n°881749
LeGreg
Posté le 25-10-2004 à 09:43:52  profilanswer
 

Bon pour ajouter un peu de contexte:
 
- cela c'était avant l'arrivée des accélérateurs vraiment valables (3dfx), ou à peu près en meme temps, donc les gens avaient peu de recul par rapport au futur de la 3d. L'interet principal de D3D, premier du nom c'était le rendu software (peu de boite pouvaient se payer un moteur software de la trempe de Quake ou Quake II).  
 
- Les execute buffers ne sont probablement pas quelque chose qui aurait rebuté les programmeurs de jeux de l'époque qui étaient habitués à l'assembleur. De plus c'était avant l'arrivée de la PS2 et où les développeurs de jeux se sont senti une âme de développeur de drivers ;).
- D'ailleurs le fameux Retained Mode que Carmack pense qu'il va truster 90% des applis 3D n'a quasiment pas été utilisé au profit de l'immediate mode qui s'est beaucoup amélioré sous Dx5. (à la place de passer les opérations comme arguments on appelait des fonctions).  
 
- Le support des drivers OpenGL a vraiment commencé lorsque Quake 3 est sorti. Annoncé comme "the next big thing" pour les fabricants de cartes, il ne se satisfaisait que d'une implémentation OpenGL "complète". Bien entendu complete signifiait qu'il fallait faire tourner Quake 3 et c'est tout (hein Matrox ??). Donc Carmack par son choix a contribué à faire de OpenGL un choix plus viable pour le développement sur PC. (et en meme temps est un peu le seul à y être resté fidèle).
 
- Bon après c'est une question de gout. Et pour votre projet "personnel" ça ne changera pas la face du monde si vous choisissez OpenGL ou D3D. Mais c'est que mon avis.

n°881780
4bis
Posté le 25-10-2004 à 10:42:17  profilanswer
 

LeGreg a écrit :


- Bon après c'est une question de gout. Et pour votre projet "personnel" ça ne changera pas la face du monde si vous choisissez OpenGL ou D3D. Mais c'est que mon avis.


 
Non c'est sur ca ne changera pas la face du monde de choisir entre l'un ou l'autre. Seulement il y a plusieurs perspectives à ne pas negliger.  
 
- On doit modeliser (a partir d'une image par exemple 2D ou 3D), une carte entiere (avec rivieres, routes, habitations), assez simpliste (sans effet d'ombre, etc...) et pouvoir la visualiser à partir d'une camera située sur l'avion.  
- On doit modeliser le cokpit de l'avion (avec manche a balai, compte-tour, compteur, etc...).
 
Et on doit faire ce programme dans une perspective d'avenir, comme par exemple, ne pas oublier la plate-forme linux. Bref, et cela sur une periode tres limitée.

n°881782
chrisbk
-
Posté le 25-10-2004 à 10:45:53  profilanswer
 

4bis a écrit :

Non c'est sur ca ne changera pas la face du monde de choisir entre l'un ou l'autre. Seulement il y a plusieurs perspectives à ne pas negliger.  
 
- On doit modeliser (a partir d'une image par exemple 2D ou 3D), une carte entiere (avec rivieres, routes, habitations), assez simpliste (sans effet d'ombre, etc...) et pouvoir la visualiser à partir d'une camera située sur l'avion.  
- On doit modeliser le cokpit de l'avion (avec manche a balai, compte-tour, compteur, etc...).


d3d ou ogl, la c'est pareil
 

4bis a écrit :


Et on doit faire ce programme dans une perspective d'avenir, comme par exemple, ne pas oublier la plate-forme linux. Bref, et cela sur une periode tres limitée.


 
bin si jamais t'as une quelconque volonté de portabilité, y'a pas trop le choix
 


---------------
NP: HTTP Error 764 Stupid coder found
n°881799
smaragdus
whores, drugs & J.S. Bach
Posté le 25-10-2004 à 11:14:41  profilanswer
 

BlackShark a écrit :

Est ce que vous pouvez me donner vos avis sur ces deux librairies ?
Quelques liens vers des cours POUR DEBUTANT de ces moteurs ?


 
* Si tu veux te la jouer moderne et pratique, utilise DirectX (interface standardisée & objet comme le C++, toutes les cartes gfx supportées sans librairies supplementaires, exemples fournis avec le SDK)
 
* Si tu veux te la jouer "l33t-Carmack-est-mon-dieu", utilise OpenGL

n°882050
HelloWorld
Salut tout le monde!
Posté le 25-10-2004 à 14:44:45  profilanswer
 

Qt a déjà ce qu'il faut pour faire de l'OpenGL (QGLWidget) mais rien pour DirectX à ma connaissance...
Sinon pour Carmack j'y connais rien, mais vu qu'il vise le multi-platforme, c'est normal qu'il utilises OpenGL non ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°882085
smaragdus
whores, drugs & J.S. Bach
Posté le 25-10-2004 à 15:12:39  profilanswer
 

HelloWorld a écrit :


Sinon pour Carmack j'y connais rien, mais vu qu'il vise le multi-platforme, c'est normal qu'il utilises OpenGL non ?


 
Non, ça n'a rien à voir avec ça. Je confirme : t'y connais rien.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
reconaissance debutantPHP, Dreamweaver, et session -debutant-
[Java3D][Debutant] ajout nouveau volumeProblème pour récuperer des variables POST - Débutant -
[debutant] Probleme d'allocation memoire pour de grands tableauxdébutant en PHP a besoin d'aide !!Problème avec un formulaire ! ! ! !
[Debutant] exo comprenant tableau et structureQuel bon livre PHP5 pour débutant?
recupere des variables dans un .ini (debutant)[Java][PHP][SQL] Debutant: Par quoi commencer??
Plus de sujets relatifs à : Pour débutant : OpenGL ou DirectX ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR