2012-07-25 5 views
32

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?

+0

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

+0

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

+0

strano ... ma la descrizione v'è una corretta informazioni. – fen

risposta

13

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:

  1. calcolare la sua lunghezza, quindi,
  2. dividere ciascuno dei suoi (xy o xyz) componenti per la sua lunghezza ...
39

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.

+1

La normalizzazione ha davvero senso per un singolo valore. Questo è ciò che fa (x). – Jessy

+0

@Jessy Giusto abbastanza, ma è molto meno interessante/confuso del caso 3-vector. – benzado

+0

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