PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Direct3D oder OpenGL ?


Nasenbaer
2002-08-24, 16:14:22
Hi ihr Progger! :-)
Ich möchte mich schon seit langer Zeit endlich mal mit dem Thema 3D-Grafik beschäftigen nur kann ich mich nicht entscheiden womit ich anfangen soll.
Mit DirectDraw, DirectInput und -Sound habe ich schon gearbeitet also kenne ich mich mit den Strukturen von DirectX aus. OpenGL hingegen ist plattformunabhängig. Primär würde ich aber eigentlich gerne wisen welches leichter zu erlernen ist. :)
Etwas Zeit hab ich eh noch da ich das wirklich einwandfreie C++ Online-Buch, das Wuzel vorschlug, durcharbeiten möchte um meinen C/C++ Stil in reinen C++ Stil umzuwandeln. *ggg*

MFg Nasenbaer

MeLLe
2002-08-24, 19:35:22
Ich habe mal vor einiger Zeit versucht (!) , mich ein wenig mit DX-Programmierung zu beschäftigen. Aber das habe ich mangels Zeit und vor allem mangels des "Klick!" (der anzeigt/angezigt hätte, dass ich die Denkweise, die man zum proggen von DX-Apps benötigt, verinnerlicht habe :D) im Sand verlaufen lassen.
Zur Zeit bastel ich ein wenig mit OpenGL rum, und es ist für mich muss ich sagen verständlicher als D3D. Aber das ist meine subjektive Meinung. Am Ende ist D3D auch einfach - mir fehlt nur das "zündende Ereignis" ... !? ;)

Einfachkrank
2002-08-24, 20:14:55
Hi,

also ich habe schon mit DirectX und OpenGL gearbeitet und kann eigentlich nur sagen, dass DirectX für Input und Sound Zwecke wirklich gut ist, aber 3D Grafik gehört nach meiner Meinung lieber in die Hände von OpenGL. Was mit so meine Erfahrung sagen kann, ist auch dass OpenGL weniger Aufwand benötigt und leichter zu lernen ist. Für ein Spiel wäre die Mischung aus DirectSound + DirectInput + OpenGL wahrscheinlich das Beste ;)

MFG Einfachkrank

Nasenbaer
2002-08-24, 20:42:09
Danke für die Infos. Ich werd dann wohl OpenGL nehmen obwohl ich für jede weitere MEinung dankbar bin. :)


@Einfachkrank
Ist dir augefallen, dass wir in der Sig das gleiche Zitat haben?
Interessant wie unterschiedlich diese Zitate übermittelt wurden. :)

Mfg Nasenbaer

Demirug
2002-08-24, 20:50:49
Zum anfangen ist es eigentlich fast egal was man benutzt. Die wahl hängt dabei wohl eher vom bevorzugten programmierstill ab.

Dem funktionsorintiertem C Programmierer rate ich immer zu OpenGL.
Dem eher der OOP zugeneigtem Programmiere empfehle ich DX.

Wenn man dann irgendwann ein grössere Projekt angehen möchte muss man sich sowieso nochmal new entscheiden und die vor und nachteile gegeneinader der beiden APIs abwägen.

Einfachkrank
2002-08-25, 15:02:10
@ Nasenbaer
Jetzt wo du es sagst, ist mir es erst eben aufgefallen. Find ich aber cool :)

Nasenbaer
2002-08-25, 15:41:28
Originally posted by Demirug
Zum anfangen ist es eigentlich fast egal was man benutzt. Die wahl hängt dabei wohl eher vom bevorzugten programmierstill ab.

Dem funktionsorintiertem C Programmierer rate ich immer zu OpenGL.
Dem eher der OOP zugeneigtem Programmiere empfehle ich DX.

Wenn man dann irgendwann ein grössere Projekt angehen möchte muss man sich sowieso nochmal new entscheiden und die vor und nachteile gegeneinader der beiden APIs abwägen.

Hmm eigentlich bin ich eher OOP zugeneigt. Das würde wiederum bedeuten Direct3D.
Hmm Demirug du machst einem das nicht einfach. :D

Mfg Nasenbaer

