Il capitolo che apre il libro, cosi' come e' stampato: come e' fatto il volume, a chi e' rivolto, che cosa serve.
Prima di cominciare
Prefazione
I volumi 3 e 4 hanno disegnato su un piano: forme, curve, testo, immagini, con Avalonia e con Skia. Questo libro aggiunge la terza dimensione. Un oggetto 3D non si disegna: si descrive con dei numeri, vertici e triangoli, e un programma lo trasforma, lo illumina e lo proietta sullo schermo, sessanta volte al secondo.
Il libro lo fa in due tempi. La prima parte non usa nessuna libreria: vettori e matrici con System.Numerics, le trasformazioni, la telecamera, le mesh, la luce, e alla fine un rasterizzatore scritto a mano in C#, che disegna i triangoli pixel per pixel su una bitmap. È lento, e lo si misura: è il modo più corto per capire che cosa fa la scheda video. La seconda parte passa a OpenGL, la libreria grafica che gira su Windows, Linux e macOS, aperta dentro un controllo di Avalonia: buffer, shader, texture, luci, ombre, framebuffer, instancing, compute shader. La terza parte costruisce le cose che servono in un'applicazione vera: la telecamera che gira col mouse, i modelli glTF, il clic su un oggetto, le etichette, le misure dei tempi della scheda video. Il libro finisce con quattro progetti: un visualizzatore di modelli, una superficie di misure in tempo reale, un grafico 3D scientifico e una nuvola di milioni di punti.
Tutto è ancora C#, senza XAML, e senza librerie a pagamento: Avalonia (la parte gratuita), Silk.NET per le chiamate a OpenGL, SkiaSharp per le texture e il testo, SharpGLTF per i modelli, tutte con licenza MIT.
La collana ha dieci volumi:
- Il linguaggio C#: tipi, oggetti, generici, eccezioni, file, thread,
Taskeasync. - Interfacce desktop: Avalonia in codice, i controlli, i temi, le architetture e i thread dell'interfaccia.
- Grafica 2D: il disegno e le animazioni con Avalonia.
- Grafica 2D avanzata: Skia, Direct2D, le immagini, i progetti.
- Grafica 3D: il 3D da zero con OpenGL. Questo libro.
- Grafica 3D avanzata: Vulkan e Direct3D.
- Audio.
- Video.
- Dispositivi, dati e rete.
- Sistema, distribuzione e qualità.
I volumi 5 e 6 erano un libro solo, diviso per libreria perché superava le 480 pagine: questo insegna il 3D con OpenGL, il volume 6 scende in Vulkan e Direct3D e confronta le tre strade. Ogni capitolo porta il numero del volume: V.4 è il quarto capitolo di questo libro, §V.4.2 il secondo paragrafo di quel capitolo. Un rimando con il numero I, II, III o IV, come «(capitolo IV.15)», indica il volume 1, 2, 3 o 4.
Che cosa serve dei volumi precedenti
Il libro dà per noto il C# del volume 1 e le basi di Avalonia del volume 2. Del disegno 2D servono poche cose, e il capitolo che le usa rimanda a dove sono spiegate:
| Argomento | Dove |
|---|---|
classi, interfacce, eventi, generici, unsafe e puntatori | capitoli I.6–I.10 |
thread, Task, await | capitoli I.15–I.18 |
| il progetto Avalonia, la finestra, RAVAL | capitoli II.2–II.5 |
il thread della finestra, il Dispatcher, i timer | capitoli II.37 e II.39 |
| come disegna Avalonia: il thread del disegno, il compositore | capitolo III.1 |
Render, penne, geometrie, trasformazioni | capitoli III.2–III.5 |
| il passo fisso delle animazioni | capitolo III.21 |
| Skia: bitmap, testo, pixel | capitoli IV.1–IV.4 e IV.21 |
| la scheda video dentro Avalonia: la texture condivisa | capitolo IV.15 |
La matematica non va oltre le superiori: vettori, seni e coseni. Quello che serve di più, le matrici, si spiega da capo nei capitoli V.2–V.4.
Come è fatto il libro
| Parte | Capitoli | Che cosa |
|---|---|---|
| Prima · Il 3D senza librerie | V.1–V.7 | vettori, matrici, trasformazioni, telecamera, mesh, luce, un rasterizzatore a mano |
| Seconda · OpenGL | V.8–V.20 | il controllo OpenGL di Avalonia, buffer, GLSL, texture, luci, ombre, instancing, compute |
| Terza · Scene vere | V.21–V.26 | telecamera orbitale, modelli glTF, animazioni, picking, testo nel 3D, misure |
| Progetti | V.27–V.30 | visualizzatore di modelli, superficie di misure, grafico 3D, nuvola di punti |
| Appendici | A–C | gli inciampi, il riferimento rapido, il glossario |
Ogni capitolo comincia con Cosa imparerai e finisce con tre riquadri: Errori comuni, gli sbagli che si fanno davvero, con il rimedio; Da ricordare, il capitolo in poche righe; Esercizi, da fare con l'editor aperto.
I percorsi di lettura
- Da zero. Tutto, in ordine: la prima parte è la base di tutto il resto, anche del volume 6.
- Conosci già la matematica del 3D. Scorri i capitoli V.2–V.6, leggi il V.7 per le misure, e comincia dal V.8.
- Ti serve un grafico 3D in un'applicazione. Capitoli V.1, V.4, V.8–V.12, poi V.21, V.25 e il progetto V.29.
- Vuoi passare a Vulkan o Direct3D. La prima parte e i capitoli V.8–V.16, poi il volume 6.
La scheda video del libro
Gli esempi chiedono OpenGL 3.3 con il profilo «core», che hanno tutte le schede video degli ultimi quindici anni, anche quelle integrate nel processore; solo i compute shader (capitolo V.19) chiedono OpenGL 4.3. Su Windows il libro apre OpenGL con il driver della scheda (WGL), e non con ANGLE, il traduttore verso Direct3D che Avalonia usa da sé: lo stesso OpenGL di Linux e di macOS, con la profondità a 24 bit e i compute shader. Il capitolo V.8 spiega la differenza, il V.20 la misura sui tre sistemi.
Le misure del libro sono prese su Windows 10 con una NVIDIA GeForce GTX 1080; il testo dice quando un numero cambia molto da una scheda all'altra.
Le regole della casa
Le stesse dei volumi precedenti:
- solo .NET, Avalonia e RAVAL, più le librerie che un capitolo nomina e spiega, sempre gratuite e con una licenza che permette di usarle anche nei programmi che si vendono;
- tutto in C#, senza XAML; gli shader in GLSL, il linguaggio di OpenGL, dentro il programma;
- i nomi in italiano, quando sono nostri:
Telecamera,Mesh,Rasterizzatore; - una classe per file, con il nome del file, e un commento su ogni metodo che dice che cosa fa e perché;
- ogni gestore è un metodo con un nome;
- righe corte, entro 80 caratteri;
- niente detto, tutto misurato: quando il libro dice quanto costa un disegno, quanti triangoli passano in un fotogramma o che cosa sceglie un driver, c'è stato un programma che lo ha misurato, e il capitolo lo racconta.
Gli strumenti e il codice degli esempi
Servono l'SDK di .NET 10, un editor per C# (il libro usa Visual Studio Code, capitolo I.2), Avalonia 12.1.4 e RAVAL 2.0.0, come nei volumi precedenti; Silk.NET.OpenGL 2.22 si aggiunge dal capitolo V.9, SharpGLTF nel V.22. Per guardare dentro un fotogramma della scheda video serve RenderDoc (capitolo V.26), gratuito.
Il codice si scarica gratuitamente dal sito del libro, https://raval.aratoingegneria.it (capitolo II.2). RAVAL e gli esempi hanno la licenza MIT. Ogni programma degli esempi è stato compilato senza un avviso, e ogni figura è stata disegnata dal programma vero.
Convenzioni tipografiche
- Un termine nuovo è in grassetto la prima volta, ed è nel glossario (appendice C).
- Il codice, i nomi delle classi, dei metodi e dei file sono in
carattere fisso; le formule, quando servono, in un blocco di codice, scritte come si scriverebbero in C#. - I nomi dei pulsanti e delle voci di menu sono in corsivo: Ferma, Vista → Fil di ferro.
- I percorsi sono scritti come su Windows,
C:\Esempi\V.1. - I rimandi dicono il capitolo, «(capitolo V.6)», o il paragrafo, «§V.6.2».
- I numeri misurati (fotogrammi al secondo, millisecondi per fotogramma) cambiano da un computer all'altro e da una volta all'altra: il testo li cita come li mostra la figura, e dice su che macchina sono stati presi.