- Disuguaglianza triangolare: La somma delle lunghezze di due lati è strettamente maggiore della lunghezza del terzo
flat shading e smooth shading
- se le normali sono definite per faccia → c’è discontinuità di normale tra le facce, come uno spigolo, questo crea discontinuità di illuminazione e altre implicazioni
- il flat shading è utile per vedere ogni singola mesh, così com’è nella sua forma geometrica
- se le normali sono definite per vertice → ho smussato tutto pk assegno in corrispondenza dei edge una normale intermedia tra quello espresso nei vertici. L’interpolazione smussa le normali
case study 1: voglio creare discontinuità tra le facce nonostante gli attributi siano memorizzati ai vertici
adotto la configurazione SEAM (cucitura) = duplico i vertici e li sovrappongo, in questo modo l’edge che collega i 2 vertici di una faccia è totalmente diversa dall’altra.
case study 2: definire la normale per vertice
- devo calcolare la normale per faccia anche se non mi serve direttamente, ed è eseguito tramite prodotto vettoriale tra 2 vertici
- direzione → prodotto vettoriale (spiego come funziona)
- la formula è una forma più estesa, pk la differenza tra 2 punti (vertici) è un vettore
- formula più breve
- disponi i vettori A e B di partenza in verticale
- ora devi capire come strutturare la differenza per definire il valore (ad esmepio) della coordinata x:
- elimina dalla testa la riga della coordinata x (ad esempio), quindi rimangono le coordinate y e z
- MINUENDO: traccia una x, le prima riga parte in alto a sinistra e intuitivamente rocca A_y e B_z
- SOTTRAENDO: la seconda riga parte in basso a sinistra e intuitivamente tocca A_z e By
- stessa cosa vale per definire R_y ed R_z
- il prodotto cross tra 2 vettori ha lunghezza pari al prodotto delle lunghezze dei fattori di partenza per il seno dell’angolo tra essi compreso, quindi lunghezza del prodotto cross tra 2 vettori unitari non è unitario (pk moltiplico per un sen_theta)
- la normale vale 0 se l’angolo tra i 2 vettori è k*π
- elimino lunghezza → normalizzazione
- la normale mi dice solo l’orientamento, quindi dopo aver calcolato il prodotto vettoriale devo ridurre ad 1 la lunghezza
- FORMULA
- orientamento → regola della mano destra
RISOLUZIONE IN 3 STEP
normale tra 2 vettori è un vettore ottenuto col prodotto vettoriale tra 2 vettori iniziali che definiscono il piano in oggetto
prodotto vettoriale in forma cartesiana (basata sulle coordinate espresse in vettori)
Formula con le coordinate (componente per componente)
trucco per ricordare la formula
prodotto vettoriale in forma trigonometrica (basata sulle lunghezze dei vettori espresse in modulo)
osservazioni prodotto vettoriale in forma trigonometrica
COMMUTATIVITA’: devi scambiare le posizioni e aggiungere il meno
LINEARITA’
NON E’ ASSOCIATIVO
ALTRO
normalizzazione
- l’orientamento della normale al vertice in questo caso vale come la “media normalizzata” di tutte le normali delle facce che collega e si definisce calcolando la normale unitaria
- quadratico
- raccolgo (gather) per ogni vertice le normali delle facce adiacenti
- è una ricerca controintuitiva e inefficiente
- Lineare
- distribuisco (scatter) da ogni faccia la normale sui vertici adiacenti
- funziona pk le facce sanno da subito quali sono i loro vertici
FORMULA
sotto problema
Dato un vertice, come trovo tutte le facce adiacenti?
L’ALGORITMO CORRETTO DIPENDE DALLA STRUTTURA DATI
La classica struttura dati da solo una carrellata dei vertici per ogni faccia, non delle facce adiacenti per ogni vertice
ALGORITMO GATHER (raccogliere)
ALGORITMO SCATTER (disperdere)
rappresentare una superfice curva, 2 alternative
- flat shading ad alta risoluzione
- bassa risoluzione e normali interpolate
RIPASSO E CONFRONTO: calcolare la normale di un campione
PUNTO DELLA NUVOLA
- il vicinato di un punto è chiamato k-nn (k-esimo nearest neighbor) per la nuvola di punti e mi aiuta a definire la normale di un campione sulla base delle normali dei punti circostanti (metti caso che voglio incrementare la risoluzione) → già detto
MESH
- per le mesh poligonali si usa il prodotto vettoriale
- se memorizzo per faccia sono aposto
- se memorizzo per vertice devo in seguito fare la media delle normali delle facce adiacenti al singolo vertice
NOTE
- le normali risultano visibili all’osservatore attraverso l’illuminazione del modello digitale
- Se una faccia ha più di 3 vertici, quei vertici devono tutti giacere sullo stesso piano per poter definire una singola normale: deve essere planare
- EVITO FRAINTENDIMENTI: Le normali e tutto il resto sono calcolate per vertice pk dandomi la massima flessibilità, nel flusso di elaborazione del modello posso assicurare che la figura in questione è proprio quello che voglio mostrare all'utente, senza creare fraintendimenti
- Se ho una point Cloud voglio sia la posizione sia lo normale dei punti nn devo calcolarli io.
DOMANDA