DirectX oder OpenGL?



  • 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...



  • Verwende eine Münze:

    Kopf = OpenGL, Zahl = Direct3D

    Oder lern die Theorie der 3D Darstellung. Dann kanst du dynamisch das verwenden, was gerade besser gefällt.

    Hier wirst du keine gute Antwort bekommen. Wenn man sich die Kommentare durchließt merkt man, dass 90% keine Ahnung haben und nur die populistischen Sprüche die sie irgendwo aufgeschnappt haben nachplappern.



  • Hallo,

    opengl arbeitet auf unterste Ebene mit der Hardware und bildet auf
    kürzestem Wege den Zugriff, das ist gut für das Verständnis zwischen
    Textaufkommen zum Resultat. Das ist schnell.

    DirectX Abstrahier Dir den ganzen Zirkus, so das Du mit Objekten
    aus dem Cominterface zu tun hast, viele Funktionen und Klassen kommen
    Dir hier entgegen wo Du erst nach längerer Einarbeitung den Faden halten kannst. DirectX Garantiert Dir auf Windows die Ausnutzung aller Möglichkeiten
    verkapselt in Klassen und Objekten.

    Beide ebenen haben Sinn. Wenn Du neu bist, fang mit OpenGL an um zu verstehen
    wie die Grundkonzepte dort ablaufen, im directX findest Du all das wieder
    und umso besser desto eher Du die LowLevelprogrammierung erlebt hast.

    Man muss die bittere Pille DirectX auf Windowsrechnern schlucken. Und OpenGL sollte man zuerst kennen lernen es ist Die Mutter auch Historisch.

    Grüße
    Karsten Schulz.

    Deine Mutter 🙂



  • Hab nichts gelesen, aber ich sag Mantle 😉 Endlich mal eine Alternative zu OpenGl und DirectX 😃



  • Der Thread ist schon reichlich alt. Ich glaub kaum dass das noch jmd. interessiert (@KahnSoft).


Anmelden zum Antworten