Having a good library for computational geometry is very important for me. A year ago I found CGAL and since then I am enjoying it. Sometimes the burden of C++ can be annoying (for rapid prototyping, for example), therefore lately I was trying the Python bindings and trying to get some functions working on GNU Octave ... English Version
Para mi es fundamental tener una buena bilioteca de geometría computacional a mano. Hace un año, laburando en un programita para seguir objetos en videos, me topé con CGAL y desde entonces es mi primera referencia a la hora de programar cuestiones geométricas (mallas, manipulacion de polígonos, etc...). CGAL está escrita en C++ y a veces programar es un poco tedioso debido al caracter declarativo del lenguaje. Por esta razón, últimamente estuve probando la versión para Python y estoy tratando de hacer funciones para GNU Octave (todavía sin éxito) ... versión en Español
En este blog podrá leer los comentarios del autor y ver algunas fotografías de los lugares que visita y los trabajos que realiza. El objetivo: Dejar que los que esten interesados miren. In this blog you will find comments of the author and some pictures of the places he visits and the jobs he is involved. The objective: Those who are interested can watch.
Translate
jueves, 10 de junio de 2010
lunes, 7 de junio de 2010
Blinn-Phong Halfway vector and the parallelogram rule / Blinn-Phong vector a "Mediocamino" y la regla del paralelogramo
Studying for the Computer Graphics final exam I bumped into a simple, but important fact about adding vectors. Is stated everywhere that in the Blinn-Phong reflection model, the angle spanned by the Halfway vector and the normal to the surface (where the reflection is taking place) is the half of the angle spanned by the Viewer (or Eye) vector and the Reflected vector ... English Version
Preparando el examen final de la materia Computer Graphics, me topé con una propiedad relacionada a la suma de vectores que, si bien es básica, no deja de ser importante. En muchos sitos de internet (link? no he visto muchos en Español...habrá que poner en wikipedia...tendré tiempo?) se dice que el vector de "Mediocamino" en el modelo de iluminación Blinn-Phong sustiende un ángulo con la normal de la superfice (donde la reflexión ocurre) que es la mitad del ángulo entre el vector que apunta al observador y el vector que indica la dirección de reflexión de la luz ... versión en Español
Figure 1: Light incident from direction L on a surface with normal N. The light is reflected in direction R and the viewer is pointed by V. H is the Halfway vector.
Figure 2: Addition of vectors using the parallelogram rule. The addition of vectors of arbitrary length does not yields the bisector of the angle. The addition of the normalized vectors produces the angle bisector.
Preparando el examen final de la materia Computer Graphics, me topé con una propiedad relacionada a la suma de vectores que, si bien es básica, no deja de ser importante. En muchos sitos de internet (link? no he visto muchos en Español...habrá que poner en wikipedia...tendré tiempo?) se dice que el vector de "Mediocamino" en el modelo de iluminación Blinn-Phong sustiende un ángulo con la normal de la superfice (donde la reflexión ocurre) que es la mitad del ángulo entre el vector que apunta al observador y el vector que indica la dirección de reflexión de la luz ... versión en Español
La Figura 1 muestra la situación que voy a describir. Un rayo de luz llega, desde la dirección $\hat{L}$, a una superficie con normal $\hat{N}$ y es reflejado en la dirección $\hat{R}$. El modelo trata de aproximar cuanta luz llega a un observador que mira desde la dirección definada por $\hat{V}$. Basandose en el modelo de superficies Lambertianas, la cantidad de luz alrededor de $\hat{R}$ tiene una distribución del tipo coseno y se puede calcular utilizando el producto escalar $\hat{R}\cdot\hat{V}$. El modelo de Blinn-Phong reemplaza esa operación con una aproximacion adicional, utilizando el vector $\hat{H}$ que se conoce como vector de "Mediocamino", \[\hat{H}=\frac{\hat{L}+\hat{V}}{\|\hat{L}+\hat{V}\|}\]. El nombre "Mediocamino" viene del echo que $\hat{H}$ divide el ángulo entre $\hat{L}$ y $\hat{V}$ en dos partes iguales. Es decir, es la bisectriz de ángulo. Ok, hay que notar que para que eso sea verdad, $\hat{H}$ se tiene que calcular con los vectors $\hat{L},\hat{V}$ normalizados. De no hacerlo así se incurre en un error, como se muestra en la Figura 2. La suma de dos vectores de longitud arbitraria es, en efecto, la diagonal del paralelogramo definido por los dos vectores. Sin embargo, la suma de los vectores es la bisectriz del ángulo, solo si los vectores están normalizados (o ambos tienen el mismo módulo).
Figure 1 shows the situation. A ray of light is coming form the direction indicated by $$\hat{L}$$ and it is reflected in the direction $\hat{R}$ at the surface point with normal $\hat{N}$. The model tries to estimate the amount of light that goes towards the viewer (or beholder's eye), pointed by $\hat{V}$. Based on the reflection of Lambertian surfaces, we could calculate that using the dot product $\hat{V} \cdot \hat{R}$. The Blinn-Phong model simplifies the calculations by replacing $\hat{V} \cdot \hat{R}$ with $\hat{N} \cdot \hat{H}$. Where
\[\hat{H} = \frac{\hat{L} + \hat{V}}{\|\hat{L} + \hat{V}\|}, \]
is called the Halfway vector. The name comes from the fact that, as shown in Figure 1, this bisects the rhombus defined by the two normalized vectors $\hat{V}, \hat{L}$.
So far so good. Note that I have explicitly write the vectors with a hat to indicate that they are normalized. If you do not use normalized vectors, the vector you will get $W$ is not a halfway vector anymore. Though it is the diagonal of the parallelogram defined by the not normalized vector $L,V$, it is not bisecting the angle. This is shown in Figure 2.
\[\hat{H} = \frac{\hat{L} + \hat{V}}{\|\hat{L} + \hat{V}\|}, \]
is called the Halfway vector. The name comes from the fact that, as shown in Figure 1, this bisects the rhombus defined by the two normalized vectors $\hat{V}, \hat{L}$.
So far so good. Note that I have explicitly write the vectors with a hat to indicate that they are normalized. If you do not use normalized vectors, the vector you will get $W$ is not a halfway vector anymore. Though it is the diagonal of the parallelogram defined by the not normalized vector $L,V$, it is not bisecting the angle. This is shown in Figure 2.
Figure 1: Light incident from direction L on a surface with normal N. The light is reflected in direction R and the viewer is pointed by V. H is the Halfway vector.
Figure 2: Addition of vectors using the parallelogram rule. The addition of vectors of arbitrary length does not yields the bisector of the angle. The addition of the normalized vectors produces the angle bisector.
Suscribirse a:
Entradas (Atom)