Pixelart und Zoom
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
FaVoBetreff: Pixelart und Zoom |
Di, Jan 23, 2018 17:20 Antworten mit Zitat |
|
---|---|---|
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. Hier ein Bild, wie es sein soll (die Auflösung des verkleinerten Bildes ist gleich mit dem Rest): 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! |
||
HolzchopfMeisterpacker |
Di, Jan 23, 2018 19:31 Antworten mit Zitat |
|
---|---|---|
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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
FaVo |
Di, Jan 23, 2018 20:40 Antworten mit Zitat |
|
---|---|---|
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 |
Mi, Jan 24, 2018 11:04 Antworten mit Zitat |
|
---|---|---|
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... | ||
hecticSieger des IS Talentwettbewerb 2006 |
So, Jan 28, 2018 21:43 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Jan 29, 2018 9:40 Antworten mit Zitat |
|
---|---|---|
Hm, so im Detail kenne ich mich nicht damit aus... Kannst du beschreiben wie man da ran geht?
Danke |
||
HolzchopfMeisterpacker |
Mo, Jan 29, 2018 10:36 Antworten mit Zitat |
|
---|---|---|
Ich befürchte, es wird nicht viel bringen 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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
FaVo |
Mo, Jan 29, 2018 12:09 Antworten mit Zitat |
|
---|---|---|
@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! |
||
HolzchopfMeisterpacker |
Mo, Jan 29, 2018 12:11 Antworten mit Zitat |
|
---|---|---|
Vielleicht reicht es, die generierte Textur mit SetScale(-1,1) zu zeichnen | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
FaVo |
Do, Feb 01, 2018 15:59 Antworten mit Zitat |
|
---|---|---|
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! |
||
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group