Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: marcode en 16 de Abril de 2007, 09:40:34 PM

Título: comprobar visibilidad de un cubo
Publicado por: marcode en 16 de Abril de 2007, 09:40:34 PM
¿Conocéis alguna función o algoritmo que me permita saber si un cubo está dentro de la cámara?, para el tema de la selección previa al render en octrees.

Ha de recibir la matriz que describe la posición/orientación de la cámara y su fov, y también la posición del cubo y su tamaño.

Ni que decir cabe que ha de ser ultra-rápida.
Título: comprobar visibilidad de un cubo
Publicado por: tamat en 16 de Abril de 2007, 09:48:54 PM
La manera que yo uso es la de hacer los ocho tests de cada vertice del cuadrado con los planos del frustrum, si alguno queda dentro de los 8 planos del frustrum entonces es aceptado.

Pero seguro que hay alguna manera mejor.

Edit: olvidé decir que tienes que sacar los planos del frustum, en internet lo encontraras facilmente.
Título: comprobar visibilidad de un cubo
Publicado por: marcode en 16 de Abril de 2007, 10:43:38 PM
Pues así lo hago yo, pero además de que hago un montón de operaciones ocurre que cuando el frustum lo "atraviesa" por el centro no coge ningún vértice y no lo detecta.

Yo creo que esa función deberá estar ya desarrollada y optimizada de sobra, me gustaría hacer un copy/paste a ser posible pero no sé dónde encontrarla.
Título: comprobar visibilidad de un cubo
Publicado por: Pogacha en 17 de Abril de 2007, 12:08:43 AM
El algoritmo es mas o menos así:

Por cada plano del frustrum empezando por el near y el far y luego los demas en orden indistinto, comparas cada cubo si esta completamente en el lado invisible del frustrum para de esta manera marcarlo como completamente invisible, en caso de no poder demostrarse que esta completamente en algun lado invisible se supondrá visible.

Suponiendo que el cubo sea un AABB solo comparás el vertex mas cercano al plano (piensalo un poquito y veras que es facilisimo, para formar este vertex toma la componente correspondiente del min o el max dependiendo si la componente correspondiente de la normal del plano es + o -)

Esto te sacara los que definitivamente estén fuera del frustrum, pero se te colarán algunos que estén cerca de las esquinas, algunos toman estos y les hacen una revision severa, en mi caso tan solo los dibujaria, total no comerán mucho fillrate ;) y son casos aislados.

Saludos!
Título: comprobar visibilidad de un cubo
Publicado por: tamat en 17 de Abril de 2007, 11:28:00 AM
Cita de: "marcode"Pues así lo hago yo, pero además de que hago un montón de operaciones ocurre que cuando el frustum lo "atraviesa" por el centro no coge ningún vértice y no lo detecta.

Jummm, pues es verdad, no había contado con ese caso, yo solo he hecho pruebas con AABBs de meshes, nunca con AABB tan grandes que puedan englobal el frustum entero.

Supongo que se soluciona garantizando que el frustum nunca cabe dentro de la caja más grande, ajustado el tamaño de dicha caja.
Título: comprobar visibilidad de un cubo
Publicado por: marcode en 17 de Abril de 2007, 12:56:25 PM
voy a ver si lo puedo sacar de aquí.

http://www.cescg.org/CESCG-2002/DSykoraJJelinek/