Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





comprobar visibilidad de un cubo

Iniciado por marcode, 16 de Abril de 2007, 09:40:34 PM

« anterior - próximo »

marcode

¿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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

tamat

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.
Por un stratos menos tenso

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.

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Pogacha

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!

tamat

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.
Por un stratos menos tenso

marcode

size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.