Grafica 2D
SpriteBatch
In OpenGL, inviare ogni singola immagine alla GPU separatamente è lentissimo.
SpriteBatch risolve questo problema: accumula (bathes) tutte le immagini che vuoi disegnare e le invia alla GPU in un colpo solo quando chiami batch.end().
Regola d’oro: Chiama batch.begin() e batch.end() il meno possibile (idealmente una volta per frame).
```java batch.begin(); // Disegna tutto qui dentro batch.draw(texture1, x, y); batch.draw(texture2, x, y); font.draw(batch, “Hello”, 100, 100); batch.end(); ```
Textures & TextureRegions
- Texture: Un’immagine caricata in VRAM (Video RAM). Le dimensioni dovrebbero essere potenze di due (POT) per compatibilità massima (es. 256x256, 1024x1024), ma OpenGL ES 2.0 supporta anche NPOT.
- TextureRegion: Una porzione rettangolare di una Texture. Utile per gli Sprite Sheets (Texture Atlas).
```java Texture sheet = new Texture(“spritesheet.png”); // Prendi una regione 32x32 iniziando da (0,0) TextureRegion frame1 = new TextureRegion(sheet, 0, 0, 32, 32); ```
Camera & Viewport
Non disegnare usando coordinate fisse dello schermo (pixel)! Usa una Camera.
```java OrthographicCamera camera = new OrthographicCamera(); camera.setToOrtho(false, 800, 480); // Y-up coordinate system ```
Nel render():
```java
camera.update();
batch.setProjectionMatrix(camera.combined); # Di’ al batch come proiettare il mondo 3D sullo schermo 2D
batch.begin(); … batch.end(); ```
In combinazione con una Viewport (es. FitViewport), questo gestisce automaticamente schermi di dimensioni diverse mantenendo l’aspect ratio.