2012-12-29 10 views
5

Ich arbeite an einer Malanwendung mit dem LibGDX-Framework, und ich verwende ihre FrameBuffer-Klasse, um zusammenzufassen, was der Benutzer auf eine solide Textur zeichnet, was sie als ihre Zeichnung sehen. Dieser Aspekt funktioniert gut, aber der Bereich, auf den der Benutzer zurückgreifen kann, wird nicht immer die gleiche Größe haben, und ich habe Probleme, ihn bei anderen Auflösungen als dem des gesamten Fensters richtig anzuzeigen.LibGDX FrameBuffer Skalierung

Ich habe das sehr ausgiebig getestet, und was scheint zu passieren ist, dass der FrameBuffer die Textur in der gleichen Auflösung wie das Fenster selbst erstellt und dann einfach dehnt oder schrumpft, um sie an den tatsächlichen Bereich anzupassen in, was ein sehr unangenehmer Effekt für jede Zeichnung ist, die größer oder kleiner als das Fenster ist.

Ich habe bei jedem einzelnen Schritt meines Prozesses verifiziert, dass ich mich nie selbst dehne, und dass alles mit den richtigen Maßen und Orten gezeichnet wird, wie und wo es hingehört. Ich habe auch in die FrameBuffer-Klasse selbst geschaut, um zu versuchen, die Antwort zu finden, aber seltsamerweise auch nichts darin gefunden, aber angesichts all der Tests, die ich gemacht habe, scheint dies der einzig mögliche Ort für dieses Problem zu sein irgendwie erschaffen.

Ich bin einfach völlig aus Ideen, nachdem ich eine beträchtliche Zeit damit verbracht habe, dieses Problem zu beheben.

+0

Willkommen bei Stackoverflow . Sie erhalten eine bessere Antwort auf Ihren Beitrag, wenn Sie eine diskrete Frage haben und zeigen, was Sie versucht haben, was passiert, etc. – ethrbunny

+0

Ich würde wirklich gerne in der Lage sein, eine genauere Frage zu stellen und weitere Details zu geben, aber angesichts der Art des Problems, ich habe einfach keine Ahnung, wo ich konzentrieren sollte und bin bei einem vollständigen Verlust. Ich bin glücklich, alles zu veröffentlichen, was auf Anfrage helfen kann, aber im Moment bin ich nicht einmal sicher, was wirklich hilfreich wäre, hier hinzuzufügen. – Synthetik

Antwort

6

Vielen Dank Synthetik für das Finden des Kernproblems. Hier ist der richtige Weg, um diese Situation zu beheben, der Sie sich entziehen. (Ich denke)

Der Weg Frame-Buffer erzeugt ein korrektes Verhältnis und Maßstab Textur unabhängig von der tatsächlichen Gerätefenstergröße zu machen, ist die Projektionsmatrix die Größe wie vorgeschrieben eingestellt:

SpriteBatch batch = new SpriteBatch(); 
Matrix4 matrix = new Matrix4(); 
matrix.setToOrtho2D(0, 0, 480,800); // here is the actual size you want 
batch.setProjectionMatrix(matrix); 
+0

Ich habe es versucht, aber es dehnt sich immer noch ein wenig aus. – Midnightas

3

Ich glaube, ich habe mein Problem gelöst, und ich werde einen sehr kurzen Überblick geben, was das Problem ist.

Im Grunde liegt die Ursache dieses Problems in der SpriteBatch-Klasse. Insbesondere unter der Annahme, dass ich keine veraltete Version der Klasse verwende, liegt das Problem in Zeile 181, wo die Projektionsmatrix eingestellt ist. Die Linie:

 projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

Dies verursacht alles, was zu gezogen wird, im wesentlichen im Maßstab des Fensters/Bildschirms und dann passen gestreckt gezeichnet werden, wo muss es danach. Ich bin mir nicht sicher, ob es eine "richtige" Methode gibt, um damit umzugehen, aber ich habe einfach eine andere Methode innerhalb der SpriteBatch-Klasse erstellt, die es mir erlaubt, diese Methode mit meinen eigenen Dimensionen erneut aufzurufen und diese bei Bedarf aufzurufen. Beachten Sie, dass es nicht bei jeder Zeichnung oder ähnlichem benötigt wird, nur einmal oder zu irgendeinem Zeitpunkt, an dem sich die Abmessungen ändern können.