OpenGL: Kamera als Matrix (Rotation, Translation)?



  • Ich versuche den Kameraview nur durch Matrixmanipulation zu erzeugen:

    Ich verwende eine 4x4 Matrix (z.B.: Translation und Rotation um X):

    tMatrix4x4 TransView(1.0f,0.0f ,0.0f ,-tx,
    0.0f,cos(rX - PI / 2),-sin(rX - PI / 2),-ty
    0.0f,sin(rX - PI / 2), cos(rX - PI / 2),-tz,
    0.0f,0.0f ,0.0f ,1.0f);

    Wenn ich nun die Matrix lade...

    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glMatrixMode( GL_MODELVIEW );
    glLoadMatrixd(TransView);

    ...funktioniert die Translation einwandfrei jedoch passt die Rotation nicht.
    Es wird immer zuerst um den Punkt 0,0,0 / x-Achse rotiert und dann erst transformiert. Dadurch entsteht eine Art Schiefeebene auf der ich mich bewege.

    Auch wenn die Matrix splitte, also...

    TransView = Translation; RotXView 0 Rotation X

    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glMatrixMode( GL_MODELVIEW );
    glLoadMatrixd(TransView);
    glMultMatrixd(RotXView);

    ... kommt das gleiche Resultat heraus.

    Bitte um Hilfe, wie es Richtig gehört

    mfg mk



  • Die Reihenfolge, in der du die einzelnen Matrizen anwendest spielt eine Rolle! Bei dir ist die anscheinen falsch 🙄



  • Danke, hab jetzt die Matrizen geändert. Mit...

    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode( GL_PROJECTION );
    glLoadMatrixd(TransView);
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    ...funktioniert der View schon, jedoch ensteht ein neuer "Anzeigefehler"

    Es wird nur mehr ein Teil der "Welt" gezeigt und dieser um den Winkel der X-Rotation abgeschnitten

    siehe -> [url] http://www.visyte.com/TestShell.exe [/url]

    Tastenbelegung: Vor, Zurück, Rechts, Links -> Pfeiltasten
    Rauf, Runter -> +,-

    Kann man dies über glFrustum einstellen? Ich habs zwar probiert, aber es hat keinen Effekt oder alles ist weg.

    mfg mk


Anmelden zum Antworten