Raytracer - Problem mit Perspektivischer Projektion - Bild verzerrt



  • Hallo,

    ich habe in meinen Raytracer ein perspektivisches Kameramodell eingebaut. Leider ist das Ergebnisbild verzerrt (ähnlich Fisheye Projektion).

    Ich habe mal das Ergebnis hochgeladen (http://www.tim-bleck.de/temp/test.jpg).

    Die Szene beinhaltet nur 3 Kugeln und der Raytracer arbeitet erstmal nach dem Raycasting Prinzip, da ich ihn Schritt für Schritt umsetzen und erweitern will.

    Für das Kameramodell habe ich folgende Angaben (Vektoren):

    P = Kameraposition
    N = Kamerarichtung (Vektor lookat - Vektor Kameraposition, normalisiert)

    UP = Vector(0,1,0)

    Ich berechne nun die Vektoren der Bildfläche.

    V = UP - N*(UP*N)
    V normalisieren

    U = V x N
    U normalisieren

    Das Bildverhältnis ist erstmal 1:1, d.h. genauso hoch wie breit. Den Abstand zw. Bildfläche und Kameraposition habe ich auch erstmal fest gewählt (Öffnungswinkel ist 45 Grad). Dementsprechend muss ich V und U noch mit dem Abstand multiplizieren um die Vektoren auf die richtige Länge zu bringen.

    Den Mittelpunkt der Bildfläche bestimme ich mit

    M = P + N * Abstand

    Nun kann ich anhand der x, y Angabe der Bildfläche den "echten" Punkt auf der Bildfläche berechnen.

    Dazu bringe ich x und y erstmal in die richtige Form (zwischen 0 und 1):

    x = x/bildbreite
    y = y/bildhöhe

    Den Punkt berechne ich nun mit:
    PV = M + U*(2.0*x - 1.0) + V*(1.0 - 2.0*y)

    Anhand von Kameraposition und dem errechneten Punkt kann ich nun einen Strahl bestimmen P + t*(PV-P) und in die Szene schicken und auf Schnittpunkte testen.

    Anscheinend habe ich aber irgendwo einen Fehler gemacht, denn die Kugeln müssten ja egal aus welcher Position betrachtet immer rund sein.

    Meine Quelle:
    http://graphics.stanford.edu/courses/cs348b-98/gg/viewgeom.html

    Vielleicht hat jemand nen Hinweis für mich wo ich ansetzen kann.

    Gruß, Tim



  • Hallo,

    ich habe leider übersehen, dass bei der Perspektivischen Projektion zwangsläufig Verzerrungen entstehen. Das von mir beschriebene Kameramodell ist auf jeden Fall korrekt. Je nachdem wie stark nun die Projektion gewählt wird, fallen auch die Verzerrungen auf.

    Gruß, Tim



  • diese verzerrungen sind abhängig vom Öffnungswinkel des Sichtkegels (bzw. hier sichtpyramide). bei Winkeln größer 45° tritt ein effekt ähnlich dem fisheye, wähle kleinere Winkel und es sieht besser aus.

    [edit]ah, warte, ich seh grad, das ist schwachsinn... lalala 🙄[/edit]


Anmelden zum Antworten