KiBa
2002-08-25, 17:20:03
Moin, ich zitiere mich mal selbst aus einem thread im spekulations-forum:
--
als ich mit programmieren angefangen habe, wollte ich mich an opengl versuchen, der syntax allgemein war ja schon ein graus für mich.
eine wohltat war dann d3d, wo ich z.b. mit vertex-buffern und texturen direkt umgehen konnte. (z.b. als referenz bestimmten funktionen übergeben) das macht die funktionsaufrufe zwar manchmal größer, weil nicht alles als state-machine gelöst wurde, aber es lässt sich um welten besser debuggen. ich habe mit d3d einfach weniger fehler gemacht, auch die unterteilung der transformationsmatrix in view, world und projektions-matrix hat mir als anfänger extrem geholfen. hinzu kommen die sehr guten und standardisierten d3dx-erweiterungen.
letztendlich habe ich mich von ogl abgewendet, als ich unter windows (was nur opengl 1.1 unterstützt) einen haufen extensions anfordern musste, teilweise grafikkartenspezifisch. die notwendige aufteilung in mehrere renderpfade (wenn mein programm auch andere hersteller unterstützen sollte) und das jonglieren mit funktions-zeigern hat mir dann den rest gegeben, den umstieg auf d3d habe ich nei bereut. (plattformunabhängigkeit ist mir unwichtig) naja, mein programm ist mittlerweile so geschrieben, dass es unabhängig der api arbeitet, vielleicht tue ich mir opengl nochmal an zum spaß...
naja, jedem das seine ;)
--

so, jetzt hast du 2 meinungen mit tendenz zu opengl und 2 eher zu d3d. verwirrt? ;)
mmh, im grunde genommen ist es wirklich egal was man nimmt, es gibt imo unterschiede im erlernen der api (imo pro d3d), aktualität (auch pro d3d) und geschwindigkeit (gleichstand, außer bei nutzung von extensions - pro ogl - aber dann aufwendiger zu programmieren).
viel spaß beim entscheiden... ;)

Nasenbaer
2002-08-25, 17:44:15
Gut das ich verglichen habe muss ich wohl irgendwann sagen, denn jetzt weiß ich genausowenig wie am Anfang was ich nehmen werde.

D.h. ich werde einfach Einführungs-Tutorials für beide durcharbeiten und dann entscheiden. :)
Trotzdem danke für die Antworten!

Mfg Nasenbaer

Wuzel
2002-08-25, 19:00:35
Ganz einfach d3d wenn du auf win platform progst ..... ;)

Naja, meine absolute empfehlung ist die java 3d api zum lernen.
Grund :
Keine probs mit resourcen etc.
Sehr sehr übersichtlich.
Und wirklich nur reine konzentration auf die eigentliche Mathematik, die ja 3d progen ist.
Damit kann man den Grundaufbau / formeln / essent. sachen verstehen und lernen.

Wenn man das gerafft hat ist es ein leichtes 3d oder gl zu progen.

Auf diese weise lernt man es halt schneller/effektiver als andersrum.

http://java.sun.com/products/java-media/3D/

Wie gesagt bloss zum üben/lernen/begreifen.

Nasenbaer
2002-08-25, 19:30:50
Dann müsst ich mir erstmal wieder Java angucken und das möcht ich, da es ja doch etwas anders ist als C++. =)

Naja ersmal muss ich das Buch durcharbeiten um wirklich C++ zu können. :)

Mfg Nasenbaer

Wuzel
2002-08-25, 19:35:27
Originally posted by Nasenbaer
Dann müsst ich mir erstmal wieder Java angucken und das möcht ich, da es ja doch etwas anders ist als C++. =)

Naja ersmal muss ich das Buch durcharbeiten um wirklich C++ zu können. :)

Mfg Nasenbaer

Naja Java ist eigentlich ein c++ bloss ohne deklarations wirwar , zeiger, resourcenmanagment ;)

Hast aber schon recht, c++ ist absolut recommed heutzutage. Ohne überlebt man jedenfalls nich lang :)

Nasenbaer
2002-08-25, 19:36:41
Ich kenn das von PHP. Man brauch keine Vairablentypen etc.
Ehrlich gesagt nicht mein geschmack da sich so irgendwie mehr Fehler einschleichen.

Mfg Nasenbaer

Exxtreme
2002-08-25, 19:42:59
Originally posted by Wuzel


Naja Java ist eigentlich ein c++ bloss ohne deklarations wirwar , zeiger, resourcenmanagment ;)

Finde ich aber richtig, wenn man sich mit Pointern, Deklarationen usw. befasst. Ich bin der Meinung, daß wenn jemand Zeiger nicht versteht, daß er dann eigentlich kein Programmierer ist, zumindest kein guter. Zeiger gehören einfach dazu damit man lernt wie ein Rechner überhaupt funktioniert.

Gruß
Alex

Nasenbaer
2002-08-25, 20:10:55
Originally posted by Exxtreme

