winz ?



  • Servus,

    Das leidige Thema Abbildung der Cursorposition auf einen Vektor im R3
    ist ja bisher im Forum schon recht häufig aufgetaucht.
    Ebenso dürfte mittlerweilen so ziemlich jedem die folgende Routine bekannt sein:

    int gluUnProject(GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble
    modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz)

    Leider hab ich aber bisher im Forum und im weiten weiten Netz lediglich hundertfache Kopien der OpenGLReferenz zu dieser Funktion gefunden, in der leider kein Wort darüber verloren wird, welche Bedeutung eigentlich 'winz' hat!?

    Ich für meinen Teil bin bisher immer so vorgegangen, dass ich das Fenster als
    Ebene im R3 beschrieben habe:
    Fensterebene(x,y) = a + x*w + y*h

    wobei gilt:
    a : Aufvektor der Ebene
    (kriegt man über den Positionsvektor der Camera raus)
    w : normalisierter Breitenvektor der Fensterebene
    h : normalisierter Höhenvektor der Ebene

    Damit hab ich die Möglichkeit über x und y jederzeit einen beliebigen Vektor
    auf der Fensterebene zu ermitteln.

    --> mit dem Provisorium hab ich mir bisher über die Runden geholfen, wenn ich
    z.B. selektierte Objekt im R3 mit der Mouse verschieben wollte. Die Vorgehensweise wird natürlich bei perspektivischer Projektion viel komplizierter! Das ist auch der Grund, weshalb ich versuche, mit glUnProject() den Arbeitsaufwand etwas zu reduzieren.

    Doch wie ich bereits erwähnt habe, habe ich nichts dazu gefunden, welche Bedeutung denn eigentlich der Parameter 'winz' hat.

    Wäre schön, wenn mir jemand bei diesem schon etwas angestaubten Thema weiterhelfen könnte! 😉

    Danke,
    TS++



  • Das ist scheinbar die z Komponente des Vektors "win".



  • Aahahahahahahaha!!!!!!

    Ein kleiner Witzbold!
    Wusste gar nicht, dass Fensterkoordinaten im R3 liegen.

    "Vielen Dank für den Hinweis!" :o


  • Mod

    so blöd es auch ist, z muss man sich "ausdenken", je nachdem wie "tief" der punkt sein soll, den du vor der kamera sehen kannst (also die entfernung zum eyepoint).

    das du auf dem screen keine 3d coordinaten hast ist klar, aber bei einer projektion wird alles auf eine ebene (GL_PROJECTION macht das) geklatscht. für diese operation gibt es keine inverse, weil man dabei den z-wert verliert eigentlich. und wenn du nun vom screen wieder ein deinen model-space möchtest, dann mußte opengl sagen wie weit der punkt vom screen entfernt ist, kannst natürlich als notlösung rand() angeben.

    wenn ich richtig verstanden habe, machst du einen editor, wenn ich mal einen tip geben darf. die editoren heutzutage haben bei dem selektiertem object des öfteren ein halbtransparentes koordinatenkreuz, und wenn man da auf eine der achsen klickt, dann verschiebt man das object in dieser achse. das lässt sich einfach realisieren, du kannst dann die entfernung der ebene auf der das object verschoben wird nehmen um die entfernung zur kamera zu berechnen für den z-wert.
    einfacher wäre vielleicht, wenn du den selben punkt nehmen würdest und 2mal mit verschiedenen werte unproject aufrufst, dann aus diesen 2punkten eine gerade machst, mit der berechnest du den schnittpunkt dann mit der ebene in der das object bewegt werden soll und bewegst es dann zum schnittpunkt...

    ist aber nur ein vorschlag 😉

    und ganz sicher bin ich mir mit winz net.

    rapso->greets();



  • Vielen Dank, rapso!

    Endlich mal jemand, der auch vernünftige Antworten liefert!
    Mit deinem Denkanstoss hast du mir sehr geholfen!

    Grüße,
    TS++



  • Original erstellt von <TS++>:
    **Vielen Dank, rapso!

    Endlich mal jemand, der auch vernünftige Antworten liefert!
    Mit deinem Denkanstoss hast du mir sehr geholfen!

    Grüße,
    TS++**

    Naaaaa... TGGC's Antwort hörte sich mal (ausnahmsweise *g*) nicht so an, als daß er Dich verscheissern wollte...
    Ich denke mal er hat nicht die dolle Ahnung von OpenGL. Aber hätte ja sein können, daß Du'n n00b bist und Dir es schon geholfen hätte, wenn Du weißt, daß winx, winy und winz einen Vektor formieren. 😃

    Nich' daß ich irgendwen verteidigen wollte oder so... 🕶 😉



  • Is scho recht!


Anmelden zum Antworten