bewegung: position aus 3d-vektor berechnen



  • ich rotiere ja die achsen der kamera und das bringt das falsche ergebnis.

    es genügt ja eben nicht, wenn ich z.b. immer bei einer rechtskurve um die y-achse rotiere, wenn das flugobjekt nämlich gerade senkrecht nach oben fliegt, muss ich die z-achse nehmen. das wäre ja noch einfach zu lösen, aber wie rotiere ich um x- und z-achse, wenn das ovjekt nur leicht nach oben geneigt ist? und wie berechne ich diese rotation für alle achsen bei den möglichen anderen fluglagen?



  • Beeper schrieb:

    es genügt ja eben nicht, wenn ich z.b. immer bei einer rechtskurve um die y-achse rotiere

    Doch, Du musst um die y-Achse des Objekts drehen, nicht um die absolute y-Achse. Darum musst Du die Achsen bei jeder Drehung mit drehen.



  • es gibt kein objekt in dem sinne sondern nur die kamera - und die hat nur eine, absolute achse



  • Anscheinend willst Du es garnicht verstehen...
    Mach es so, dass Dein Objekt drei Achsen hat. Dann rotierst Du um diese Achsen, und rotierst die Achsen immer gleich mit. Ob das jetzt eine Kamera ist oder ein Objekt ist völlig egal.



  • Künstliche Dummheit? 😉



  • ist das hier der übliche umgangston wenn ihr auch nicht weiter wißt?

    wie soll ich die achsen rotieren??? die sind fest ausgerichtet, nämlich die absoluten weltachsen - da kann ich nichts rotieren!



  • ...und wenn ich um eine achse herum rotiert habe (wie ich es jetzt schon tue), dann ist eine rotation um eine andere achse eben nicht mehr um die absolute achse herum zu machen, sondern um einer relative achse (die ich nicht habe). also muß es eine möglichkeit geben, die gewünschte relative rotation auf die dafür nötige absolute rotation umzurechnen!?



  • Beeper schrieb:

    ist das hier der übliche umgangston wenn ihr auch nicht weiter wißt?

    Wir wissen weiter, aber Du willst die Vorschläge ja nicht annehmen! Wie soll man Dir da helfen? Wenn es mit Deinem System nicht klappt, musst Du vielleicht einsehen, dass Dein System Müll ist, und ein neues akzeptieren. Wenn Du das nicht willst, hast Du eben Pech gehabt.
    Sorry!

    Wenn ich hier frage, wie ich ein Maschinengewehr aus Strohhalmen bauen kann und mir alle sagen, dass ich dafür Metall brauche, ich jedoch auf der Strohhalmvariante beharre, wer ist dann der Doofe? 😉



  • "mein system" ist eine fertige 3d-engine die sicher kein müll ist. und bei "meinem system" kann ich beim view (der kamera) eben nur eine einzige matrix setzen. dass heißt ich habe nur EINMAL ein achsenset von x-, y- und z-achse. also muß ich die nötigen berechnungen (für die zusätzliche rotation der achsen) ja wohl manuell vornehmen

    vielleicht gibts hier im forum ja auch noch jemanden, der sich auskennt und nicht nur dampfplauderer?



  • Du hast es immer noch nicht verstanden... 😞
    Es reicht doch völlig, wenn man eine Matrix angeben kann. Das ist doch wohl bei jeder Engine so. Und diese Matrix baust Du Dir eben aus den Kameraachsen und der Position zusammen.

    Aber Du wirst mir ja doch nicht glauben.
    Vielleicht kann Dich das hier überzeugen (ist aber sehr schlampig, da schnell geschrieben):

    class Camera
    {
    public:
        VECTOR3 xAxis, yAxis, zAxis;
        VECTOR3 position;
    
        Camera() : xAxis(1.0f, 0.0f, 0.0f),
                   yAxis(0.0f, 1.0f, 0.0f),
                   zAxis(0.0f, 0.0f, 1.0f),
                   position(0.0f, 0.0f, 0.0f) {}
        ~Camera() {}
    
        void rotateX(float angle);
        void rotateY(float angle);
        void rotateZ(float angle);
        void move(const VECTOR3& movement);
        MATRIX44 getMatrix() const;
    };
    
    void Camera::rotateX(float angle)
    {
        // y- und z-Achse um die x-Achse rotieren lassen
        MATRIX44 rotation = rotationAxisMatrix(xAxis, angle);
        yAxis *= rotation;
        zAxis *= rotation;
    }
    
    void Camera::rotateY(float angle)
    {
        // x- und z-Achse um die y-Achse rotieren lassen
        MATRIX44 rotation = rotationAxisMatrix(yAxis, angle);
        xAxis *= rotation;
        zAxis *= rotation;
    }
    
    void Camera::rotateZ(float angle)
    {
        // x- und y-Achse um die z-Achse rotieren lassen
        MATRIX44 rotation = rotationAxisMatrix(zAxis, angle);
        xAxis *= rotation;
        yAxis *= rotation;
    }
    
    void Camera::move(const VECTOR3& movement)
    {
        // die Kamera bewegen
        position += movement.x * xAxis + movement.y * yAxis + movement.z * zAxis;
    }
    
    MATRIX44 Camera::getMatrix() const
    {
        // Kameramatrix erzeugen
        return translationMatrix(-position) *
               MATRIX44(xAxis.x, yAxis.x, zAxis.x, 0.0f,
                        xAxis.y, yAxis.y, zAxis.y, 0.0f,
                        xAxis.z, yAxis.z, zAxis.z, 0.0f,
                        0.0f,    0.0f,    0.0f,    1.0f);
    }
    

    Das ist für Direct3D. Bei OpenGL müsste man die Matrizen transponieren, soweit ich weiß.

    Viele Grüße vom Dampfplauderer, der sich überhaupt nicht auskennt, und der auch kein Buch über das Thema geschrieben hat, weil er ja absolut keine Ahnung hat.



  • TomasRiker schrieb:

    und der auch kein Buch über das Thema geschrieben hat

    troll oder angeber, das ist hier die frage.



  • Entschuldige bitte, aber ich lasse mich nicht als Dampfplauderer bezeichnen, der keine Ahnung von dem Thema hat. Wenn Du einem Diplomphysiker sagst, er habe doch keine Ahnung von Physik, darf er Dir dann nicht sein Diplom zeigen?



  • TomasRiker schrieb:

    Diplomphysiker

    korrektur: angeber oder größenwahnsinniger, das ist hier die frage



  • Beeper schrieb:

    "mein system" ist eine fertige 3d-engine die sicher kein müll ist.

    Doch, denn "Dein System" berechnet ja nur Müll bei Neigung mehrerer Achsen...!! 😃 😃



  • Trolljäger schrieb:

    korrektur: angeber oder größenwahnsinniger, das ist hier die frage

    Wenn dann bitte beides, Du Blödmann 🙄 🤡



  • TomasRiker schrieb:

    Du Blödmann

    da kommt dann wieder der Cewwlazz zum vorschein. eine geistige weiterentwicklung ist bei riker also nach wie vor nicht festzustellen



  • Scheiße, jetzt hast Du mich ertappt.
    PS: Wie ist Dein Name hier im Forum, wenn Du eingeloggt bist?



  • nee, war nur'n spass ⚠
    bin halt nen bisschen neidig auf dich gewesen, sorry 🙄



  • ich auch, sorry riker! :p
    bin frustriert weil ich kein projekt fertig krieg! 😡
    alles geht nicht wegen einem direct3d-fehler!
    weiß jemand wie man den wieder weg kriegt!!!



  • Wenn man den Leuten nicht hilft, wird man dumm angemacht, und wenn man ihnen dann doch hilft, ebenfalls. Dann wird die ganze Diskussion auf ein total niedriges Niveau gezogen, weil den Leuten die Argumente ausgehen. Wirklich schade.


Anmelden zum Antworten