Refraction



  • Hallo,
    für meine 2D-Engine hätte ich gerne Refracton ( Lichtbrechung ). Dieses Bild zeigt ganz gut, was ich meine:

    http://www.mathika.dk/gray/glassandwater.jpg
    Der Hase verändert den Hintergrund, sodass der Eindruck von Glas entsteht.

    Das ganze soll aber statt einem 3D-Modell ein einfaches Quad sein.
    Nur fehlt mir irgendwie der Ansatz, denn ich muss ja wissen, was "hinter" dem Bild ist und ich weiss nicht, wie ich an diese Pixel rankomme.

    PS: Vielleicht ist die Lösung ja ganz einfach, aber ich bin noch nicht so gut, was Shader angeht.

    Wenn jemand eine Lösung kennt oder mir einen Denkanstoss geben könnte, wäre das echt super.



  • Ich weiss nicht wie der "kanonische Weg" ist das zu machen, aber ich schätze man könnte das "dahinter" in eine Textur rendern, und auf diese dann im Shader zugreifen, nicht?

    Also wenn das lauter Billboards ("2D Sprites") sind die du renderst, von hinten nach vorne sortiert, dann vielleicht ca. so:

    texture tex1
    texture tex2
    clear tex1
    rendertarget = tex1
    for all sprites, back to front:
        if (sprite is glass sprite):
            copy tex1 to tex2
            select tex2 as source for shader
            render sprite with glass shader to tex1
        else
            select xyz as source for shader
            render sprite with normal shader to tex1
        endif
    endfor
    copy tex1 to screen
    

Anmelden zum Antworten