Render to Texture
← Environment Mapping in OpenGL | ● | Renderbuffer Objekte →
Für viele Algorithmen und Verfahren muss man die bereits gezeichnete Szene verändern. Dazu rendert man nicht direkt in den Framebuffer, sondern in eine Textur.
Diese Textur kann man anschließend wieder verwenden, damit diese auf ein Objekt (z.B. Spiegel) gelegt wird.
Post-Processing-Verfahren funktionieren genauso - erst wird die Szene in eine Textur gezeichnet, danach bei der Darstellung auf den Bildschirm verfremdet. Dazu zeichnet mam ein großes Quad das den ganzen Bildschirm bedeckt, damit der Shader das Bild aus der Textur verändert darstellen kann.
Genereller Aufbau
Initialisierung:
- Man erstellt eine Textur
- Man erstellt eine Framebuffer-Konfiguration, bei der die Textur die Farbe der gerenderten Fragmente speichert
In der Rendering-Loop:
- Man aktiviert die selbst erstellte Framebuffer-Konfiguration
- Man zeichnet die Szene, die in der Textur landen soll
- Man aktiviert die Standard-Framebuffer-Konfiguration
- Man zeichnet die Szene die am Bildschirm erscheinen soll, nutzt dabei die Textur
Dadurch, dass 2 komplett unterschiedliche Sachen (z.B. einmal mit, einmal ohne Textur) gezeichnet werden sollen, braucht man eigentlich unterschiedliche Shader.
Das Wechseln eines Shaders ist relativ teuer, deshalb nutzt man oft Shader, die abhängig von einem Parameter etwas anderes machen, sogenannte Uber-Shader.
← Environment Mapping in OpenGL | ● | Renderbuffer Objekte →