2012-12-29 18 views
5

Sto lavorando a un'applicazione di pittura utilizzando il framework LibGDX e sto utilizzando la classe FrameBuffer per unire ciò che l'utente disegna su una trama solida, che è ciò che vedono come il loro disegno. Questo aspetto funziona perfettamente, tuttavia, l'area in cui l'utente può disegnare non avrà sempre le stesse dimensioni e ho difficoltà a visualizzarlo correttamente su risoluzioni diverse da quella dell'intera finestra.Ridimensionamento di LibGDX FrameBuffer

L'ho testato molto estesamente, e quello che sembra stia accadendo è che FrameBuffer sta creando la texture alla stessa risoluzione della finestra stessa, e quindi semplicemente allungandola o restringendola per adattarla all'area effettiva che deve essere in, che è un effetto molto spiacevole per qualsiasi disegno più grande o più piccolo della finestra.

Ho verificato, in ogni singolo passaggio del mio processo, che non sto mai facendo nulla di tutto questo e che tutto viene disegnato come e dove dovrebbe, con le giuste dimensioni e posizioni. Ho anche esaminato la classe FrameBuffer per cercare di trovare la risposta, ma stranamente non ho trovato nulla, ma, dato tutto il test che ho fatto, sembra essere l'unico posto possibile per questo problema creato in qualche modo.

Sono semplicemente completamente fuori di idee, avendo trascorso una notevole quantità di tempo cercando di risolvere questo problema.

+0

Benvenuto a StackOverflow . Otterrai una migliore risposta al tuo post se hai una domanda discreta e mostri cosa hai provato, cosa succede, ecc. – ethrbunny

+0

Mi piacerebbe molto poter pubblicare una domanda più specifica e fornire maggiori dettagli, ma vista la natura del problema, semplicemente non ho idea di dove dovrei concentrarmi e sono in perdita completa. Sono felice di pubblicare qualsiasi cosa che possa essere d'aiuto su richiesta, ma al momento non sono nemmeno sicuro di cosa sarebbe veramente utile aggiungere qui. – Synthetik

risposta

6

Grazie mille Synthetik per aver trovato il problema principale. Ecco il modo corretto per risolvere questa situazione a cui eludere. (! Credo)

Il modo per rendere frame buffer produrre un corretto rapporto e la consistenza scala indipendentemente dalle dimensioni reali finestra del dispositivo è quello di impostare la matrice di proiezione alla misura desiderata in questo modo:

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

Ho provato questo ancora si allunga ancora un po '. – Midnightas

3

Credo di aver risolto il mio problema e darò una breve panoramica di quale sia il problema.

Fondamentalmente, la causa di questo problema si trova all'interno della classe SpriteBatch. Specificamente, supponendo che io non stia usando una versione obsoleta della classe, il problema si trova sulla riga 181, dove è impostata la matrice di proiezione. La linea:

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

Ciò causa tutto ciò che viene attirata, in sostanza, essere disegnata alla scala della finestra/schermo e quindi stirato per misura dove deve successivamente. Non sono sicuro che ci sia un modo più "corretto" per gestirlo, ma ho semplicemente creato un altro metodo all'interno della classe SpriteBatch che mi permette di chiamare di nuovo questo metodo con le mie dimensioni e chiamarlo quando necessario. Nota che non è richiesto per ogni estrazione o qualcosa del genere, solo una volta, o ogni volta che le dimensioni possono cambiare.

Problemi correlati