Universidad de - Escuela Superior de Informática (UCLM ...

Universidad de - Escuela Superior de Informática (UCLM ... Universidad de - Escuela Superior de Informática (UCLM ...

12.07.2015 Views

Módulo de procesamientoCAPÍTULO 5. ARQUITECTURA DE ATRAVELÁrea de ColisiónBounding boxclave ABounding boxclave BZYXFIGURA 5.4: Representación de colisión de dos bounding box (ver en Anexo B imagen a color).El pseudocódigo de la función de colisión es:Algoritmo 4 Calcular la existencia de colisión entre dos BBEntrada: Dado dos bounding box B1(V 0,V 1,V 2,V 3,V 4,V 5,V 6,V 7) yB2(V 0,V 1,V 2,V 3,V 4,V 5,V 6,V 7). Cada vértice es un punto en el espacio 3D dela forma V = (V x ,V y ,V z ).Salida: cierto si existe colisión y falso si no existe colisión.Obtener el valor mínimo del eje de coordenadas X de B1, min x .Obtener el valor máximo del eje de coordenadas X de B1, max x .Obtener el valor mínimo del eje de coordenadas Y de B1, min y .Obtener el valor máximo del eje de coordenadas Y de B1, max y .Obtener el valor mínimo del eje de coordenadas Z de B1, min z .Obtener el valor máximo del eje de coordenadas Z de B1, max z .Obtener el valor mínimo del eje de coordenadas X de B2, min_x_2.Obtener el valor máximo del eje de coordenadas X de B2, max_x_2.Obtener el valor mínimo del eje de coordenadas Y de B2, min_y_2.Obtener el valor máximo del eje de coordenadas Y de B2, max_y_2.Obtener el valor mínimo del eje de coordenadas Z de B2, min_z_2.Obtener el valor máximo del eje de coordenadas Z de B2, max_z_2.si (max_x < min_x 2 ) ó (min_x > max_x_2) ó (max_y < min_y_2) ó (min_y > max_y_2)ó (max_z < min_z_2) ó (min_z > max_z_2) entoncesdevolver falsosi nodevolver ciertofin si.La funcionalidad de este algoritmo consiste en calcular el máximo y mínimo de cada BBen cada eje de coordenadas. Una vez que se ha obtenido el valor máximo y mínimo de cadacoordenada se realizan las siguientes comprobaciones para conocer si dos BB colisionan.108

CAPÍTULO 5. ARQUITECTURA DE ATRAVELMódulo de procesamiento¿Cómo se se conoce si existe colisión?, se realiza una comparación de los valores máximosy mínimos de cada BB de la siguiente manera. Para cada uno de los valores máximos ymínimos de los ejes se puede establecer que: Si el máximo valor del BB_1 en el eje decoordenadas X es menor que el mínimo valor del BB_2, entonces es imposible que existacolisión entre dos BB (ver figura 5.5).Bounding boxclave ABounding boxclave Ba_x maxb_x minZYXFIGURA 5.5: No existe colisión si a x m ax es menor que b x m in..Al igual que tampoco puede existir colisión entre dos BB si el valor mínimo de Xdel BB_1 es mayor que el máximo valor de X del BB_2. Se puede ver un ejemplo en lafigura 5.6.Bounding boxclave BBounding boxclave Ab_x mina_x maxZYXFIGURA 5.6: No existe colisión si a x m in es mayor que b x m ax.De la misma forma ocurre con los dos ejes restantes tanto con Y como con Z. Ya quesi se el valor máximo de Y perteneciente al BB_1 es menor que el valor mínimo en Y delBB_2 es imposible que exista colisión. Al igual que ocurre si el valor mínimo de Y del109

Módulo <strong>de</strong> procesamientoCAPÍTULO 5. ARQUITECTURA DE ATRAVELÁrea <strong>de</strong> ColisiónBounding boxclave ABounding boxclave BZYXFIGURA 5.4: Representación <strong>de</strong> colisión <strong>de</strong> dos bounding box (ver en Anexo B imagen a color).El pseudocódigo <strong>de</strong> la función <strong>de</strong> colisión es:Algoritmo 4 Calcular la existencia <strong>de</strong> colisión entre dos BBEntrada: Dado dos bounding box B1(V 0,V 1,V 2,V 3,V 4,V 5,V 6,V 7) yB2(V 0,V 1,V 2,V 3,V 4,V 5,V 6,V 7). Cada vértice es un punto en el espacio 3D <strong>de</strong>la forma V = (V x ,V y ,V z ).Salida: cierto si existe colisión y falso si no existe colisión.Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas X <strong>de</strong> B1, min x .Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas X <strong>de</strong> B1, max x .Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Y <strong>de</strong> B1, min y .Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Y <strong>de</strong> B1, max y .Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Z <strong>de</strong> B1, min z .Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Z <strong>de</strong> B1, max z .Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas X <strong>de</strong> B2, min_x_2.Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas X <strong>de</strong> B2, max_x_2.Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Y <strong>de</strong> B2, min_y_2.Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Y <strong>de</strong> B2, max_y_2.Obtener el valor mínimo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Z <strong>de</strong> B2, min_z_2.Obtener el valor máximo <strong>de</strong>l eje <strong>de</strong> coor<strong>de</strong>nadas Z <strong>de</strong> B2, max_z_2.si (max_x < min_x 2 ) ó (min_x > max_x_2) ó (max_y < min_y_2) ó (min_y > max_y_2)ó (max_z < min_z_2) ó (min_z > max_z_2) entonces<strong>de</strong>volver falsosi no<strong>de</strong>volver ciertofin si.La funcionalidad <strong>de</strong> este algoritmo consiste en calcular el máximo y mínimo <strong>de</strong> cada BBen cada eje <strong>de</strong> coor<strong>de</strong>nadas. Una vez que se ha obtenido el valor máximo y mínimo <strong>de</strong> cadacoor<strong>de</strong>nada se realizan las siguientes comprobaciones para conocer si dos BB colisionan.108

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!