Komischer Fehler bei raytracer spiegelung



  • Weis zwar nicht, ob das hier das richtige Forum ist, weil hier hauptsächlich über DX und OGL diskutiert wird, aber woanders passts nicht besser rein.

    Also, ich schreib als teil eines kleinen info vortrags einen einfachen raytracer an dem ich die grund techniken darstellen kann. Bisher sind eine einfache lichtberechnung auf den Objekten, schatten und Spiegelungen implementiert. Das Ganze sieht so aus:
    Die Szene

    Nun hab ich vor knapp 4-5 Tagen ein wenig mit den Objekten und der Kamera rumgespielt, und bin dabei auf folgendes phänomen gestoßen:
    Der Fehler
    Wie man sieht, ist auf der hinteren dunkleren Kugel die Spiegelung nicht vollständig, und man sieht stattdessen die gespiegelte Ebene.
    Um diesen Fehler darzustellen musste ich die ganze Szene nur um 3 nach hinten verschieben(also die beiden Kugeln und die Kamera. Lichter hab ich jetzt nicht verschoben, aber haben damit nichts zu tun. Im ersten Bild hatten die Kugeln eine z koordinate von 5 und 2, im zweiten bild von 8 und 5).

    Scheinbar tritt der Fehler nur abhängig von der Entfernung zum Ursprung auf, und er wird größer, je größer die Entfernung vom Ursprung wird.
    Irgendwelche Fehler an der Kamera kann ich inzwischen ausschließen(genauso wie lichter). Hier mal das erste Bild nochmal, nur dass diesmal die Kamera nach hinten versetzt ist.
    Das erste Bild aus größerer Distanz

    Ich hoffe mal, dass hier jemand zumindest einen Ansatzpunkt weis, welchen codeteil ich überprüfen muss. ich hab jetzt selber so ziemlich jede zeile die mir dafür wichtig erschien überprüft, und weis nicht mehr weiter. Ich kann jetzt auch nicht den kompletten code posten, da ich euch nicht mit so einer Menge belasten will(und großartig eingrenzen kann ich den fehler inzwischen auch nicht mehr, da für mich alles richtig aussieht), aber wenn jemand vermutungen zu bestimmten teilen hat, kann ich dafür die relevanten codeteile nachliefern.

    Danke schonmal an alle, die sich das anschauen 🙂



  • ließ einfach die x und y Koordinaten eines Bildpunktes ab, der falsch gerendert wird
    z. B. x = 332 und y = 631

    Schieß jetzt einfach nur einen Strahl durch diesen einzelnen Punkt und schau dir im Debugger an was falsch läuft



  • Offensichtlich wird der Schnitt Kugel/Strahl manchmal nicht erkannt. Also ich würde sagen, du machst da was falsch. Aber was, das kann ich von hier aus nicht erkennen. 😎

    Gruß, TGGC (\-/ has leading)


  • Mod

    ich wuerde drauf tippen dass du bei einer der primitiven die entfernungsberechnung falsch machst, eventuell fehlt irgendwo eine normalisierung damit es richtig ist 😉



  • so, hab den fehler gefunden.

    das nächste mal werde ich nachdenken, dann den debugger richtig(!) verwenden, und hier nichtmehr so doofe posts machen 😉

    Der Fehler befand sich natürlich auch in dem Teil, bei dem ich vorher alles 10fach geprüft hab.

    @rapso ne, alles war normalisiert, alles perfekt, nur hab ich dabei versagt als es darum ging, den nächsten schnittpunkt rauszusuchen. man sollte vielleicht auch mal die distanz der schnittpunkte relativ zum Punkt berechnen, von wo man die strahlen losschickt, und nicht nur vom Ursprung aus 🙄

    danke an alle, die mir geholfen haben 🙂

    jetzt muss ich mich nurnoch mit dem gefühl quälen, dass die reflektierten schatten irgendwie falsch aussehen...


Anmelden zum Antworten