Attualmente sto studiando l'illuminazione in OpenGL, che utilizza una funzione in GLSL chiamata normalize. Secondo i documenti OpenGL, dice che "calcola il prodotto normalizzato di due vettori". Tuttavia, non spiega ancora cosa significhi "normalizzato". Ho provato a cercare cosa sia un prodotto normalizzato su Google, tuttavia non riesco a trovare nulla a riguardo. Qualcuno può spiegare cosa significa normalizzare e fornire qualche esempio di un valore normalizzato?Cosa significa normalizzare un valore?
risposta
E 'un termine matematico e this link spiega il suo significato in termini piuttosto semplici:
operazioni in 2D e 3D computer grafica sono spesso eseguite utilizzando copie di vettori che sono stati normalizzati cioè. convertito versori ... normalizzazione un vettore comprende due fasi:
- calcolare la sua lunghezza, quindi,
- dividere ciascuno dei suoi (
xy
oxyz
) componenti per la sua lunghezza ...
credo la confusione nasce dall'idea di normalizzare "un valore" invece di "vettore"; se si pensa solo a un singolo numero come valore, la normalizzazione non ha alcun senso. La normalizzazione è utile solo se applicata a un vettore.
Un vettore è una sequenza di numeri; nella grafica 3D è solitamente una coordinata espressa come v = <x,y,z>
.
Ogni vettore ha una grandezza o lunghezza, che può essere trovato con il teorema di Pitagora: |v| = sqrt(x^2 + y^2 + z^2)
Questo è fondamentalmente la lunghezza di una linea dall'origine <0,0,0>
al punto espresso dal vettore.
Un vettore è normale se la sua lunghezza è 1. Questo è tutto!
Per normalizzare un vettore mezzi per cambiare in modo che punti nella stessa direzione (si pensi che linea dall'origine) ma la sua lunghezza è uno.
Il motivo principale usiamo vettori normali è quello di rappresentare una direzione; per esempio, se stai modellando una fonte di luce che è a una distanza infinita, non puoi dare delle coordinate precise per essa. Ma puoi indicare dove trovarlo da un punto particolare usando un vettore normale.
La normalizzazione ha davvero senso per un singolo valore. Questo è ciò che fa (x). – Jessy
@Jessy Giusto abbastanza, ma è molto meno interessante/confuso del caso 3-vector. – benzado
Probabilmente. Penso che aiuti a capire il concetto, comunque. Ad esempio, penso che sia utile immaginare di prendere il prodotto punto di un vettore "n> 1" normalizzato e un "vettore 1 normalizzato". Puoi visualizzare in che modo i contributi di altre dimensioni non influenzano l'angolo tra i vettori. Solo la dimensione che corrisponde al vettore 1 importa. – Jessy
dove l'hai trovato? In GLSL spec c'è: normalize (genType x) - restituisce un vettore nella stessa direzione x, ma con un lunghezza 1. http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8 .pdf – fen
Ecco, penso che questa sia stata la prima cosa che è venuta fuori quando ho cercato su Google. http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml – TheAmateurProgrammer
strano ... ma la descrizione v'è una corretta informazioni. – fen