Pixelart und Zoom

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

FaVo

Betreff: Pixelart und Zoom

BeitragDi, Jan 23, 2018 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich hoffe, dass hier überhaupt noch jemand aktiv ist *g*

Ich möchte ein Spiel nach Pixelart machen und nutze eine virtual resolution von 320x240. Wenn ich dort nun Text ausgebe oder ein Bild 1zu1, dann ist das auch entsprechend Pixelig. Nur wenn ich eine Zoom-Funktion einbauen möchte, habe es mit setscale probiert, dann wird das Bild zwar entsprechend kleiner gerendert, aber es bleibt nicht in der 320x240 Auflösung sondern wird auch durch das setscale feiner dargestellt. Nachfolgend zu sehen, das Bild wird erst im scale 1 gerendert und dann 0.5. Es ist zwar dann nur halb so groß, wird aber nicht mehr "blockig" in der virtuellen Auflösung von 320x240 dargestellt sondern entsprechend in einer doppelt so hohen Auflösung.

user posted image

Hier ein Bild, wie es sein soll (die Auflösung des verkleinerten Bildes ist gleich mit dem Rest):

user posted image

Wie kann ich das am besten bewerkstelligen, dass es einen stufenlosen Zoom gibt, die Renderauflösung aber immer bei 320x240 bleibt? Mit setscale klappt es ja so nicht, vielleicht gehe ich auch komplett falsch an die Sache heran?!

Danke!

Holzchopf

Meisterpacker

BeitragDi, Jan 23, 2018 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm interessant. Hätte dieses Verhalten bei Verwendung einer virtuellen Auflösung nicht erwartet - retrospektiv macht es aber durchaus Sinn, lediglich die Skalierungsfaktoren zu multiplizieren für die finale Ausgabe anstatt einen "Pixelfilter" darauf anzuwenden. Wegen Performance und so.

Eine Möglichkeit wäre, alles 1:1 in einen 320x240px Viewport zu rendern, diesen in ein 320x240px Bild zu "grabben" (GrabImage) und dieses entsprechend deinen "Virtual Resolution"-Wünschen skaliert zu zeichnen. Das Bild muss dann ohne das Filter-Flag erstellt werden und auf die virtuelle Auflösung wirst du wohl dann ganz verzichten müssen (und die Mauskoordinaten manuell skalieren).

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

FaVo

BeitragDi, Jan 23, 2018 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt interessant. Ist das denn schnell genug um es live zu machen? Image grabben klingt erstmal eher langsam. Ich werde den Weg mal probieren. Danke!
 

FaVo

BeitragMi, Jan 24, 2018 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Lösung mit grabimage funktioniert zwar prinzipiell, drückt aber die Performance von 1000 FPS auf 50 FPS. Und das nur in dem kleinen Test. Schade...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jan 28, 2018 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax basiert doch auch OpenGL, so müssten doch die Standard Min- und Mag-Filter bzw. MIPMAP_NEAREST genutzt werden können.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

FaVo

BeitragMo, Jan 29, 2018 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, so im Detail kenne ich mich nicht damit aus... Kannst du beschreiben wie man da ran geht?

Danke

Holzchopf

Meisterpacker

BeitragMo, Jan 29, 2018 10:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich befürchte, es wird nicht viel bringen Confused In deinem Fall müssten die Filter auf ein "2x2px Raster" wirken, da du ja mit der virtuellen Auflösung nichts anderes machst, als die Ausgabe um Faktor 2 zu vergrössern und die Eingabe (MouseX etc) um Faktor 2 zu verringern.

Anstelle mit Grabimage zu arbeiten, sollte es eigentlich (auch direkt über OpenGL-Befehle) möglich sein, in einen Texturbuffer zu rendern und diesen dann vergrössert zu zeichnen. Sollte einiges schneller sein.

Klepto hat dazu mal etwas geschrieben: Echtes Render2Texture (OpenGL + FBO)
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

FaVo

BeitragMo, Jan 29, 2018 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@Holzchopf

Das sieht sehr gut aus! Vielen Dank für den Hinweis!

Allerdings muss ich mir das mal genauer zu Gemühte führen. Wenn ich das Beispiel ausführe, ist alles spiegelverkehrt gerendert. Das sieht man natürlich erst wenn man Text oder Grafiken mit einbindet, was in dem reinen Beispiel nicht der Fall ist. Aber auch das Problem lässt sich bestimmt irgendwie beheben.

Dankeschön!

Holzchopf

Meisterpacker

BeitragMo, Jan 29, 2018 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht reicht es, die generierte Textur mit SetScale(-1,1) zu zeichnen
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

FaVo

BeitragDo, Feb 01, 2018 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundsätzlich funktioniert das schon mit SetScale(1, -1).
Sieht nach einem vielversprechendem Weg aus, ich werde das mal weiter austesten.

Vielen Dank für den Hinweis!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group