inmensia |
Ray Tracing: Cilindro y Cono
Juan Mellado, 10 Noviembre, 2005 - 21:33
Este artículo muestra las ecuaciones que permiten obtener los puntos de intersección entre un rayo y un cilindro, y entre un rayo y un cono. Adicionalmente, después del estudio de la intersección, se indica como obtener las normales en dichos puntos de intersección. Cilindro y cono se definen de una forma muy similar, motivo por el que se estudian a un mismo tiempo. Para definir un cilidro se necesitan tres parámetros: ubicación, orientación y ancho. La ubicación la determina un punto en el espacio, la orientación un eje (vector) que pasa por el punto de ubicación, y el ancho un radio tomado alrededor del eje. Por su parte, para definir un cono se necesitan también tres parámetros: ubicación, orientación y apertura. La ubicación la determina un punto en el espacio, la orientación un eje que pasa por el punto de ubicación, y la apertura un ángulo tomado en el punto de ubicación alrededor del eje. Tal y como se han definido, estas primitivas tienen una extensión ilimitada, pero en la práctica se suelen acotar superior e inferiormente para dar lugar a objetos finitos cerrados. En este artículo se verá también como tratar estos casos. Intersección con un CilindroLos puntos sobre la superficie de un cilindro, con un eje central definido por el vector unitario L = (lx, ly, lz) que pasa por el punto C = (cx, cy, cz), son aquellos que se encuentran a una distancia r de dicho eje: (x-cx)^2 + (y-cy)^2 + (z-cz)^2 = r^2 + (lx * (x-cx) + ly * (y-cy) + lz * (z-cz) )^2
![]() La expresión canónica se obtiene considerando un cilindro definido por un eje vertical con vector (0, 1, 0) que pasa por el origen de coordenadas (0, 0, 0), y que tiene radio 1: (x-0)^2 + (y-0)^2 + (z-0)^2 = 1^2 + (0 * (x-0) + 1 * (y-0) + 0 * (z-0) )^2
x^2 + y^2 + z^2 = 1 + y^2
x^2 + z^2 = 1
Un rayo puede intersectar con un cilindro en uno o dos puntos de la superficie del mismo. En dos puntos cuando el rayo atraviesa el cilindro, con una intersección de entrada y otra de salida. Y en un único punto cuando el rayo tiene su origen en el interior del cilindro y sólo presenta una intersección de salida, o cuando el rayo es tangente al cilindro, es decir, que lo toca en un único punto de su superficie. ![]() Los puntos de intersección entre un cilindro canónico y un rayo transformado R'(t) = O' + D' * t, de origen O’ = (ox’, oy’, oz’) y vector dirección normalizado D’ = (dx’, dy’, dz’), son aquellos puntos (x, y, z) sobre la superficie del cilindro que verifican la ecuación del rayo: (ox' + dx' * t)^2 + (oz' + dz' * t)^2 = 1
Resolviendo por t: ox'^2 + (dx' * t)^2 + 2 * ox' * dx' * t +
oz'^2 + (dz' * t)^2 + 2 * oz' * dz' * t = 1 (dx'^2 + dz'^2) * t^2 +
2 * (ox' * dx' + oz' * dz') * t + ox'^2 + oz'^2 - 1 = 0 La expresión resultante es una ecuación de segundo grado de la forma: a * t^2 + b * t + c = 0
Donde: a = dx'^2 + dz'^2
b = 2 * (ox' * dx' + oz' * dz')
c = ox'^2 + oz'^2 - 1
Y con dos posibles soluciones para t: t0' = (-b + SQRT(b^2 - 4 * a * c) ) / (2 * a)
t1' = (-b - SQRT(b^2 - 4 * a * c) ) / (2 * a)
Expresiones que pueden simplificarse de igual forma que se hizo con la ecuación de la esfera en un artículo anterior: b = 2 * k, con k = ox' * dx' + oz' * dz'
t0' = (-k + SQRT(k^2 - a * c) ) / a
t1' = (-k - SQRT(k^2 - a * c) ) / a
Si a es cero, o el discriminante (la expresión dentro de la raíz cuadrada) es menor que cero, no puede resolverse la ecuación, no existen soluciones reales, por lo que no se produce intersección. Si el discriminante es cero, entonces sólo existe una solución, el rayo es tangente al cilindro, y puede tomarse t0' ó t1' indistintamente. Por último, si el discriminante es mayor que cero entonces hay dos posibles soluciones, siendo la positiva de menor valor la más cercana al origen del rayo. El valor ti' encontrado, se corregiría, y se aplicaría en la ecuación del rayo para obtener el punto I intersectado: ti = ti' / |D * INV(M)|
I = R(ti)
Página: 1 2
|