2010-09-05 10 views
6

Juego con sombreadores de iluminación por píxel y no sé una cosa: ¿Qué es un medio vector de fuente de luz?¿Qué es un medio vector de luz en GLSL?

vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz); 

me gustaría que se puede explicar en filas de matemáticas, matemáticas entiendo mejor que las palabras :)

Respuesta

6

Desde this post:

Un "vector a mitad de camino" (si usted se refiere a que por "medio vector") es el vector unitario en el medio ángulo entre otros dos vectores. Normalmente, el vector medio camino [...] se calcula entre el vector para el espectador v y la fuente de luz L:

h := (v + l)/|| v + l || 

El medio vector, por tanto, es la unidad angle bisector de vector vista- y la luz.

Editar: Para una explicación completa del modelo de iluminación incluyendo el medio de vectores, simplemente ver el Blinn-Phong wikipedia article

+0

¿es esto realmente correcto? si v es {0,5} y l es {2,0}, entonces el ángulo entre hyv es ~ 21 grados y el ángulo entre h y l es ~ 69 grados. suponiendo que (v + l) es {2,5} y || v + l || es Sqrt [29] – ColacX

+0

Creo que v y l se suponen normalizados aquí. – jgon

2

La respuesta de Dario es correcto, pero ya que la pregunta era para GLSL, aquí está el código apropiado :

vec3 hf = normalize(v + l); 

En general, el medio vector "THE" es el vector entre la luz y el vector de vista. Generalmente se usa como entrada al bit especular de las ecuaciones Blinn-Phong.

-2
vec3 halfVector = normalize(lightDirection + viewDirection); 
Cuestiones relacionadas