Abstrakte vektoren :D



  • 😮

    Azrael, il Meraz schrieb:

    Ich wollt mich mal an einer simplen 3D-Engine versuchen

    Azrael, il Meraz schrieb:

    Sag mir nicht direkt, es macht keinen Sinn. Das würde ja heißen, all die tollen Bücher über Spieleprogrammierung, die die Programmierung einer Engine erklären wären sinnlos. Aber auch wenn sie das sind würde ich dann gerne eine Alternative hören, wie ich das Erlernen dieses Gebietes anpacken soll :).

    Versuch erst eine fertige Engine zu nutzen.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-203218.html

    Das ist eine abstracte Klasse du kannst
    davon keine Objekte erstellen " VecClass a; " du kannst
    aber Pointer darauf erstellen " VecClass *b; ".

    class VecClass
    {
        // Eine function kann einen Pointer zurück liefern
        virtual VecClass*        operator *        (float f) const        =0;
    
    };
    


  • Danke bisher.
    Dass virtuelle vektoren ne schlechte Idee ist, hab ich mittlerweile bemerkt :p .
    Nun - Ihr gebt mir folgendes zum Auswählen:

    1. fertige Engine nutzen
    2. Schlechte Idee: Virtuelle Vektoren (pointer als rückgabe)

    Es wäre schön, ein paar mehr vorschläge zum thema "eigene engine" zu hören. Oder ist es mittlerweile so tabu, bei einer Engine anzufangen, dass ich es besser vergessen soll? 🙄



  • Azrael, il Meraz schrieb:

    Fehlermeldung:

    error C2259: 'VecClass' : cannot instantiate abstract class
            due to following members:
            'VecClass VecClass::operator *(float) const' : is abstract
    

    Aha. Damit kann man doch schon mal was anfangen. Scheint als wäre der Fehler "erstaunlicherweise" doch nicht ganz wo du ihn vermutest.

    Azrael, il Meraz schrieb:

    Abstrakte Klassen können wohl keine Funktionen haben, die die Klasse als rückgabewert haben.

    Keine Funktion, keine Methode kann eine Klasse als Rückgabewert haben.

    Azrael, il Meraz schrieb:

    Ne häßliche Idee wärs, als Rückgabetyp void* zu verwenden und dann bei Anwendung auf (VecClass*) casten und dereferenzieren (oder dereferenzieren und dann in (VecClass) umcasten).

    Nicht nur in der Tat hässlich, sondern auch zum Scheitern verurteilt.

    Azrael, il Meraz schrieb:

    Selbst wenn nicht, sehe ich keinen Grund warum diese von OGL oder D3D wissen müssten.

    Ich verstehe nicht ganz, was du damit meinst

    Das war mir schon klar.

    Azrael, il Meraz schrieb:

    Sag mir nicht direkt, es macht keinen Sinn. Das würde ja heißen, all die tollen Bücher über Spieleprogrammierung, die die Programmierung einer Engine erklären wären sinnlos. Aber auch wenn sie das sind würde ich dann gerne eine Alternative hören, wie ich das Erlernen dieses Gebietes anpacken soll :).

    Deine Logik ist vollkommen kaputt.

    Aber, nichtsdestotrotz, habe ich mich wohl geirrt. Wenn dein Endziel ist, einfach nur über 3D-Engines und deren Implementation etc. bescheid zu wissen, macht es natürlich Sinn zu Lernzwecken einige 3D-Engines zu schreiben und zu studieren. Wobei ich mit Sicherheit sagen kann dass dieses Unterfangen um einiges effektiver wäre würdest du wenigstens die Grundlagen der Sprache deiner Wahl beherrschen.



  • habe den Ansatz verfolgt, alles abstrakt anzulegen, um die Verwendung mehrerer APIs zu ermöglichen

    denkst du denn, dass direct3d auf anderen mathematischen grundlagen aufbaut als opengl?!



  • @finix: Super, du hast mir jetzt gesagt, dass ich keine Ahnung von C++ hab, nicht in der Lage bin, dich zu verstehen, meine Idee komplett schwachsinnig ist, aber mein Ansatz stimmt. Vielen Dank für den konstruktiven Beitrag.



  • hellihjb schrieb:

    habe den Ansatz verfolgt, alles abstrakt anzulegen, um die Verwendung mehrerer APIs zu ermöglichen

    denkst du denn, dass direct3d auf anderen mathematischen grundlagen aufbaut als opengl?!

    Nö. Wiederum was äußerst konstruktives.....
    Wenn ich jetzt DirectX-Vektoren und matrizen verwende, muss ich doch DirectX-header einbinden? = kein API-Unabhängigkeit.



  • Naja, Azrael, man sieht aber dass du keine Ahnung von C++ hast 🙂

    Was deine Vektor-Klasse angeht: die meisten Engines haben eigene Vektor-Klassen, die intern keine OpenGL oder Direct3D Funktionen verwenden. Oft sind diese Vektor-Klassen sogar komplett inline implementiert. Und es gibt normalerweise auch nur eine Version z.B. eines 3D oder 4D Vektors pro Engine, unabhängig davon welches Backend verwendet wird.

    Die Vektorklassen von Engines werden ja auch nicht verwendet um damit während eines Spiels oder einer Animation die zig- oder hunterttausenden Vertices zu manipulieren aus denen irgendwelche Objekte zusammengesetzt sind, das wäre unnötig langsam, ganz egal wie die Vektorklasse jetzt implementiert ist. Diese Vektorklassen verwendet man vielleicht zum Laden von Vertexdaten, bevor man die auf die Grafikkarte überträgt, oder zum manipulieren von Position/Ausrichtung/... von einigen wenigen hundert oder tausend Objekten in einer Szene.



  • Wenn ich jetzt DirectX-Vektoren verwende, muss ich doch DirectX-header einbinden?

    Kann man, muss man aber nicht:

    typedef struct _D3DVECTOR {
        float x, y, z;
    } D3DVECTOR;
    

    ...und das ist gar nicht mal so unterschiedlich von dem was OpenGL fuer einen Vektor haelt 🙂
    Bei Matrizen sieht's aehnlich aus (beachte zeilen/spalten-layout)



  • Letztlich haste grob wohl 2 Möglichkeiten:

    1. Selber schreiben. Du lernst viel dabei, wirst jedoch wohl nicht die Effizient von OGL und D3DX Code erreichen.
    2. Fertiges Zeug benutzen, z.B. einfach über einige #defines und typedefs.


  • @hustbaer: danke, also doch eigene und mit eigener Implementation. Hmmm, höchstwahrscheinlich werde ich zuvor etwas mit einer fertigen Engine versuchen. Da ich danach aber die Engine zum Funktionieren bringen will, noch eine frage: Wenn ich die Vektoren/Matrizenoperationen in C++ umsetze und nicht in inline-assembler mit SSE und whatever, ist das dann am ende gravierend? nicht dass ich dann eine einfache kugel mit 3 fps auf nem highend-rechner rendern kann...

    @ keine Ahnung von C++: 😡 😡 😡 grrrrrrrr..... wenn ich "keine" Ahnung hätte, wüsste ich nicht was ne variable ist, geschweige denn eine abstrakte klasse. Mein Wissen ist beschränkt und ausbaufähig, aber gleich "keine Ahnung" ist echt erniedrigend 😞

    @this->that: punkt 2 etwas genauer. Wäre sehr dankbar. bzw. was soll "fertiges zeug" sein?



  • eine simple klasse nicht compiliert zu bekommen, grundsaetzliche designentscheidungen und c++ grundlagen sind nicht ganz das thema dieses unterforums.



  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • rapso schrieb:

    eine simple klasse nicht compiliert zu bekommen, grundsaetzliche designentscheidungen und c++ grundlagen sind nicht ganz das thema dieses unterforums.

    Einspruch -meine eigentliche Frage war, Wie ich die Mathematik in einer 3D-Engine implementieren sollte, was mit dem Thema der Spiele-/Grafikprogrammierung zu tun hat. Dass die leute mich zum Abdriften bewegen, indem sie mir meine Unfähigkeit zu beweisen versuchen, war nicht einkalkuliert.



  • Azrael, il Meraz schrieb:

    @finix: Super, du hast mir jetzt gesagt, dass ich keine Ahnung von C++ hab, nicht in der Lage bin, dich zu verstehen, meine Idee komplett schwachsinnig ist, aber mein Ansatz stimmt. Vielen Dank für den konstruktiven Beitrag.

    Mir ist klar dass ich den Betroffenen (und sonstigen Beiwohnenden) oftmals oder gar überwiegend nicht hilfreich erscheine. In Momenten wie diesem eher arrogant und fies, nicht wahr? Ätzend und kontraproduktiv? Das liegt an dir allein.

    Aber ich habe recht. Vielleicht nicht in der Weise wie ich mit dir umgehe -- das steht sicherlich zur Debatte --, aber mit dem Urteil was ich (vorläufig) über dich fälle. Frag z.B. hustbaer; der nutzt jede Gelegenheit mit mir nicht übereinzustimmen, aber, auch wenn er loads more politically correct ist, jede Gelegenheit nutzt mir an den Karren zu fahren, etc., wird er (in seinem innerstem 😉 ) meinem Urteil zustimmen; was er eigentlich sogar schon (mehrfach) getan hat, du hast es nur nicht entziffern können (Hint: hustbaers Posts).

    Denke ich dass du keine Ahnung von C++ hast? Ja. (Hint: das hast du mit deinem Post bewiesen. Denkst du die anderen haben nur zufällig dein ganz konkretes und spezifisches Problem nicht erraten, sondern mit an Sicherheit grenzende Wahrscheinlichkeit haargenau definieren können?).

    Denke ich dass du mich nicht verstehst (Hint: im Gegensatz zu "nicht in der Lage bist")? Ja. (Hint: "Ansatz verfolgt, alles abstrakt")

    Denke ich dass deine Idee [eine 3D-Engine zu schreiben] komplett schwachsinnig ist? Ja. Sofern du nicht, wie oben beschrieben, ganz abstrakt oder, aus welchen Gründen auch immer, praktisch, einen Einblick in die Programmierung einer Engine erhalten willst, halte ich deine Idee für schwachsinnig.

    (Hint: du hast über keinen meiner Hints sinniert, oder?)



  • Azrael, il Meraz schrieb:

    @ keine Ahnung von C++: 😡 😡 😡 grrrrrrrr..... wenn ich "keine" Ahnung hätte, wüsste ich nicht was ne variable ist, geschweige denn eine abstrakte klasse. Mein Wissen ist beschränkt und ausbaufähig, aber gleich "keine Ahnung" ist echt erniedrigend 😞

    Haha. Naja. Keine Ahnung von C++ zu haben ist keine Schande, niemand kommt auf die Welt und hat automatisch eine Ahnung von C++. Dies bestätigt zu bekommen ist keine Schande, und schon gar kein Grund mit "😡" zu reagieren! (Btw, du hast keine Ahnung von abstrakten Klassen.)



  • geh mir weg mit deinem Provokativen OT...
    Ich will Hilfe zu Mathematikimplementierung in einer Selbstgeschriebenen 3D-Engine. Und keine kritik meiner programmierfähigkeiten.



  • Azrael, il Meraz schrieb:

    rapso schrieb:

    eine simple klasse nicht compiliert zu bekommen, grundsaetzliche designentscheidungen und c++ grundlagen sind nicht ganz das thema dieses unterforums.

    Einspruch -meine eigentliche Frage war, Wie ich die Mathematik in einer 3D-Engine implementieren sollte, was mit dem Thema der Spiele-/Grafikprogrammierung zu tun hat. Dass die leute mich zum Abdriften bewegen, indem sie mir meine Unfähigkeit zu beweisen versuchen, war nicht einkalkuliert.

    naja, du willst ueber designentscheidungen reden ohne die grundlagen zu verstehen. klar reden wir mit dir gerne darueber wie man ein haus baut, nur sagst du, dass saegen nutzlose werkzeuge sind weil du dich damit geschnitten hast.

    nichts fuer ungut. aber dir wird engine programmieren weit mehr spass machen wenn du deine c++ faehigkeiten ausbaust. sieh es nicht so sehr als 'du hast keine ahnung von c++', als viel mehr 'du hast wenig _erfahrung_ mit c++ und noch sooooviel wissen dass du dir aneignen kannst' 😉

    und ich hab den thread verschoeben, weil hier probleme sind, die weit vor dem schreiben einer engine geloest sein muessten. hier in c++ kann man dir vielleicht eher helfen, nicht jeder schaut sich alle unterforen an 😉

    und wenn du wirklich darauf bestehst wissen zu wollen wie man's richtig macht, schau dir mal ne open source engine an. so schlecht sind die garnicht 😉



  • *Cognitive dissonance is my friend.

    I care neither for Dunning nor Kruger.

    Also, what cognitive dissonance?

    Oh, the humanity!*

    (Sorry, I'll stop laughing now.)

    🙂



  • Sagt mal, wieso krieg ich eigentlich gesagt, ich würde die grundlagen von C++ nicht verstehen - nur weil ich versucht habe, eine Abstrakte Klasse als Rückgabewert zu verwenden? finix, wenn du schon so freundlich bist, mir zu sagen, ich hab keine ahnung, dann sag mir doch bitte, was ich denn in C++ beherrschen lernen soll...



  • Azrael, il Meraz schrieb:

    Sagt mal, wieso krieg ich eigentlich gesagt, ich würde die grundlagen von C++ nicht verstehen - nur weil ich versucht habe, eine Abstrakte Klasse als Rückgabewert zu verwenden? finix, wenn du schon so freundlich bist, mir zu sagen, ich hab keine ahnung, dann sag mir doch bitte, was ich denn in C++ beherrschen lernen soll...

    Es gibt nicht viele wesentlich schwierigere Dinge als ne eigene Grafikengine zu schreiben. Du brauchst zuallererst Erfahrung. Solche Fehler wie du sie machst, sollten nicht mehr als Tippfehler sein. Auch solltest du umfassende Kenntnisse im Software design haben(und demzufolge schon einige kleinere Projekte fertiggestellt haben), denn sonst wirst du dich zich mal mit Situationen rumschlagen müssen, in denen du merkst, dass irgendwas nicht so wirklich zusammenpasst, und du dann endlose Mengen Code umfrickeln musst(wodurch das Ergebnis auch nicht mehr besser wird).
    Templates sind auch keine schlechte Anlaufstelle, denn vieles ist mit templates einfacher zu handhaben als mit abstrakten Basisklassen, man muss nur wissen, wie.
    Auch solltest du schon Erfahrungen mit fortgeschrittenen Techniken haben(das experimentieren mit boost hilft da viel weiter), und du solltest mehr als nur die Grundlagen von Exceptions kennen(wie schreibt man exception sicheren Code?).


Anmelden zum Antworten