Probleme mit der View Matrix



  • Hallo Leute
    Ich bin noch ein absoluter Anfänger, was die 3D Programmierung anbelangt,
    und so bin ich auch schon auf das erste Problem gestossen !
    Wieso brauche ich in einem 3D Universum 9 Achsen, um eine Kamera zu beschreiben ??? 😕

    3 Achsen für den LookAt Vector, 3 Achsen für den Right Vector und 3 Achsen für den Up Vector !!!

    Für was ist überhaupt der Right und der Up Vector ???

    Bitt helft mir, das ist wirklich sehr demoralisierend !!!

    P.S.
    Ich verwende keine D3DXMatrix Funktion, da ich ja verstehen möchte, was berechnet wird !



  • du hast nur jeweils 3 Koordinaten, die den Punkt im 3D Raum beschreiben (Ursprung + 1 Punkt -> Achse) also insgesamt 3 Achsen, wie du es erwartet hättest 😉
    So hab ich das zumindestend verstanden 🙄 (Vielleich hilft dir auch das hier beim Verständnis weiter)



  • Ich frage mich langsam, ob ich möglicherweise zu "Dumm" für 3D Berechnungen bin ?

    Versteht ihr den folgenden Code ???
    Also ich habe absolut keine Idee !!! Ich kann zwar mit sin und cos umgehen aber wie gesagt, ich sitze jetzt seit Stunden vor diesem Code und verstehe nich mal die erste multiplikation sprich, kann mir nicht vorstellen, was diese Formeln zu bedeuten haben !!!

    // initalisierung der Kamera
    Vector vRight(1.0f,0.0f,0.0f),vUp(0.0f,1.0f,0.0f),vDir(0.0f,0.0f,1.0f);
    float pitch = 1.3f,yaw = 3.6f,roll = 2.7f;

    // Vorberechnungen
    float sPitch = sinf(pitch),cPitch = cosf(pitch);
    float sYaw = sinf(yaw),cYaw = cosf(yaw);
    float sRoll = sinf(roll),cRoll = cosf(roll);

    vRight.x = cYaw*cRoll+sYaw*sPitchsRoll;
    vRight.y = sRoll
    cPitch;
    vRight.z = cYaw*sPitch*sRoll-sYaw*cRoll;

    vUp.x = sYaw*sPitch*cRoll-cYawsRoll;
    vUp.y = cRoll
    cPitch;
    vUp.z = sRoll*sYaw+cRoll*cYaw*sPitch;

    vDir.x = cPitchsYaw;
    vDir.y = -sPitch;
    vDir.z = cPitch
    cYaw;



  • Du musst den Code imo auch nicht verstehen, es reicht wenn du weißt wie man die Funktion anwendet (was jetzt natürlich kein Aufruf zum blinden copien&pasten sein soll !)

    Ändere einfach mal ein paar Werte um : Was passiert wenn man ein "-" vertauscht ? Sinus gegen Cosinus tauscht ? X mit Z vertausch ? Usw...

    Noch ein Tipp am Rande :
    sinf und cosf sind laaaaaaangsam, bau dir dafür lieber ne Lookup table, wo du dir die Werte beim Start des Programmes speicherst



  • Naja, klar muss ich denn Code an sich nicht verstehen, doch liegt es mir halt sehr am Herzen. Was ist, wenn ich z.B. einmal eine komplett andere Camerafunktionalität programmieren möchte ? Z.B. dass die Kamera sich um einem bestimmten Punkt dreht ohne dabei den Sichtkontakt zu dem Objekt zu verlieren ?

    Das bedingt doch dann ganz anderer Berechnungen ???
    Gibt es denn nirgends eine gute Quelle (kann ruhig auch in englisch sein) wo das ganze ausführlich erklährt wird ??? Auf der zfx Seite wird das ganze leider nur sehr oberflächlich erklährt !

    Ich wollte mich noch für die bisherigen Antworten bedanken !



  • Hi !

    Endlich mal einer der sich auch für die Hintergründe interssiert 🕶

    Zuerst einmal verweise ich dich auf die FAQ, dort gibts jede Menge Tutorials. Für Kameras musst du eben suchen. Google bietet sich natürlich auch an.

    Jedoch findet man im Internet relativ wenig Hintergrundinformationen zu Kameras allgemein. Was ich dir empfehlen würde, ist einfach auszuprobieren 🙂 Du wirst schnell merken wie die Kamera funktioniert, oder wie du sie verändern kannst.



  • Naja, ich begreife an sich schon, wie sich rotationen auf die 3 Vektorachsen auswirken und bin gerade daran, mir ein paar Formeln dafür zu schreiben ! Was isch nicht verstehe sind die Formeln von Stefan Zerbst !
    Z.B.

    Stefan Zerbst:
    vRight.x = cosf(Yaw)*cosf(Roll)+sinf(Yaw)*sinf(Pitch)*sinf(Roll);

    Da hatte ich zuvor folgende Formel aufgestellt:
    vRight.x = cosf(Yaw)*cosf(Roll);

    Ich stelle natürlich fest, dass der erste Teil meiner Formel mit der von Stefan übereinstimmt. Doch wafür ist der zweite Teil der Formel, also es macht doch erstens keinen Sinn, sin und cos der gleichen Rotationsachsen miteinader zu addieren und ausserdem hat doch der Pitch keinen Einfluss auf die x Koordinaten einer der drei Vektoren ???

    Ach ja, das mit dem Ausprobieren ist nicht so mein Fall ! Ich bin der Typ der eine Formel aufstellt, wenn sie nicht funktioniert, dann überlege ich mir das ganze noch einmal ganz genau, wo mir möglicherweise ein Fehler unterlaufen sein könnte und dann ändere ich die Formel entsprechend und versuche es noch einmal, selbst wenn das ganze Tage oder Wochen dauern sollte ! Denn wenn ich einfach Werte ausprobiere dann ist es doch meisstens so, dass man am Ende, wenn es durch puren Zufall plötzlich klappt, man die falsche Assoziationen gemacht hat ?!



  • ich würde es gar nicht über solchen dummen winkel machen
    die bringen dir nur ärger
    machs über drei vektoren die du dir stets speicherst und dann mit matrizen transformierst



  • Hi,

    die Formel ist einfach nur die Matrizenberechnung, allerdings zu Fuss (allgemein) berechnet, so dass man nur noch die Winkel in die Formeln einsetzen muss, und sich die Matrizenrechnung in jedem Frame spart.

    Die Erklärungen dieser Berechnungen findest Du übrigens direkt nach dem Quellcode hier:
    http://www.zfx.info/Tutorials.php?action=Tutorial&ID=9

    Ciao,
    Stefan


Anmelden zum Antworten