Abstrakte vektoren :D



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



  • thanx.
    Dass mir Erfahrung fehlt weiß ich und möchtegerne etwas dagegen unternemen xD.
    Danke für die Tipps, Die boost libraries schaue ich mir mal genau an. Hast du auch gute links zum Thema Exceptions? Würde mich freuen.



  • finix schrieb:

    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.

    Einspruch. Es liegt an dir, da du offenbar arrogant BIST.
    Deine nervigen Schachtelsätze, dein grauenhaftes Denglisch, deine peinlichen Zitate. All das wird ihm absolut nichts bringen und dient wohl eh nur deiner Profilierung. Sicher, dieses Posting hier wird ihm auch nix bringen, aber das musste mal gesagt werden.

    finix schrieb:

    Aber ich habe recht.

    🙄



  • Ich hab für dich mal was zusammengebastelt was man als 3D Vektor Klasse verwenden kann.

    #include <math.h>
    
    #pragma once
    
    class Vektor3D
    {
    public:					
        float x,y,z;
    public:
    	Vektor3D(const float x_,const float y_,const float z_): x(x_), y(y_), z(z_){};
    
    	Vektor3D():x(0),y(0),z(0) {};
    
    	Vektor3D(const Vektor3D& v): x(v.x), y(v.y), z(v.z) {} 
    
    	~Vektor3D(void){}
    
    	inline void set_Vektor(const float x_,const float y_,const float z_) {x=x_; y=y_; z=z_;}
    	inline const Vektor3D& operator =  (const Vektor3D& v)	{x = v.x; y = v.y; z = v.z; return *this;}
    	inline const Vektor3D& operator += (const Vektor3D& v)	{x += v.x; y += v.y; z += v.z; return *this;}
    	inline const Vektor3D& operator -= (const Vektor3D& v)	{x -= v.x; y -= v.y; z -= v.z; return *this;}
    	inline const Vektor3D& operator *= (const float f)		{x *= f; y *= f; z *= f; return *this;}
    	inline const Vektor3D& operator /= (const float f)		{if (f==0){throw "Division durch 0, class Vektor3D operator /= float";} 
                                                                   else {x /= f; y /= f; z /= f; return *this;}}
    	inline void Vektor3D::normalisiere() {float laenge_Kehrwert =1 / Vektor3D::laenge(); x*=laenge_Kehrwert; y*=laenge_Kehrwert; z*=laenge_Kehrwert;}
    	inline const float Vektor3D::laenge() {return sqrt(x*x + y*y + z*z);}
    	inline const float Vektor3D::nicht_Wurzel_laenge() {return (x*x + y*y + z*z);}
    
    };
    
    inline bool operator == (const Vektor3D& a, const Vektor3D& b)		{if(a.x != b.x) return false; if(a.y != b.y) return false; return a.z == b.z;}
    inline bool operator != (const Vektor3D& a, const Vektor3D& b)		{if(a.x != b.x) return true; if(a.y != b.y) return true; return a.z != b.z;}
    inline Vektor3D operator + (const Vektor3D& a,const Vektor3D& b)	{return Vektor3D(a) += b;}
    inline Vektor3D operator - (const Vektor3D& a,const Vektor3D& b)	{return Vektor3D(a) -= b;}
    inline Vektor3D operator - (const Vektor3D& a)					    {return Vektor3D(-a.x, -a.y, -a.z );}
    inline Vektor3D operator * (const Vektor3D& a, const float f)		{return Vektor3D(a)*=f;}
    inline Vektor3D operator * (const float f, const Vektor3D& a)		{return Vektor3D(a)*=f;}
    inline Vektor3D operator / (const Vektor3D& a, const float f)		{return Vektor3D(a)/f;}
    
    inline float skalarprodukt(const Vektor3D &v1,const Vektor3D &v2)
    {
    	return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
    }
    
    inline	Vektor3D kreuzprodukt(const Vektor3D& a,const Vektor3D& b) {return Vektor3D(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);}
    


  • Azrael, il Meraz schrieb:

    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? 🙄

    Ich glaube ein Weg, der Lösung Deines Problems näher zu kommen, wäre: trenne zunächst den mathematischen Teil von einer plattform-unabhängigen API einer 3D-engine.

    Den mathematischen Teil kannst Du selbst schreiben oder auch nicht. Er sollte völlig unabhängig von der engine-API sein, und daher benötigt man dort auch keine abstrakten Basisklassen mit plattformabhängigen Implementierungen.
    So könnte z.B. eine Vektor-Klasse aussehen und der Hinweis auf das Paket Lineare Algebra von boost kam ja auch schon.

    Die engine-API wiederum muss vom mathematischen Teil abhängig sein. Ein einfaches 'ZeichneEineKugel' benötigt ja mindestens eine Position, die hoffentlich nicht durch drei Parameter x,y und z sondern durch einen Vektor angegeben ist.

    Gruß
    Werner


Anmelden zum Antworten