Umrechnung weltkoordinaten -> screenkoordinaten NEED HELP PLS



  • Hallo Community,

    undzwar habe ich eine kleine aber dennoch wichtige Frage an euch.
    Ich habe vor einiger Zeit mal einen Beitrag gelesen in dem jemanden gesagt wurde er solle sich nach der Umrechnung weltkoordinaten -> screenkoordinaten im Internet umsehen.
    Da ich nun auch auf der Suche nach dieser Umrechnung bin bzw nach einer geeigneten Formel, und ich aber überhaupt nichts zu dem Thema finde, wollte ich einfach mal fragen, ob mir vielleicht Jemand einen Tipp oder sogar die richtige Formel nennen kann, da ich hier allmählich verzweifel 😞 .

    Als kleine Hintergrundinformation, ich arbeite an einem Programm, dass Koordinaten über eine TCP verbindung erhält und diese dann auf eine Grafik zeichnen soll, und dafür brauche ich umbedingt die Umrechnungsformel 😕

    Ich hoffe, das mir da Jemand weiterhelfen kann 🙂 .
    Vielen Dank schon mal im vorfeld.

    MfG Bobby21



  • lolololo



  • ololo schrieb:

    lolololo

    ich bitte um ernst gemeinte Antworten 😕



  • Wenn du eine API wie Direct3D oder OpenGL nimmst, machen die das für dich, ohne dass du es merkst. Sonst multiplizierst du eben einen XYZW-Vektor mit einer 4x4-Matrix. Hier siehst du, wie so eine Matrix aussehen könnte.

    MfG, EOutOfResources



  • Mit was für einem Kameramodell denn? Lochkamera-basiert?

    Das läuft typischerweise so ab:

    1. 3D Weltkoordinaten -> 3D Kamerakoordinaten per "rigid body transform". Bei einer Lochkamera entspricht der Ursprung des Kamerakoordinatensystems dem Projektionszentrum. Die Z-Achse gibt dabei die Orientierung der Blickrichtung an. Die 3D-Kamerakoordinate kann man auch als "normalisierte Kamerakoordinate" bezeichnen und als 2D Punkt mit homogenen Koordinaten interpretieren.

    2. Verrechnung der intrinsischen Parameter (Brennweite, Hauptpunkt etc). Die 3D "normalisierte Kamerakoordinate" wird dazu als homogene 2D Koordinate interpretiert und dann per Matrix-Vektor-Produkt (Skalierung, Drehung, Sherung, aber auch Verschiebung) in die "screen-Koordinate" umgerechnet. Die Matrix nennt man meist K, Kameramatrix:

    Also

    |screen_x|
    q * |screen_y| = K * (R w + t)
        |   1    |
    

    wobei q irgendein uninteressanter Skaliserungsfaktor, w die 3D-Weltkoordinate eines Punktes (dessen screen-Koord wir berechnen), R eine 3x3 Rotationsmatrix ist, t ein 3D Verschiebungsvektor ist. R und t zusammenbeschreiben die Starrkörpertransformation (rigid body transform), mit der Weltkoordinaten und Kamerakoordinaten in Verbindung gebracht werden. R und t zusammen nennt man auch "extrinsische Kameraparameter". Die Kameramatrix sieht typischerweise so aus:

    | f f*s   u_0 |
    K = | 0 f*par v_0 |
        | 0   0    1  |
    
    mit
    
    f:   Brennweite in Pixel
    s:   Sherungsfaktor (typischerweise nahe 0)
    par: Pixel-Aspect-Ratio (typischerweise nahe 1)
    u_0: screen_x-Koordinate des Hauptpunktes
    v_0: screen_y-Koordinate des Hauptpunktes
    

    und werden unter dem Begriff "intrinsische Kameraparameter" zusammengefasst. Den Hauptpunkt setzt man bei "virtuellen Kameras" typischerweise in die Bildmitte. Das ist quasi der Fluchtpunkt der Blickrichtung.


Anmelden zum Antworten