OpenGl und DirectX in einer Engine



  • illuminator schrieb:

    Ich würde nämlich gern Sachen wie diese verwenden:

    struct Vector3
    {
        union
        {
            struct{float x,y,z;};
            D3DVECTOR p;
        };
    };
    

    Würde ich nicht, da unnamed struct's in C++ nicht erlaubt sind. Für sowas gibts meist bessere Lösungen.
    Ausserdem würde ich nicht so einen Mix machen. Entweder du benutzt dür den Mathe Teil der Engine zB für die D3D Implementierung komplett D3D(X) Funktionen oder komplett eigene Funktionen.



  • War da nicht irgendwas mit den Matrizen, die wurden glaube ich anders gespeichert. Das würde eine portable MatheLib doch erschweren...

    Bye, TGGC \-/



  • groovemaster2002 schrieb:

    illuminator schrieb:

    Ich würde nämlich gern Sachen wie diese verwenden:

    struct Vector3
    {
        union
        {
            struct{float x,y,z;};
            D3DVECTOR p;
        };
    };
    

    Würde ich nicht, da unnamed struct's in C++ nicht erlaubt sind. Für sowas gibts meist bessere Lösungen.
    Ausserdem würde ich nicht so einen Mix machen. Entweder du benutzt dür den Mathe Teil der Engine zB für die D3D Implementierung komplett D3D(X) Funktionen oder komplett eigene Funktionen.

    Ok, wenn es "nicht erlaubt" ist, warum ist es dann möglich? Bzw. was ist so schlimm daran, dieses außerordentlich praktische Feature zu verwenden?



  • TGGC schrieb:

    War da nicht irgendwas mit den Matrizen, die wurden glaube ich anders gespeichert. Das würde eine portable MatheLib doch erschweren...

    Bye, TGGC \-/

    Jo das kenn ich noch von meinem Umstieg auf OpenGL, Direct3D ließt die Matrizen Zeilenweise ein aber OpenGL Spaltenweise.

    Bei D3D:
    _11,_12,_13,_14
    _21,_22,_23,_24
    _31,_32,_33,_34
    _41,_42,_43,_44
    
    Bei OpenGL
    _11,_21,_31,_41
    _12,_22,_32,_42
    _13,_23,_33,_43
    _14,_24,_34,_44
    

    EDIT: http://www.zfx.info/DisplayThread.php?TID=15175 🙄



  • illuminator schrieb:

    Ok, wenn es "nicht erlaubt" ist, warum ist es dann möglich?

    Das liegt daran, dass der Compiler deiner Wahl das unterstützt (Thema Compilererweiterungen). Fakt ist aber, dass ISO C++ es nicht erlaubt. Sollte jemand deinen Code mit einem anderen (Standard-)Compiler übersetzen, so bekommt er lästige Warnungen oder wird im worst-case es überhaupt nicht übersetzen können.

    illuminator schrieb:

    Bzw. was ist so schlimm daran, dieses außerordentlich praktische Feature zu verwenden?

    Ich versteh nicht was an deiner Vector3 Implementierung damit so außerordentlich praktisch sein soll? Ein ähnliches Thema und wie man es imo besser lösen kann hatten wir letztens erst.



  • thx, wieder was gelernt.



  • Ist aber nicht so flexibel wie union. Perfomanz müsste man erstmal testen.

    Bye, TGGC \-/



  • Denk' auch dran daß bei OpenGL das Koordinatensystem anders herum ist, zudem die "permanente Kamera" genau antiparallel zu DX's ist, OpenGL std.mäßig nur 8 Lights unterstützt, etc. pp
    Zerbie zeigt in seinem neuen Buch eine API-unabhängige Engine zu bauen.
    David Eberly hat in seinem (mittlerweile älteren) Buch über "3D Engine Design" auch eine API-unabhängige Implementation versucht, über ein Interface, der Teil für OpenGL ist auch implementiert. Source dazu solltest Du auf seiner Firmenseite bekommen... http://www.magic-software.com/



  • TGGC schrieb:

    Ist aber nicht so flexibel wie union

    Es ging nicht um union, sondern um unnamed structs. unions kannst du von mir aus verwenden bis zum Abwinken (auch unnamed). Interessant wäre ausserdem, wenn du mal erkären könntest was nicht so flexibel sein soll.



  • groovemaster2002 schrieb:

    Hab gedacht, dass das Problem am besten mit union zu lösen wäre. Davon hab ich mich mittlerweile distanziert.

    Der [] Operator hat einen festen Rückgabe-Typ. Die Strukturen können sich aus verschiedenen Typen zusammensetzen.

    Bye, TGGC \-/



  • TGGC schrieb:

    Die Strukturen können sich aus verschiedenen Typen zusammensetzen.

    Tun sie aber nicht in diesem Fall, und ich hab ja auch nie behauptet, dass unions immer die schlechtere Lösung sind. Dass es ausserdem für jedes Problem die universelle Lösung gibt, sollte dir ja auch klar sein.


Anmelden zum Antworten