Finde ich aber richtig, wenn man sich mit Pointern, Deklarationen usw. befasst. Ich bin der Meinung, daß wenn jemand Zeiger nicht versteht, daß er dann eigentlich kein Programmierer ist, zumindest kein guter. Zeiger gehören einfach dazu damit man lernt wie ein Rechner überhaupt funktioniert.

Gruß
Alex

Ich kann das ja auch alles. :)
Nur habe ich zur Zeit eher nen C/C++ Stil als einen reinen C++ Stil und das muss sich ändern!

Mfg Nasenbaer

Demirug
2002-08-25, 20:22:24
Originally posted by Exxtreme

Finde ich aber richtig, wenn man sich mit Pointern, Deklarationen usw. befasst. Ich bin der Meinung, daß wenn jemand Zeiger nicht versteht, daß er dann eigentlich kein Programmierer ist, zumindest kein guter. Zeiger gehören einfach dazu damit man lernt wie ein Rechner überhaupt funktioniert.

Gruß
Alex

Neben Zeigern gibt es noch viele andere Themen von denen mal als Programmierer schon mal was gehört haben sollte. Aber bei einem grossen Projekt ist man schon dankbar wenn man sich um gewisse sachen die als Fehleranfällig bekannt sind (Zeiger, Speicherverwaltung, usw.) nicht selber kümmern muss. Aus dem Grund hat mir die JAVA Idee auch eigentlich gefallen aber die ausführungeschwindigkeit hat damals verhindert das ich umgestiegen bin. Ich weis das sich da inzwischen einiges getan hat nur bin ich von C# und .net mehr angetan als von JAVA. Und ja mir ist es vollkommen egal das es von MS entwickelt wurde. Das ganze ist eine ECMA norm und damit nicht mehr unter der direkten kontrolle einer Firma.

zeckensack
2002-08-25, 20:31:25
Originally posted by Demirug
Das ganze ist eine ECMA norm und damit nicht mehr unter der direkten kontrolle einer Firma. Auf die Gefahr hin, fatalistisch zu klingen:
IMO wird es Microsoft trotzdem schaffen, daß man größere in VS.NET entwickelte Projekte nirgendwo anders kompilieren kann, und umgekehrt. Wie auch bei C++ geschehen ;(
("disable language extensions" anyone?)

zeckensack
2002-08-25, 20:44:41
OpenGL ist sehr angenehm für 'rapid prototyping', oder wie man das auch immer auf deutsch nennen würde ...

Sprich, es hat einen funktionierenden 'immediate mode' (Anglizismen hooray!), mit dem man viele tolle Sachen machen kann, ohne vorher Vertex Arrays zu definieren und zu füllen usw. Für echte Hochleistungs-Apps ist das nicht zu gebrauchen, aber halt sehr schön zum tüfteln.
Für Performance muß man's dann mit Vertex Arrays machen, oder sich mit diversen Extensions rumschlagen. Man kann sich dran gewöhnen, aber da ist D3D dann wohl tatsächlich angenehmer.

Bsp
glColor4ub(255,128,0,255);
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f,-1.0f,0.0f);
glVertex3f( 1.0f,-1.0f,0.0f);
glVertex3f( 0.0f, 1.0f,0.0f);
glEnd();Und fertig ist das orange Dreieck :)

