Richtige Methode zum Skalieren einer SDL-Oberfläche ohne Clipping?

8

Was ist der richtige Weg, um eine SDL-Oberfläche zu skalieren? Ich fand eine Erklärung online, aber es musste die Oberfläche Pixel für Pixel neu gezeichnet werden. Es scheint so, als würde es eine Möglichkeit geben, dies nativ über SDL zu tun, anstatt das Bild so neu zu zeichnen. Ich konnte nichts in der SDL-Dokumentation finden, die dies abdeckt. Ich kann Oberflächen problemlos ändern, indem ich die Oberflächenbreite und -höhe verändere, aber die resultierende Oberfläche wird abgeschnitten.

    
jamesmillerio 30.11.2008, 05:43
quelle

3 Antworten

7

SDL unterstützt skaliertes Blitting nicht. Laut der Dokumentation von SDL_BlitSurface :

  

Hinweis: Der SDL-Blitter funktioniert (noch) nicht   haben die Fähigkeit, die   blitted Oberflächen oben oder unten wie es ist   der Fall mit anderen höher entwickelten   Blitting-Mechanismen. Sie müssen   Finde etwas heraus für dich, wenn   Sie möchten Bilder skalieren (z. B. verwenden   SDL_gfx).

Sie finden SDL_gfx hier . Deine eigene Blitting-Funktion zu schreiben ist nicht so schlecht, es könnte ein lustiges und nützliches Lernexperiment sein (obwohl du das Rad neu erfinden würdest). Die Verwendung von OpenGL ist ebenfalls eine Option, da Dinge wie Skalieren und Drehen in einem einzigen Funktionsaufruf durchgeführt werden können.

    
Firas Assaad 30.11.2008, 06:09
quelle
4

Ich weiß, dass diese Antwort viel zu spät ist, um der Person, die darum gebeten hat, zu helfen, aber ich habe beschlossen, dies zu schreiben, um jedem zu helfen, der über diese Frage stolpert. In SDL 2.0 Sie können die Funktion SDL_BlitScaled() verwenden, um eine Fläche in eine Zielebene SDL_Rect zu skalieren. Es gibt ein Tutorial von LazyFoo , das dies beschreibt, oder schaut euch das Dokumentation .

    
Justin Stephens 22.06.2015 00:04
quelle
1

Der Vollständigkeit halber und weil die Frage keine SDL-Version angibt, ist die Skalierung in SDL2 mit der API-Methode SDL_RenderCopyEx möglich. Außer der grundlegenden SDL2-Bibliothek werden keine zusätzlichen Bibliotheken benötigt.

%Vor%

Wenn Sie die Größe von dstrect einstellen, können Sie die Textur auf eine ganze Zahl von Pixeln skalieren. Es ist auch möglich, die Textur gleichzeitig zu drehen und zu spiegeln.

Technisch betrachtet skaliert eine Oberfläche nicht, sondern skaliert eine Textur. Das Verfahren sollte jedoch so relevant sein, da Oberflächen fast immer in Texturen konvertiert werden, bevor das Rendern in SDL2-basierten Anwendungen stattfindet.

Referenz: Ссылка

Erstellen Sie Ihre Texturen wie gewohnt:

%Vor%

Und wenn es Zeit ist, es zu rendern, rufen Sie SDL_RenderCopyEx anstelle von SDL_RenderCopy

auf     
Martin 17.02.2015 10:54
quelle

Tags und Links