opengl modelviewmatrix invertierung



  • hi!
    ich möchte den punkt auf einer ebene rausfinden, auf den geklickt wurde..
    lass aber die kamera immer im auf dem ursprung und drehe/verschiebe nur die
    modelview-matrix.. und damit die ganze szene..
    den vektor von der kamera in richtung des punktes hab ich schon (mit gluUnProject())
    müsste jetzt also die modelview-matrix invertieren und diesen vektor mit der inversen
    multiplizieren.. nech?!
    gibts dafür ne tolle funktion, so wie gluUnProject()? (gluUnModelView() oder so *g*)

    wenn nicht und ich sowas selber schreiben muss, kann ich einfach die ganze 4x4 matrix
    invertieren oder muss ich die aufteilen in eine 3x3 matrix (die invertiert wird) und den
    verschiebungs-vektor (der mit (-1) multipliziert wird)?



  • wenn ich dich richtig verstanden habe, dann moechtest du einen punkt anwaehlen und diesen dann beliebig im raum verschieben ..., oder?



  • also, eigentlich möchte ich objekte im raum verschieben, jap.
    und da hab ich mir gedacht, ich leg fest, dass man ein objekt (erstmal) nur in der
    x-z-ebene (oder y-z-ebene, hauptsache: ebene) verscheiben kann..
    wie auch sonst..
    wenn ich den mauszeiger auf meinem 2d-schirm bewege, ist's ja nicht
    eindeutig, wohin ich ein objekt in 3d ziehe.. wenn der neue ort aber in einer
    ebene mit dem alten liegt, ist das kein problem..
    ebene sowie den richtungsvektor der graden (vom mauszeiger in richtung neuen punkt) hab ich.. muss also nur noch den schnittpunkt ausrechen..

    aber:
    die ebene liegt quasi im "modelspace" und der vektor im "worldspace"..
    wobei die modelviewmatrix die abbildung von "model-" in "worldspace" ist..
    letztendlich brauch ich die koordinaten im "modelspace"..
    also müsste ich jetzt den richtungsvektor durch die inverse der modelviewmatrix
    schicken und dann einfach den schnittpunkt berechnen und wär fertig..

    is eigentlich eh alles egal.. 🙄

    meine frage:
    gibt es eine (GLU?) funktion, die das macht? also, quasi das, was durch die
    modelviewmatrix passiert, wieder rückgängig macht..
    wenn nicht: kann ich diese (opengl's modelview-) matrix wie sie ist als 4x4 matrix
    invertieren, um die umkehrabbildung zu erhalten? (kann ich nämlich irgendwie
    nicht so ganz glauben)
    oder muss ich das wie oben beschrieben machen? oder ganz anders?



  • mh..
    wie ich jetzt gelesen hab, liefert gluUnProject() mir ja genau die koordinaten die ich brauche..
    aber der vektor, den ich von der funktion bekomme ist nur mit "nan"s gefüllt..
    ausser wenn mein mauszeiger ein kleines bisschen ausserhalb des fensters ist..
    (aber nur ein kleines bisschen)
    dann stehen da wenigstens vernünftige zahlen drin, aber die richtigen können das
    dann ja nicht sein..;)

    so ruf ich gluUnProject auf:

    gluUnProject(imX, viewport[3]-imY, 0, (GLdouble*)modelview, (GLdouble*)projection, (GLint*)viewport, &x1, &y1, &z1);
        gluUnProject(imX, viewport[3]-imY, 1, (GLdouble*)modelview, (GLdouble*)projection, (GLint*)viewport, &x2, &y2, &z2);
    

    das mit dem viewport[3]-Y hab ich mal ausprobiert, hat aber nix gebracht..
    bin mir eigentlich recht sicher, dass die parameter in ordnung sind..(naja.. irgendeiner muss ja falsch sein..)
    weiss da einer was?



  • Auf jedenfall geht das über invertieren über Kofaktoren. Ich beisse mich gerade auch durch das Thema. Viel Spass damit 😃

    Infos dazu->

    Suchen: Kramersche Regel

    Lesen: Intel Developer Service 1999.


Anmelden zum Antworten