Exxtreme
2002-08-26, 00:10:05
Originally posted by zeckensack
Auf die Gefahr hin, fatalistisch zu klingen:
IMO wird es Microsoft trotzdem schaffen, daß man größere in VS.NET entwickelte Projekte nirgendwo anders kompilieren kann, und umgekehrt. Wie auch bei C++ geschehen ;(
("disable language extensions" anyone?)
Full Ack!
MS ist halt so. Die nehmen einen bestehenden Standard, erweitern ihn etwas und machen ihn zum Rest der Welt inkompatibel. Danach verkaufen sie ihn als was Neues. Mit Java haben sie es auch versucht. Das lief dann firmenintern unter "Pollution". Das Ziel war, Java die Plattformunabhängigkeit zu nehmen und es an Windows zu binden. Deswegen haben die sich auch mit Sun so richtig in die Haare gekriegt. Nur Sun war in dieser Sache ein richtiger Gegner.

Gruß
Alex

stefan42
2002-08-31, 16:44:27
NVidia hat erst sehr nette Worte für OpenGL gefunden (und für deren NV30 auch...):

3. Most advanced 3D rendering functionality
* Everything NV30 does exposed
* Surpasses DirectX 9
* And surpasses every competitor’s hardware
4. Fastest hardware, fastest API

Siehe: http://developer.nvidia.com/view.asp?IO=nv30_emulation
Overview Slides for the NV30 OpenGL Specifications (.pdf) (406 KB)

Aber im Ernst: Wenn es Dir kein besonderes Anliegen ist, zwischen unterschiedlichen Grafikkarten portabel zu sein, dann lässt sich im Falle von NVidia die Grafikkarte unter OpenGL besser ausreizen (und bevor es mit DirectX möglich ist). Ob die Portabilität bei DirectX großen Wert hat, bezweifle ich allerdings stark (Pixelshader Versionen, Driver CAPS checken etc.)

Cyphermaster
2002-09-01, 22:13:56
Es ist doch immer eine Frage der Nachfrage, welches System sich durchsetzt. Das war sowohl bei Video so (Beta/VHS), bei Betriebssystemen (MS- gegen DR- und IBM-DOS), und es ist bei fast allen Technologien dasselbe gewesen seit Anbeginn der Zeit.

Ich persönlich tendiere eher zu OpenGL als Plattform, da es firmenunabhängiger als DirectX ist, und mindestens genauso gute Ergebnisse liefert, ohne daß man alle paar Wochen ne neue Version runterladen "darf".
Was die grafischen Möglichkeiten angeht, so ist OpenGL im Profibereich schon lange Plattform-unabhängig bewährt, nur fehlte im Gaming-Sektor bislang einfach die Akzeptanz, um Microsofts Gegenstück zum IE auf dem Gebiet der Grafik-APIs zu verdrängen (nicht zuletzt wird mit Direct-X-Aufklebern ja seit dessen Entwicklung geworben bis zum Erbrechen!). Würden sich die Spiele-Entwickler da nicht so sehr einseitig beeinflussen lassen, wären auch folgerichtig die Grafikkarten viel eher auf OpenGL-Kompatibilität ausgerichtet, als momentan - augenblicklich wirbt man halt verkaufswirksam mit Kompatibilität zum neuesten (wohlgemerkt: nicht zum besten !) Grafik-API von Microsoft; und die User kaufen...

Für den Verkauf von Hardware sind rasch wechselnde Spezifikationen wie bei DX einfach ideal, um Umsatz zu machen. BESSER wirds dadurch nicht unbedingt! Mir ganz persönlich wäre es lieber, wenn OpenGL 2.0 sich als zukünftiger Standard vor Direct-X etablieren könnte, da darin die imho besseren Konzepte stecken, als in der "unendlichen Geschichte" DX 8.X/9.X/10.X/XX.X

Demirug
2002-09-02, 07:40:03
ohne jeglichen Zweifel erlaubt OpenGL eine bessere Ausnutzung der Chipfeatures. Der Geschwindigkeitsabspekt hängt zu stark von den Treibern ab um da eine generele aussage zu machen.

stefan42, du bezweifelts die Hardwareunabhängigkeit von DirectX und das zu einem gewissen Teil zu recht. Der entscheidende Vorteil ist allerdings das wenn ein Feature als supportet gemeldet wird es auf allen Chips auf die gleiche Art und Weise angesteuert wird.

Sascha, OpenGL 2.0 ist durchaus ein Schritt in die richtige richtung. Allerdings wird es wenn es denn dann mal offiziel wird und Treiber verfügbar sind leider schon wieder veraltet sein.

Wuzel
2002-09-02, 09:17:19
Naja das einzige was ich wirklich einigermassen progen kann ist Sun GL, eine komerz. bibi von Sun, Open GL ist ja nur wie der Name sagt das die 'offenen und frei zugänglichen nicht komerz. ' bibis genutzt werden ......

Und da seh ich den Vorteil -> offen und frei zugänglich , was man vom COM / ATL Direct 3 d nicht sagen kann ...
Direct x ist ja bloss der oberbegriff von ner Sammlung an COM tralla leck mich tot 'bibis' wie zum bleistift Direct Show das in Dx8 erstmals integriert wurde ( Vorgänger von den Avi Cap gedöns ).

Die Sache sollte man sich halt auch vor Augen halten -> und Sie sind 'frei' , freiheit ist ein wort das nicht jeder gleich versteht ( Stallman ).

Nasenbaer
2002-09-03, 23:23:39
Habe mich nun doch für OpenGL und seine Plattformunabhängigkeit entschieden. Naja für Sound und Multimedia muss ich mich dann noch mit anderen Schnittstellen beschäftigen. Ist OpenAL plattformunabhängig und ist OpenML schon released worden? Von denen hörte ich in letzter Zeit was.

Ziel ist es einen Mediaplayer für Windows und Linux zu programmieren - OpenGL für die Soundvisualisierung. :)

Mfg Nasenbaer

zeckensack
2002-09-04, 00:28:44
Plattformunabhängiger Sound:
http://www.libsdl.org/index.php