Cosa sono i vettori normali, tangenti e binormali e come vengono usati?


47

Vorrei scoprire le seguenti informazioni:

  • Quali sono?
  • Esempio di utilizzo nello sviluppo del gioco (l'area in cui vengono utilizzati)

Informazioni sui seguenti tipi di vettore:

  • Normal
  • Tangent
  • Binormal

Una semplice spiegazione incentrata sullo sviluppo del gioco sarebbe sufficiente.


1
Stai facendo troppe domande. È meglio leggere solo come funzionano i vettori. Da zero. Riporta anche la tua trigonometria lungo il percorso.
Sidar,

3
Ho pensato che potrebbe essere molto da chiedere, ma d'altra parte sarebbe bello avere queste informazioni insieme sotto una domanda. Questo è anche il motivo per cui ho specificamente chiesto spiegazioni semplici.
Jaanus Varus,

Risposte:


43

In generale, un vettore normale rappresenta la direzione che punta direttamente "fuori" da una superficie, il che significa che è ortogonale (ad angoli di 90 gradi rispetto a) qualsiasi vettore che è complanare (nel caso di una superficie piana) o tangente a (nella caso di una superficie non piana) la superficie in un determinato punto.

Un vettore tangente è in genere considerato come un vettore esistente all'interno del piano della superficie (per una superficie piana) o che si trova tangente a un punto di riferimento su una superficie curva (cioè se un piano piatto fosse costruito con la stessa normale dal punto di riferimento , il vettore tangente sarebbe complanare con quell'aereo).

Il concetto di vettore binormale è un po 'più complesso; in computer grafica, generalmente si riferisce a un vettore bitangente (riferimento qui ), che è effettivamente "l'altro" vettore tangente per la superficie, che è ortogonale sia al vettore normale che al vettore tangente scelto.Normale, Tangente, Bitangente

Per quanto riguarda il modo in cui vengono calcolati, questo varia in base alla complessità della superficie e alla precisione con cui si desidera che sia normale (in alcuni casi, ad esempio con gli shader lisci, è preferibile calcolare una normale per una superficie approssimata, quando le informazioni effettive per una superficie non sono presenti), ma ci sono diverse formule generalizzate fornite qui .

In termini di dove si verificano, la risposta è OVUNQUE . I vettori normali vengono utilizzati per posizionare telecamere e oggetti nello spazio 3D, per determinare traiettorie, riflessi e angoli nei calcoli della fisica, per mappare pelli e trame su modelli 3D, per determinare gli offset della traiettoria degli obiettivi nella programmazione AI, per dare suggerimenti agli shader su come per illuminare, ombreggiare e colorare i punti su una superficie relativa a luci, videocamera e altri oggetti e così via. Probabilmente sono una delle informazioni più utili da avere in un ambiente 3D, e risultano anche estremamente utili anche in 2D.


2
Accidenti avrei dovuto aggiungere una foto: p
RobCurr

Grazie per la spiegazione approfondita! Contrassegnato come risposta.
Jaanus Varus,

2
Potrebbe essere utile leggere questo articolo sul perché l'assunto della patch quadrata non è valido e perché tutto ciò che tutti dicono su tangenti e bitangenti è praticamente falso. Descrive la matematica corretta che si dovrebbe usare, ma purtroppo non sono abbastanza competente per creare una risposta corretta con essa.
Lars Viklund,

I vettori bitangenti e binormali sono equivalenti. Sono nomi attribuiti alla stessa cosa e dipende solo dal tuo "punto di vista mentale" su quale nome usare.
Nikos,

15

I vettori normali vengono generalmente utilizzati per i calcoli dell'illuminazione. È un vettore che dovrebbe essere perpendicolare alla superficie che è approssimata dai vertici di una mesh. Le normali sono definite in ciascuna posizione dei vertici ma possono essere calcolate in modo diverso a seconda di come si desidera che la luce si rifletta su quel vertice o cosa si desidera fare con i calcoli della luce nello shader.

I vettori tangenti e binormali sono vettori perpendicolari tra loro e al vettore normale che descrivono essenzialmente la direzione delle coordinate della trama u, v rispetto alla superficie che si sta tentando di eseguire il rendering. In genere possono essere utilizzati insieme alle normali mappe che consentono di creare dettagli di illuminazione della superficie secondaria per il modello (irregolarità).

Esistono ovviamente altri modi per utilizzare questi vettori e ne ho appena descritto l'uso medio. Per ulteriori informazioni tecniche, ti suggerisco di prendere un libro sulla computer grafica o di esplorare alcuni articoli su Internet. Ci sono molte informazioni là fuori su questo.


4
+1 - La prossima volta, però; aggiungi una foto.
Pieter Geerkens,

9

La differenza tra tangente e binormale è meno immediata sulle superfici, ma ciò non dovrebbe essere troppo sorprendente: il binormale era originariamente definito non per le superfici ma per le curve , dove il concetto ha molto più senso (e dove vive davvero) come 'normale' in quanto ortogonale alla direzione del movimento, da cui il nome). Per essere più specifici, data una curva spaziale della forma p = V (t) = (V x (t), V y (t), V z (t)), quindi la tangente - che è un vettore che punta nella direzione del movimento - è data da T u = dp / dt = (dV x / dt, dV z / dt, dV z/ dt). (Sto usando il pedice qui per distinguere "non normalizzato" poiché non ho qui il mio MathJax.) Quindi la velocità (istantanea) lungo la curva è solo s = | T u |, la lunghezza del vettore tangente e il vettore tangente 'normalizzato' è semplicemente T = T u / s.

Quindi il vettore normale alla curva è la derivata del vettore tangente normalizzato nel tempo, N u = dT / dt; la ragione per cui qui viene usata la tangente normalizzata è per evitare che la velocità lungo la curva inclini il vettore normale - puoi mostrare che con questa definizione, abbiamo sempre TN u = 0. Nota che N u non è necessariamente un vettore unitario , non più di Tu ; infatti, la sua magnitudine k = | N u | è la curvatura (istantanea) della curva in un determinato punto e il punto p + N u è il centro del cosiddetto cerchio osculatore (in un determinato punto). La normale normalizzata è quindi solo N = N u/ k, e il bitangente B è il prodotto incrociato B = TxN; poiché T e N sono entrambi vettori di unità e sono ortogonali tra loro, allora B è anche un vettore di unità e (T, N, B) è una cornice ortogonale.

Si noti che con questa definizione il "binormale" di una curva è più vicino a ciò che noi consideriamo il normale a una superficie (è il normale al piano "locale" della curva), e il normale di una curva è più vicino a ciò che pensiamo a come il bitangent a una superficie.

(Questa immagine, purtroppo, non rende davvero giustizia al concetto, ma è la migliore che potessi trovare sul web e non riesco a costruirne facilmente una mia ...)

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.