inmensia |
Ray Tracing: Cálculo de Intersecciones y Normales
Juan Mellado, 19 Octubre, 2005 - 11:55
Apéndice 1: Matrices de TransformaciónMatriz de Traslación por las componentes de un vector T = (tx, ty, tz):
Matriz de Escalado por las componentes de un vector S = (sx, sy, sz):
Matriz de Rotación de un ángulo a sobre el eje X:
Matriz de Rotación de un ángulo b sobre el eje Y:
Matriz de Rotación de un ángulo c sobre el eje Z:
Inversa de Matriz de Traslación por las componentes de un vector T = (tx, ty, tz):
Inversa de Matriz de Escalado por las componente de un vector S = (sx, sy, sz):
Inversa de Matriz de Rotación de un ángulo a sobre el eje X:
Inversa de Matriz de Rotación de un ángulo b sobre el eje Y:
Inversa de Matriz de Rotación de un ángulo c sobre el eje Z:
Apéndice 2: Coordenadas HomogéneasA pesar de que todos los cálculos vistos hasta ahora han operado con vectores de tres dimensiones, todas las matrices del apartado anterior son de tamaño 4x4. Esto es así para permitir el uso de coordenadas homogéneas. Las coordenadas homogéneas añaden una nueva componente a los vectores que permiten distinguir si un vector concreto representa un punto o una dirección, de forma que con este sistema de coordenadas los vectores se expresan con cuatro componentes en vez de tres: (x, y, z, w). Esta cuarta componente toma valor 1 para los vectores "punto" y valor 0 para los vectores "dirección", aunque normalmente no se escribe, se sobreentiende su existencia. La utilidad principal de esta nueva componente es permitir tratar de una manera homogénea todos los vectores, independientemente de lo que estos representen, siendo su mayor virtud la de lograr que las operaciones de traslación sólo se apliquen a los puntos y no a las direcciones. Veamos esto con un ejemplo. Sea P un vector "punto": P = (px, py, pz, 1)
Y sea P' el resultado de aplicar la matriz de traslación T al vector P: P' = P * T = (px', py', pz', pw')
px' = px*1 + py*0 + pz*0 + 1*tx = dx + tx
py' = px*1 + py*0 + pz*0 + 1*ty = dy + ty pz' = px*1 + py*0 + pz*0 + 1*tz = dz + tz pw' = 0*0 + 0*0 + 0*0 + 1*1 = 1 P' = (px + tx, py + ty, pz + tz, 1)
Como se observa, el punto resultante se ve afectado por la traslación y se conserva el valor original de la cuarta componente. Veamos ahora el ejemplo contrario. Sea D un vector "dirección": D = (dx, dy, dz, 0)
Y sea D' el resultado de aplicar la matriz de traslación T al vector P: D' = D * T = (dx', dy', dz', dw')
dx' = dx*1 + dy*0 + dz*0 + 0*tx = dx
dy' = dx*1 + dy*0 + dz*0 + 0*ty = dy dz' = dx*1 + dy*0 + dz*0 + 0*tz = dz dw' = 0*0 + 0*0 + 0*0 + 0*1 = 0 D' = (dx, dy, dz, 0)
Como se observa, la dirección resultante es la misma que la original, no se ve afectada por la traslación. ¿No encontró lo que buscaba?Utilice el buscador para encontrar más páginas en esta web o en toda Internet.Más páginas en esta web sobre RayTracing |