DirectX oder OpenGL?



  • Es ist halt einfach eine Tatsache das viele Microsoft Produkte gut sind.

    Es ist einfach eine Tatsache das viele Microsoft Produkte schlecht sind. 🙂



  • knivil schrieb:

    Es ist halt einfach eine Tatsache das viele Microsoft Produkte gut sind.

    Es ist einfach eine Tatsache das viele Microsoft Produkte schlecht sind. 🙂

    Sehe ich anders, aber das artet aus.
    btt



  • Dich hat niemand gefragt!
    Es ist einfach Tatsache das viele MS Produkte Grottenschlecht sind.
    Wir wären viel weiter wenn MS nicht alles Patentieren würde.



  • Du- schrieb:

    Dich hat niemand gefragt!
    Es ist einfach Tatsache das viele MS Produkte Grottenschlecht sind.
    Wir wären viel weiter wenn MS nicht alles Patentieren würde.

    z.B.?



  • Windows driver development, WDM oder COM, DLLs und Manifeste, Redistributable Packages, ... und um zum Thema zurueckzukehren: Linkshaendige Koordinatensysteme.



  • Ok. Anstatt mit "Tatsachen" um mich zu werfen, hier vielleicht ein paar Argumente was OpenGL angeht:

    Pro

    • Bedingt Portabel
    • Man bekommt sehr schnell was gezeichnet (allerdings kommt man auf dem dabei notwendigerweise beschrittenem Weg nicht sehr weit)

    Contra

    • Es gibt kaum aktuelles Material im Internet, bzw. es ist, vor allem für einen Anfänger, sehr schwer aktuelles von all dem hoffnungslos veralteten Kram zu unterscheiden.
    • Das Objektmodell ist schwer kaputt
    • Globale Statemachine
    • Multidisplay wird zum Alptraum
    • Multithreaded Rendering kannst du praktisch knicken
    • Es ist auch nach über 10 Jahren immer noch nicht möglich, Shader offline zu kompilieren.


  • knivil schrieb:

    Windows driver development, WDM oder COM, DLLs und Manifeste, Redistributable Packages, ... und um zum Thema zurueckzukehren: Linkshaendige Koordinatensysteme.

    Was is das Problem mit COM, DLLs, Manifesten und Redistributable Packages?
    Was hat Microsoft mit Koordinatensystemen zu tun? Aber gut, dann hab ich einen Schocker für dich: OpenGL verwendet auch ein linkshändiges Koordinatensystem...
    Abgesehen davon wurde jegliche Innovation der letzten 10 Jahre von Microsoft/Direct3D vorangetrieben. OpenGL hat es 2011 endlich geschafft soweit aufzuholen, dass die Technologien zumindest Featuremäßig wieder einigermaßen auf dem gleichen Stand sind. Das Problem ist, dass immer noch niemand den Mut hat die alte API einfach wegzuwerfen und eine neue, zeitgemäße zu entwerfen. Microsoft hat das mit Direct3D bereits mehrmals getan und es war gut so. OpenGL hätte es wirklich bitter nötig und es gab auch Bestrebungen dahin (Stichwort Longs Peak). Leider sind die bisher alle gescheitert.
    Wenn dus von mir einfach nicht hören willst: Selbst John Carmack sagt dass Direct3D mittlerweile die bessere API ist.



  • knivel 👍 +1



  • @dot:
    Eine dumme Frage: DirectX Programme haben die Eigenschaft das sie auf unterschiedlichen Rechnern unterschiedlich aussehen. Ist das bei OpenGL genauso ?

    Es ist einfach eine Tatsache das viele Microsoft Produkte schlecht sind. 🙂

    Bedeutet jetzt MS, die Meckern Sinfonie ?

    Irgentwie habe ich das Gefühl es wird ein wenig Kult über MS zu meckern. Gewiss, die Produkte sind nicht perfekt, aber so schlecht wie viele meinen sind diese auch nicht. Dafür habe ich schon andere geistige Ergüsse gesehen, deren Erzeuger doch allzugerne durch 0 dividieren möchte. Und gerade da ahne ich Böses bei der Beschreibung von dot zum Thema OpenGL (Objektmodell, Doku).

    Aber eine Frage bleibt: Wer macht es besser ?



  • Bitte ein Bit schrieb:

    @dot:
    Eine dumme Frage: DirectX Programme haben die Eigenschaft das sie auf unterschiedlichen Rechnern unterschiedlich aussehen. Ist das bei OpenGL genauso ?

    Was genau meinst du mit "unterschiedlich aussehen"?



  • Nun ja, wenn ich eine einfache Linie in einer Farbe zeichne, sieht diese auf manchen Rechner etwas dicker aus als bei anderen Rechnern. Ich vermute dass das mit den Fähigkeiten der Grafikkarte zusammenhängt.

    Diesen Effekt würde mich auch mal bei OpenGL interresieren. Ich bin aber noch nicht dazugekommen ein Beispiel auszuprobieren.



  • @dot: Du uebertreibst, bei einigen Sachen bist du fehlinformiert und eine echte Argumentation kann ich auch nicht erkennen.



  • knivil schrieb:

    @dot: Du uebertreibst, bei einigen Sachen bist du fehlinformiert und eine echte Argumentation kann ich auch nicht erkennen.

    Die Punkte, die ich aufgezählt hab, entstammen meiner Erfahrung im Umgang mit beiden APIs, ist also nicht grad so, dass ich einfach nachplappere was ich irgendwo mal aufgeschnappt hab. Aber natürlich kann es sein dass ich in enigen Punkte falsch liege. In dem Fall würde ich es begrüßen, wenn man mich über meine Fehlinformation aufklärt, anstatt einfach nur festzustellen dass ich falsch informiert bin...

    Bitte ein Bit schrieb:

    Nun ja, wenn ich eine einfache Linie in einer Farbe zeichne, sieht diese auf manchen Rechner etwas dicker aus als bei anderen Rechnern. Ich vermute dass das mit den Fähigkeiten der Grafikkarte zusammenhängt.

    Zeichnest du die Linie mit Antialiasing oder ohne? Mit kann schon sein dass es da sichtbare Unterschiede zwischen Grafikkarten gibt, denn OpenGL beschränkt sich gleich wie Direct3D auf die Angabe von Richtlinien was das Verhalten des Rasterizers in Punkto Linienrendering angeht. Es gibt nur ein paar harte Grenzen in denen die Hardwareimplementierung sich bewegen muss, z.B. in Form von maximal erlaubten Abweichungen von einem als ideal definierten Ergebnis.



  • Shader gab es in OpenGl ueber ARB nicht erst seit 2.0 . Angefangen hat es mit der Geforce 3, wenn ich mich recht erinnere. Laut Wikipedia sind ab OpenGl 4.1 Shader-Programme auch ab 4.1 ladbar. Desweiteren fuehrst du einige Punkte an, fuer die OpenGl nichts kann: bedingt portabel, was tun wenn die Treiberunterstuetzung von Ati/Amd fehlt. Klar kann zwischen links- und rechtsseitigem Koordinatensystem leicht gewechselt werden, aber der default sieht anders aus. Als Teilzeitphysiker bevorzuge ich das letztere. Wir koennen auch gern ueber COM, Manifeste oder Redistributables reden, aber das will ich eigentlich nicht. Schade das du Treiberentwicklung ausgespart hast, da hat sich aktuell ziemlich viel Frust angestaut. Unter Linux sind viele Sachen besser geloest.

    knivil schrieb:

    Es ist halt einfach eine Tatsache das viele Microsoft Produkte gut sind.

    Es ist einfach eine Tatsache das viele Microsoft Produkte schlecht sind. 🙂

    Leider hast du das nicht verstanden. Aber fuer dich auf deutsch: Es ist keine Tatsache, dass viele Microsoftprodukte gut sind, es ist nur deine Meinung.



  • knivil schrieb:

    Shader gab es in OpenGl ueber ARB nicht erst seit 2.0 . Angefangen hat es mit der Geforce 3, wenn ich mich recht erinnere. Laut Wikipedia sind ab OpenGl 4.1 Shader-Programme auch ab 4.1 ladbar.

    Ich sprach nicht von der Möglichkeit überhaupt Shader zu verwenden. Das ging natürlich schon viel früher, wenn auch nur über herstellerspezifische Extensions.
    Ich sprach von der Möglichkeit Shader zur Compilezeit des Programms zu kompilieren und dann nur den Bytecode mitzuliefern, anstatt Shader erst zur Laufzeit beim Endbenutzer des Programmes aus Quellcode zu kompilieren. Das ist mit OpenGL auch am 5.1.2012 um 15:34 Uhr noch immer einfach nicht möglich, Direct3D unterstützt das seit es Shader überhaupt nur gibt.

    knivil schrieb:

    Desweiteren fuehrst du einige Punkte an, fuer die OpenGl nichts kann: bedingt portabel, was tun wenn die Treiberunterstuetzung von Ati/Amd fehlt.

    Auf die teilweise schlechte Treiberunterstützung spielte ich damit gar nicht an, das ist in letzter Zeit zum Glück ein immer kleineres Problem (*böser Blick in Richtung Intel*). Viel eher darauf, dass OpenGL auf manchen (z.B. mobilen) Plattformen nur als Subset zur Verfügung steht und gewisse Dinge nur über herstellerspezifische Extensions machbar sind, sowie die Tatsache dass die Anbindung an das jeweilige Betriebssystem naturgemäß nicht plattformunabhängig ist. Zumindest die Enumeration der Hardware und Initialisierung von OpenGL erfordert also immer plattformspezifischen Code, da OpenGL keine Library sondern nur ein Standard ist der diese, für eine ernsthafte Anwendung durchaus wesentlichen, Dinge nicht umfasst.

    knivil schrieb:

    Klar kann zwischen links- und rechtsseitigem Koordinatensystem leicht gewechselt werden, aber der default sieht anders aus.

    Es gibt nur drei Koordinatensysteme die die Grafik-API vorgibt: Clipspace, Screenspace und Texturespace. In Direct3D sind alle linkshändig, in OpenGL ist der für uns wohl interessante Clipspace (der in den deine Primitive abgebildet werden) linkshändig und die anderen beiden rechtshändig.
    Keine aktuelle Inkarnation einer der beiden APIs kennt Dinge wie Objectspace, Worldspace oder Viewspace überhaupt. Und da es das auf API-Ebene nicht gibt, gibt's auch keinen "default". An irgendwelche historisch bedingten Konventionen ist niemand gebunden, wenn deine Mathelibrary da was macht was dir nicht gefällt dann liegt das an der und nicht an der Grafik-API.

    knivil schrieb:

    Schade das du Treiberentwicklung ausgespart hast, da hat sich aktuell ziemlich viel Frust angestaut. Unter Linux sind viele Sachen besser geloest.

    Das habe ich bewusst ausgelassen da ich darin nicht genug Erfahrung habe um darüber eine derartige Diskussion zu führen...



  • Zeichnest du die Linie mit Antialiasing oder ohne?

    Ich zeichne sie mit Antialiasing.



  • also dazu, dass jmnd geschrieben hat dass es kaum gute tutorials hast, hab ich was zu sagen, im internet hab ich viel mehr und viel bessere <b>deutsche</b> Tutorails gefunden als für direct3d, da hast nur die wahl zwischen der hochkomplizierten beiligenden dockumentation und einer kostenpflichtigen webseite, die auch nur bedingt funktioniert.



  • Was für Tutorials sind das denn die du da gefunden hast? Wenn sie wirklich aktuell und gut sind, dann wäre es nett die zu verlinken.

    dot schrieb:

    [...] Es gibt kaum aktuelles Material im Internet, bzw. es ist, vor allem für einen Anfänger, sehr schwer aktuelles von all dem hoffnungslos veralteten Kram zu unterscheiden.

    🙄



  • Es gibt kaum aktuelles Material im Internet, bzw. es ist, vor allem für einen Anfänger, sehr schwer aktuelles von all dem hoffnungslos veralteten Kram zu unterscheiden.

    Meistens reicht da schon eine Suche nach dem Stichwort und der OpenGL Version, die man verwenden möchte. Einiges steht auch schon im OpenGL Wiki drin oder allgemein in der Dokumentation von OpenGL. Im schlimmsten Fall kann man noch immer im Forum nachfragen.

    Das Objektmodell ist schwer kaputt

    Inwiefern schwer kaputt? Könntest du da noch etwas genauer werden?

    Multidisplay wird zum Alptraum

    Noch nie Mulitdisplay als Ziel gehabt. Kann daher, oder vll gerade deshalb, nicht sehen, warum das zum Albtraum wird.

    Multithreaded Rendering kannst du praktisch knicken

    Warum? Für mich ist eher der Sinn dahinter fraglich. Die Daten in die Grafikpipeline zu pumpen geht in der Regel schneller als das Zeichnen.

    Es ist auch nach über 10 Jahren immer noch nicht möglich, Shader offline zu kompilieren.

    Doch doch, das geht. Seit 4.1 (davor vll schon durch Extension, keine Ahnung) ist es möglich auf die Binärdaten der Shader und Programme zuzugreifen, diese zu speichern und direkt zu laden. Du kannst deinen Shadersource also bequem zu Hause kompilieren und nur den Bytecode mitzuliefern.

    ----

    Zugegeben, OpenGL stand lange still, sehr lange, vermutlich zu lange. Aber es geht wieder schneller voran. Vieles hat sich geändert, einiges wurde rausgeschmissen, einiges kam hinzu.



  • -Shelling- schrieb:

    Es gibt kaum aktuelles Material im Internet, bzw. es ist, vor allem für einen Anfänger, sehr schwer aktuelles von all dem hoffnungslos veralteten Kram zu unterscheiden.

    Meistens reicht da schon eine Suche nach dem Stichwort und der OpenGL Version, die man verwenden möchte. Einiges steht auch schon im OpenGL Wiki drin oder allgemein in der Dokumentation von OpenGL. Im schlimmsten Fall kann man noch immer im Forum nachfragen.

    Ja, wenn man weiß wonach man suchen muss, dann geht's. Und mit der Doku kann man arbeiten, auch wenn sie Lichtjahre von der MSDN entfernt ist. Aber hier gings um Material für Einsteiger. Ja, es wird auch dort langsam besser. Aber die populärsten Tutorials (ich denk da z.B. an NeHe) sind leider immer noch alles andere als aktuell. Ich kenn gerade mal zwei Tutorials die einem einigermaßen modernes OpenGL zeigen...

    -Shelling- schrieb:

    Das Objektmodell ist schwer kaputt

    Inwiefern schwer kaputt? Könntest du da noch etwas genauer werden?

    In OpenGL benutzt du die meisten Objekte (bei den Shadern haben sie es zum ersten Mal richtig gemacht) nicht direkt. Dein Objekt wird erst global gebunden und sämtliche nachfolgenden Operationen beziehen sich dann auf dieses, nun globale, Objekt. Wir alle kennen die Vorzüge von globalen Variablen (Action at a distance, Multithreading etc.). Dieses einzigartige System bietet aber natürlich noch eine Reihe weiterer Vorteile, hier ein Auszug:

    • Die API wird komplizierter
    • Die Komplexität der Implementierung kann drastisch erhöht werden
    • Viele lustige Bugs wären anders gar nicht möglich
    • Unter gewissen Umständen wird effektiv verhindert, dass das Programm zu performant wird

    -Shelling- schrieb:

    Multidisplay wird zum Alptraum

    Noch nie Mulitdisplay als Ziel gehabt. Kann daher, oder vll gerade deshalb, nicht sehen, warum das zum Albtraum wird.

    Naja, OpenGL selbst umfasst die dazu nötige Funktionalität gar nicht, aber die entsprechenden plattformabhängigen APIs drunter. Und verglichen mit DXGI empfind ich die Arbeit damit als Alptraum.

    -Shelling- schrieb:

    Multithreaded Rendering kannst du praktisch knicken

    Warum? Für mich ist eher der Sinn dahinter fraglich. Die Daten in die Grafikpipeline zu pumpen geht in der Regel schneller als das Zeichnen.

    OpenGL an sich bietet natürlich gar keine Unterstützung für multithreaded Rendering, das läuft ebenfalls über die APIs der jeweiligen Plattform (wgl, glx etc.). Asynchroner Upload von Daten ist damit hinzubekommen (wenn auch anstregend), aber richtiges multithreaded Rendering wie z.B. in Direct3D über Command Buffer gibt es afaik auf keiner wichtigen Plattform. Für einen rotierenden Würfel, wo triviale Daten in die Grafikpipeline pumpen das Einzige ist, was die Anwendung tut, spielt das alles natürlich keine Rolle. Für richtige Anwendungen aber schon.

    -Shelling- schrieb:

    Es ist auch nach über 10 Jahren immer noch nicht möglich, Shader offline zu kompilieren.

    Doch doch, das geht. Seit 4.1 (davor vll schon durch Extension, keine Ahnung) ist es möglich auf die Binärdaten der Shader und Programme zuzugreifen, diese zu speichern und direkt zu laden. Du kannst deinen Shadersource also bequem zu Hause kompilieren und nur den Bytecode mitzuliefern.

    Nein. Die generierten Binaries sind afaik nur für die Hardware/Treiberkonfiguration auf der sie erstellt wurden gültig. Du kannst Shader damit also bestenfalls cachen. Ich frag mich ehrlich gesagt, warum sie sich überhaupt die Mühe gemacht haben das Feature einzubauen...

    -Shelling- schrieb:

    Zugegeben, OpenGL stand lange still, sehr lange, vermutlich zu lange. Aber es geht wieder schneller voran. Vieles hat sich geändert, einiges wurde rausgeschmissen, einiges kam hinzu.

    Aber das was wirklich notwendig währe wurde nicht gemacht gemacht: Die aktuelle API wegschmeißen und eine fürs aktuelle Jahrhundert zu designen.
    Microsoft hat das (und das ist für Microsoft eigentlich eher unüblich) mit Direct3D sogar schon mehrmals gemacht. Und es war gut so. OpenGL hätte es mehr als bitte nötig. Leider sind alle Versuche dahingehend bisher gescheitert...


Anmelden zum Antworten