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