Frage zu Koordinaten



  • Hallo,

    wenn man Weltkoordinaten zu Kamerakoordinaten transformiert, dann macht man das ja über eine Rotation und eine Translation.

    Jetzt mal meine Frage. Wo ist eigentlich der Ursprung des Weltkoordinatensystems. Der Ursprung des Kamerakoordinatensystems ist ja praktisch die Mitte der Optik.

    Und was mir absolut unklar ist. Sagen wir man hat einen Punkt den die Kamera überhaupt nicht sieht weil er z.B. total recht ist. Wenn ich jetzt die Rotation und die Translation durchführe dann würde die Kamera den Punkt auf einmal sehen obwohl sie ihn ursprünglich nicht gesehen hat. Verfälscht man dadurch nicht irgendwas ???



  • Chopper schrieb:

    Jetzt mal meine Frage. Wo ist eigentlich der Ursprung des Weltkoordinatensystems.

    Der befindet sich beim Nullvektor 0\mathbf 0 in Weltkoordinaten, bzw. bei TWeltZuKamera0\mathbf T_{WeltZuKamera} \cdot \mathbf 0 in Kamerakoordinaten
    (dabei bezeichnet TWeltZuKameraT_{WeltZuKamera} die Transformation, mit der du Weltkoodinaten zu Kamerakoordinaten transformierst, und "\cdot" das Matrix-Vektor-Produkt).

    Chopper schrieb:

    Und was mir absolut unklar ist. Sagen wir man hat einen Punkt den die Kamera überhaupt nicht sieht weil er z.B. total recht ist. Wenn ich jetzt die Rotation und die Translation durchführe dann würde die Kamera den Punkt auf einmal sehen obwohl sie ihn ursprünglich nicht gesehen hat. Verfälscht man dadurch nicht irgendwas ???

    Leider ist in diesem Fall mir völlig unklar, was du damit meinst (was ist "total recht"?). Bitte umformulieren, oder auf jemanden warten, der versteht, was du damit meinst.

    Gruss,
    Finnegan



  • Lol.

    Die Kamera ist an einem bestimmten Ort. Und im 70 Grad Winkel zu ihr befindet sich ein Objekt. Wahrscheinlich wird die Kamera die frontal nach vorne gerichtet ist das Objekt nicht sehen.

    So und jetzt machen wir ja eine Transformation von Welt zu Kamerakoordinaten.
    Führt das dazu dass die Kamera das Objekt jetzt sieht ?



  • Mal ganz krass gesagt.

    Der Ursprung des Weltkoordinatensystems befindet sich doch nach der Transformation im Ursprung des Kamerakoordinatensystems. Oder hab ich total nen Denkfehler ?



  • Müsste man nicht einfach die Entfernung des Punktes vom Ursprung des Kamerakoordinatensystems berechnen und das dann als neue Koordinaten verwenden.
    Warum überhaupt diese Transformation des Koordinatensystems.

    Irgendwo hab ich nen Denkfehler drin.



  • Chopper schrieb:

    Lol.

    Die Kamera ist an einem bestimmten Ort. Und im 70 Grad Winkel zu ihr befindet sich ein Objekt. Wahrscheinlich wird die Kamera die frontal nach vorne gerichtet ist das Objekt nicht sehen.
    So und jetzt machen wir ja eine Transformation von Welt zu Kamerakoordinaten.
    Führt das dazu dass die Kamera das Objekt jetzt sieht ?

    Solche Konzepte wie "nach vorne gerichtet" und "sehen können" erhalten erst durch die Kamera-Transformation ihre Bedeutung.
    Insofern tue ich mich immer noch etwss schwer mit der Frage.

    Eine Transformation in ein anderes Koordinatensystem bedeutet nicht, dass ein Objekt seine absolute (Welt-) Position verändert,
    sondern ledglich dass die selben Koordinaten in eine andere Repräsentation überführt werden.

    Ziel beim Rendering ist es, die Welt auf die Bildebene der der Kamera zu projizieren.
    Die Mitte der Bildebene (oder bei dem was du auf dem Bildschirm siehst "die Mitte des Bildschirms") ist dabei der Ursprung des Kamera-Koordinatensystems.
    Um die Welt aus Sicht der Kamera auf den Bilschirm zu bringen, muss man erstmal wissen, wo sich die Welt-Objekte relativ zum Kamera-Ursprung befinden
    (oder anders - Projektions-Transformation mal außer Acht gelassen - wo sie auf dem Bilschirm gezeichnet werden müssen).
    Das wird mit der Kamera-Transformation gemacht.



  • Chopper schrieb:

    Mal ganz krass gesagt.

    Der Ursprung des Weltkoordinatensystems befindet sich doch nach der Transformation im Ursprung des Kamerakoordinatensystems. Oder hab ich total nen Denkfehler ?

    Nein. Nur dann, wenn Das Kamera-Koordinatensystem gleich dem Welt-Koordinatensystem ist (also wenn sich die Kamera im Welt-Nullpunkt befindet und keine Rotation hat).
    Ansonsten ist die Position des Welt-Ursprungs nach der Transformation der Punkt den man erhält wenn man den Welt-ursprung (den Nullvektor) mit der Kamera-Transformation transformiert.



  • Chopper schrieb:

    Warum überhaupt diese Transformation des Koordinatensystems.

    Siehe oben: Grob gesagt, man macht diese Transformation um herauszufinden, wo man auf dem "Bildschirm" (bei welchen "Pixelkoordinaten") die Objekte zeichnen muss.



  • Ein Verständnisproblem hab ich noch.

    Sagen wir mal der Objektpunkt ist vom Kameraursprung 10 Einheiten in X Richtung und 5 Einheiten in Y Richtung entfernt und wir haben das händlisch ausgemessen . Dann sind doch seine neuen Koordinaten einfach P1(10,5) .

    Wenn wir jetzt die Matrixmultiplikation machen dann müssten wir doch genau auf das gleiche Ergebnis kommen oder.



  • Chopper schrieb:

    Ein Verständnisproblem hab ich noch.

    Sagen wir mal der Objektpunkt ist vom Kameraursprung 10 Einheiten in X Richtung und 5 Einheiten in Y Richtung entfernt und wir haben das händlisch ausgemessen . Dann sind doch seine neuen Koordinaten einfach P1(10,5) .

    Wenn wir jetzt die Matrixmultiplikation machen dann müssten wir doch genau auf das gleiche Ergebnis kommen oder.

    Ja.

    Nehmen wir der Einfacheit halber an, dass wir es bei allen Transformationen ausschließlich mit Translationen (also "Verschiebungen") zu tun haben:
    Die Kamera befindet sich an Position (35)\begin{pmatrix}3\\5\end{pmatrix} (Weltkoordinaten) und das Objekt wie du sagst 10 Einheiten in X- und 5 Einheiten in Y-Richtung von der Kamera aus gesehen, also an (1310)\begin{pmatrix}13\\10\end{pmatrix} (Weltkoordinaten).

    Ich bezeichne nun die Position/Ausrichtung der Kamera in der Welt als Kamera-Transformation TKamera\mathbf{T}_{Kamera} (Achtung: Änderung der bisherigen Begrifflichkeiten).
    Das ist in unserem Fall der Translationsvektor TKamera=(35)\mathbf{T}_{Kamera}=\begin{pmatrix}3\\5\end{pmatrix} (kann man auch als Transformationsmatrix schreiben, aber so ist es übersichtlicher).
    Die Kamera-Transformation beschreibt also eine Verschiebung um (35)\begin{pmatrix}3\\5\end{pmatrix} und sagt in diesem Fall nichts anderes aus, als dass sich die Kamera in der "Welt" an Position (35)\begin{pmatrix}3\\5\end{pmatrix} befindet :D.

    Die "Welt-Zu-Kamera-Transformation" ist nun die "Inverse" der Kamera-Transformation.
    Das ist in unserem Fall einfach eine Verschiebung in die entgegengesetzte Richtung: TWeltZuKamera=(35)\mathbf{T}_{WeltZuKamera}=\begin{pmatrix}-3\\-5\end{pmatrix}

    Wenn ich diese auf einen Punkt in Welt-Koordinaten anwende, dann erhalte ich den Punkt in Kamera-Koordinaten.
    Also z.B. bei unserem Objekt, das sich an (1310)\begin{pmatrix}13\\10\end{pmatrix} befindet:

    PObjektInKameraKoordinaten=PObjektInWeltKoordinaten+TWeltZuKamera=(1310)+(35)=(105)\mathbf{P}_{ObjektInKameraKoordinaten} = \mathbf{P}_{ObjektInWeltKoordinaten} + \mathbf{T}_{WeltZuKamera} = \begin{pmatrix}13\\10\end{pmatrix} + \begin{pmatrix}-3\\-5\end{pmatrix} = \begin{pmatrix}10\\5\end{pmatrix} (Kamerakoordinaten)

    Also genau wie du vermutet hast.
    Ich habe das jetzt so umständlich beschrieben, weil die Vorgehensweise für eine beliebige Kamera-Transformation TKamera\mathbf{T}_{Kamera}, die als Transformationsmatrix vorliegt, genau dieselbe ist.
    Die Welt-Zu-Kamera-Transformation ist dann nämlich ebenfalls die "Inverse" der Kamera-Transformation (in diesem Fall die inverse Matrix):

    TWeltZuKamera=TKamera1\mathbf{T}_{WeltZuKamera} = \mathbf{T}_{Kamera}^{-1}
    PObjektInKameraKoordinaten=TWeltZuKameraPObjektInWeltKoordinaten=TKamera1PObjektInWeltKoordinaten\mathbf{P}_{ObjektInKameraKoordinaten} = \mathbf{T}_{WeltZuKamera} \cdot \mathbf{P}_{ObjektInWeltKoordinaten} = \mathbf{T}_{Kamera}^{-1} \cdot \mathbf{P}_{ObjektInWeltKoordinaten}

    P.S.: Ich bezeichne die Position und Ausrichtung eines gedachten "Kamera-Objekts" in der Welt als Kamera-Transformation weil ich es so als intuitiver empfinde.
    So kann ich mir die Kamera wie eine tatsächliche physische Kamera vorstellen, die ich in der Hand halte. Die Position meiner Hand sowie die Richtung,
    in die ich die Kamera ausrichte, werden dann durch die Kamera-Transformation beschrieben. Ich erwähne das, weil es sicherlich auch Literatur gibt,
    die das was ich als Welt-Zu-Kamera-Transformation bezeichne "Kamera-Transformation" nennt... nur damit hier keine Verwirrung aufkommt 😃



  • Letztendlich ist doch die Translation die Differenz von Ursprung Kamerakoordinatensystem zu Ursprung Weltkoordinatensystem



  • Ich dachte ja eigentlich immer bei den intrinsischen Parametern ist die Verzerrung dabei aber das ist ja scheinbar nicht so .



  • Wieso sollte man denn jemals die Rücktransformation von Bild zu Weltkoordinaten brauchen ? Was intressiert mich das wo das Objekt bezogen auf die Kamera positioniert war ?



  • Emu schrieb:

    Wieso sollte man denn jemals die Rücktransformation von Bild zu Weltkoordinaten brauchen ? Was intressiert mich das wo das Objekt bezogen auf die Kamera positioniert war ?

    Z.B. weil man dem User gerne die Möglichkeit geben würde, Objekte mit der Maus anzuklicken? 😉



  • Versteh ich nicht. Was hat das jetzt mit Weltkoordinaten zu tun .



  • ??????????????



  • emuh schrieb:

    ??????????????

    1. Wie hast du deine Weltobjekte vorliegen? In Welt- oder etwa tatsächlich in Bilschirmkoordinaten die mit jedem Frame aktualisiert werden?
    2. Du "klickst" auf Bildschirmkoordinaten. Wie findest du raus, auf welches Objekt geklickt wurde, wenn deine Objekte Weltkoordinaten haben?



  • Emu schrieb:

    Wieso sollte man denn jemals die Rücktransformation von Bild zu Weltkoordinaten brauchen ? Was intressiert mich das wo das Objekt bezogen auf die Kamera positioniert war ?

    World-Space ist bezogen auf den Ursprung der Welt.
    "Bezogen auf die Kamera" wäre Camera-Space.

    Und was Hit-Tests (Ray-Casting) angeht: ich kenne das eigentlich nur so dass man den Ray im Screen-Space "aufbaut" und dann erstmal in den World-Space zurücktransformiert. Und dann für jede Instanz einer Geometrie in den entsprechenden Object-Space. Und im Object-Space kann man dann endlich prüfen ob der Ray die Geometrie (bzw. das Bounding-Volume) schneidet.

    Wobei der Schnittest mit Bounding-Volumes wie AABBs oder Kugeln meist nochmal damit beginnt den Ray in einen Raum zu transformieren in dem das Bounding-Volume "normalisiert" ist. Also halt Einheitskugel oder "Einheits-AABB".


Log in to reply