2014-05-06 16 views
24

Questo post è correlato a un post precedente di voler imparare come eseguire correttamente il rendering tra LIBGDX e Box2D. Dovevo capire bene il punto di vista prima di poter procedere.
Dopo molte letture di codice/post, ho sentito che il significato di "viewport" era "l'apertura del rettangolo di una lente della telecamera che vede il mondo di gioco di LIBGDX, dove posso spostarlo sul mondo per vedere quello che voglio". Ma, dopo ulteriori letture, mi sembrava di non essere affatto vicino al significato attuale.
Ho letto il wiki LIBGDX e ho letto nella documentazione OpenGL, che sembra spiegare la visualizzazione come due cose diverse.LIBGDX: Che cos'è un "viewport"?

LIBGDX Wiki:

"La finestra è una regione di visualizzazione rettangolare dello schermo in cui viene proiettata la scena 3D è altro che la mappatura dei 3 oggetti tridimensionali al piano dimensionale 2.".

OpenGL: "la finestra indica la forma dell'area disponibile sullo schermo in cui è associata la scena"

StackOverflow:

"... Ha diverse definizioni in contesti diversi ...": '(

Ho provato a leggere decine di messaggi del forum e tutorial. Ma sfortunatamente quasi tutti ci saltano addosso come se "vista" fosse un concetto così primitivo che tutti capiscono e conoscono
So che otterrò molto calore per questa domanda assolutamente fondamentale. perché in realtà non conosco un Ho davvero bisogno di aiuto.

In ogni caso, nella domanda reale.

Che cos'è "viewport" nel contesto LIBGDX?

+4

Eccellente q. Questo è il tipo di cosa che è stata data per scontata, ma quando si scansionano gli esempi si capisce che le persone stanno violando i componenti in modo errato a causa di difetti fondamentali nella loro comprensione dei componenti di base. – RichieHH

risposta

25

Dipende dalla versione di LibGDX che si sta utilizzando. Con LibGDX 1.0.0 è stata introdotta la classe Viewport e probabilmente questo è ciò che significano gli ultimi tutorial e articoli quando parlano di "viewport".

Questa classe gestisce due cose:

  • La finestra di una macchina fotografica
  • L'OpenGL viewport

La finestra di una macchina fotografica definisce quanto si vuole vedere del mondo di gioco. Se hai un enorme TiledMap della dimensione 10000px X 10000 px, allora probabilmente vuoi solo mostrare una piccola area di quella mappa in una sola volta. Se definisci la vista della tua fotocamera su 800px X 480px, vedrai una parte della tua mappa che ha esattamente questa dimensione (almeno nel caso di uno OrthographicCamera). È come una finestra attraverso cui guardi attraverso il tuo mondo e ne definisci la dimensione attraverso il viewport.

La finestra OpenGL definisce l'area a cui deve essere mappata la vista della telecamera. Per impostazione predefinita, tale finestra è al 100% della dimensione della finestra sui sistemi operativi desktop. Ma potrebbe anche essere diverso. A FitViewport con LibGDX 1.0.0 può ridimensionare quella finestra in modo che mantenga le proporzioni di una "finestra virtuale" che definite (che è in realtà la finestra della telecamera, che è gestita dalla classe Viewport). Ciò significa che nel caso in cui le proporzioni della finestra non corrispondano allo aspect ratio Viewport (virtuale), la finestra OpenGL verrà impostata su una dimensione più piccola e verranno visualizzate delle barre nere. Quindi puoi pensare ad esso come un altro strato tra la finestra effettiva sul desktop e la fotocamera. Questo strato prende l'output della tua fotocamera e lo ridimensiona alla dimensione definita all'interno della finestra del desktop.

+0

Grazie per questa splendida spiegazione. Il significato/utilizzo/definizione di viewport in Libgdx è cambiato prima della versione 1.0.0? – coffeenet

+0

Prima della versione 1.0.0 era solo il viewport della telecamera e il viewport OpenGL, perché la classe 'Viewport' che gestisce entrambi non esisteva ancora. – noone

+0

Quindi, nella versione più recente di LIBGDX, camera.viewportWidth/Height e stage.setViewport() seguono lo stesso concetto che hai gentilmente spiegato, giusto? E, sta impostando camera.viewportWidth/Height è come impostare stage.setViewport()? – coffeenet