Modalità di rendering

Attualmente Processing ha quattro modalità di rendering.

I programmi scritti con Processing possono essere renderizzati utilizzando

  1. le librerie di disegno 2D di Java
  2. un motore 3D personalizzato detto P3D
  3. attraverso OpenGL utilizzando l’interfaccia JOGL
  4. un motore 2D personalizzato detto P2D.

La modalità di rendering è specificata attraverso la funzione size().

È stato fatto un grande sforzo per far apparire il linguaggio di Processing uniforme tra le diverse modalità di rendering, ma ci sono ancora delle differenze.


Di più su size()


La funzione size() imposta, tra le altre cose, anche le variabili globali width e height.
Se hai degli oggetti la cui dimensione dipende dallo schermo utilizza sempre le variabili width e height invece dei numeri.
Questo ti eviterà problemi quando cambierai, tramite size(), le dimensioni della finestra.

size(400, 400);
ellipse(200, 200, 50, 50);
ellipse(width/2, height/2, 50, 50);

Negli esempi precedenti la funzione size() specifica soltanto l’ampiezza e l’altezza della finestra.
Un parametro opzionale della funzione size() specifica come viene realizzata la grafica.

Un renderermotore di rendering, specifica come sono implementate le API di Processing per ogni particolare funzione di output (che sia lo schermo, lo schermo attraverso una scheda video avanzata, un file PDF).
In Processing sono inclusi diversi renderer e ciascuno ha la sue specificità. Scendendo di più nei dettagli ecco una descrizione delle modalità di disegno che si possono usare con Processing.


JAVA2D


size(400, 400, JAVA2D);

Il render Java2D è utilizzato di default, quindi l’istruzione è equivalente a

size(400, 400)

Il renderer Java2D fa un lavoro eccellente con la grafica vettoriale 2D di alta qualità, a discapito della velocità. In particolare, il trattamento dei pixel è più lento rispetto a P2D e P3D.


P2D


size(400, 400, P2D);

Il renderer 2D di Processing è rivolto alla grafica semplice e alle operazioni veloci sui pixel. È privo di di raffinatezze comestrokeCap() oppure strokeJoin() ma rimedia a questo quando c’è la necessità di disegnare migliaia di forme semplici o di manipolare direttamente i pixel di un’immagine o di un video.


P3D


size(400, 400, P3D);

Simile a P2D, il renderer 3D di Processing è mirato per operazioni veloci e sui pixel. Crea anche grafiche 3D all’interno di browser web, persino senza una libreria come Java3D.
La qualità dell’immagine è più povera (la funzione smooth() è disabilitata, e la qualità dell’immagine è bassa) ma è possibile disegnare migliaia di triangoli molto velocemente.


OPENGL


size(400, 400, OPENGL);

Il renderer OpenGL usa la libreria JOGL (Java per OpenGL) della Sun per un rendering più veloce (…).
Per usare la grafica OpenGL, in aggiunta alla modifica nella funzionesize(), bisogna selezionare Import Library, poi OpenGL dal menù Sketch

Le applet OpenGL vengono avviate anche all’interno di un browser web senza ulteriori modifiche, ma apparirà una finestra di dialogo con la richiesta se si ha fiducia in “Sun Microsystems, Inc.” prima di avviare Java per OpenGL.
Se questo è un problema, il renderer P3D è una soluzione più semplice anche se meno potente.


PDF


size(400, 400, PDF, "output.pdf");

Il renderer PDF disegna tutta le geometrie su un file invece che sullo schermo.
Come per la libreria OpenGL, devi importare la libreria PDF prima di usarla.
Questo render è imparentato con Java2D, ma scrive direttamente su file PDF.


Conclusioni


Ciascun renderer ha un ruolo specifico.
P2D e P3D sono ottimi per lavori basati sui pixel, mentre le impostazioni JAVA2D e PDF ti daranno la più alta qualità grafica 2D.

Agli inizi del progetto Processing i renderer P2D e P3D erano, nei fatti, gli unici renderer disponibili.
Si trattava del tentativo di offrire un modo unico di pensare al disegno in due e in tre dimensioni.
Tuttavia questo divenne troppo oneroso a causa del numero di compromessi che si devono fare tra il 2D e il 3D.
Per esempio si hanno aspettative di qualità molto diverse tra il 2D e il 3D e cercare di soddisfarle insieme porterebbe a risultati peggiori.