Ich entwickle ein 2D-Spiel in SDL 2.0 und habe Probleme mit meinem Beleuchtungssystem. Ich möchte den Bildschirm mit Nebel füllen und einen transparenten Kreis um den Player erstellen (unten links). Ich weiß, wie man mit SDL_BLENDMODE_MOD (unten rechts) einen dunklen Raum mit einem getönten Licht macht, aber ich kann den Nebel nicht machen. Ich habe versucht, mehrere Texturen über den Bildschirm mit jeder Kombination von SDL_SetRenderDrawBlendMode() und SDL_SetTextureBlendMode() zu überlagern, die ich mir vorstellen kann.SDL2 - Zeichne einen vollständig transparenten Kreis auf einer Textur
Ich habe gesucht und gefunden Lösungen auf Stackoverflow wie this, aber sie verwenden SDL Oberflächen und vorgefertigte Lichtbilder. Ich werde die Form und Größe meines Eingabebildes (oben rechts) dynamisch ändern, also brauche ich etwas flexibleres.
Lösung 1: Anstelle eines weißen Kreises und schwarzen Hintergrunds verwende ich einen schwarzen Kreis und einen Marine-Hintergrund. Ich mische das dann unter Verwendung screen blending und bekomme meinen Nebel (ich habe dies in einem Bildeditor getestet, um das Bild unten links zu bekommen). Leider hat SDL kein SDL_BLENDEMODE_SCREEN.
Lösung 2: Erstellen Sie eine halbtransparente Nebelschicht und stanzen Sie ein vollständig transparentes Loch darin. Leider weiß ich nicht, wie man eine Textur mit einem transparenten Loch überschreibt. Ich habe versucht, meine drawing mode auf SDL_BLENDEMODE_NONE zu setzen und einen vollständig transparenten Kreis zu zeichnen, aber es erzeugt nur vollständig undurchsichtige Kreise. Die Dokumentation sagt, ich kann das Ziel Alpha ersetzen, aber das scheint nicht zu funktionieren ...
Wie speichere ich ein Bild im Alpha-Wert einer Textur?Ich weiß, wie RenderCopy() eine Textur über eine andere, aber ich weiß nicht, wie Sie auf den Alpha-Kanal einer Textur zugreifen. – DragonDePlatino