2012-07-25 16 views
32

Actualmente estoy estudiando la iluminación en OpenGL, que utiliza una función en GLSL llamada normalizar. De acuerdo con los documentos de OpenGL, dice que "calcula el producto normalizado de dos vectores". Sin embargo, todavía no explica qué significa "normalizado". He intentado buscar lo que es un producto normalizado en Google, sin embargo, parece que no puedo encontrar nada al respecto. ¿Alguien puede explicar qué significa la normalización y dar algunos ejemplos de un valor normalizado?¿Qué significa normalizar un valor?

+0

¿dónde encontraste eso? En la especificación de glsl existe: normalize (genType x) - Devuelve un vector en la misma dirección que x pero con una longitud de de 1. http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8 .pdf – fen

+0

Aquí, creo que fue lo primero que surgió cuando busqué en Google. http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml – TheAmateurProgrammer

+0

extraño ... pero la descripción es una información adecuada. – fen

Respuesta

13

Es un término matemático y this link explica su significado en términos bastante simple:

Las operaciones en 2D y 3D gráficos por ordenador a menudo se realizan utilizando copias de vectores que se han normalizado es decir. convertido a vectores unitarios ... La normalización de un vector implica dos pasos:

  1. calcular su longitud y, a continuación,
  2. dividir cada una de su (xy o xyz) componentes por su longitud ...
39

Creo que la confusión proviene de la idea de normalizar "un valor" en lugar de "un vector"; si solo piensas en un solo número como valor, la normalización no tiene ningún sentido. La normalización solo es útil cuando se aplica a un vector.

Un vector es una secuencia de números; en gráficos 3D, generalmente es una coordenada expresada como v = <x,y,z>.

Cada vector tiene un magnitud o longitud, que se puede encontrar usando el teorema de Pythagora: |v| = sqrt(x^2 + y^2 + z^2) Esta es básicamente la longitud de una línea desde el origen hasta el punto de <0,0,0> expresado por el vector.

Un vector es normal si su longitud es 1. ¡Eso es todo!

Normalizar un vector significa cambiarlo para que apunte en la misma dirección (piense en esa línea desde el origen) pero su longitud es uno.

La razón principal por la que usamos vectores normales es para representar una dirección; por ejemplo, si está modelando una fuente de luz que está a una distancia infinita, no puede darle coordenadas precisas. Pero puede indicar dónde encontrarlo desde un punto particular usando un vector normal.

+1

La normalización sí tiene sentido por un solo valor. Eso es lo que hace el signo (x). – Jessy

+0

@Jessy Bastante, pero es mucho menos interesante/confuso que el caso de 3 vectores. – benzado

+0

Probablemente. Creo que ayuda a entender el concepto, sin embargo. Por ejemplo, creo que es útil imaginar tomar el producto escalar de un "vector n> 1" normalizado y un "vector 1 normalizado". Puede visualizar cómo las contribuciones de otras dimensiones no afectan el ángulo entre los vectores. Solo importa la dimensión que coincida con el 1-vector. – Jessy

Cuestiones relacionadas