Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Generación de frustum a partir de portales en 3D

Iniciado por jal, 16 de Junio de 2003, 02:44:55 PM

« anterior - próximo »

jal

                                Buenas a todos y a todas, después de buscar por internet y no encontrar  acabé implementando un algoritmo para generar frustums a partir de portales pero existen una serie de bugs que no consigo hacer desaparecer.

Quizas exista un alma caritativa que sepa decirme la implementación de escuela de este algoritmo.


Un saludo y gracias a todos, todos.                                

Minos

 Creo que lo que buscas es la interseccion de portales con el frustum para generar otro frustum, este tema viene ligeramente (pero de manera muy clara) explicado en el libro Core Techniques.

Un enlace que te puede ayudar http://gamecode.tripod.com/tut/tut06.htm

Mars Attacks

 ¡Frustrum! Cómo me mola esa palabra :D Suena como a Frostis o al sistema "no frost", o a frustrarse. Podría pasar hasta como encantamiento de Harry Potter

Malfoy: - ¡Expeliarmus!
Potter: - ¡Frustrum!

La pastilla. Ñam.

Pogacha

 En mi motor hago esto:

Tengo el frustrum de la camara y la region inicial.

Render_Sector(frustrum *f)
{
 Para cada portal
{
    Portal *p=  f->Crear_Portal_Cortado_Con_Frustrum(portal);
    if(p->Area!=0)  // por decir algo, p->Vertices > 2 o ...
          Render_Sector(p->Crear_Frustrum(f->Origen));
    delete p;
}
}

vincent

 En el libro Real Time Rendering también lo explican bastante bien.

Lo que tienes que hacer es proyectar tu frustum en pantalla, crear la bounding box 2D de la proyección, y utilizar estos puntos para crear el nuevo frustum. Es mucho más rápido que empezar a hacer cálculos en 3D.

VinCenT.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Haddd

 Nosotros probablemente utilicemos Querys. Permite que los portales sean de cualquier forma. Pero todavía no lo hemos implementado.

Pogacha

 Sobre proyectar, mmmm..., no siempre quiero saber que es lo que ve el player unicamente.

CitarQuerys
No se lo que son, puedes introducirme en el tema? (con un link sobra)

Seran los oclusion querys?, intentas dibujar el portal y si se  dibujan 0 pixel no entras?
Saludos

Haddd


vincent

 Las occlusion queries van bien, como has dicho, pq te permiten tener cualquier tipo de portal, pero tienen su punto flojo en que són más lentas, pues has de tirar cosas por el bus i dp recoger la info. A parte, si algún colega tiene por debajo de una GeForce3, pues no podrá ejecutar tu motor...

Eso si, són muy fáciles de implementar.

Taluego!

VinCenT.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Haddd

 Cierto, son lentas. Pero puedes dedicar ese tiempo a hacer otras cosas... ;)  

vincent

 jejeje cierto. Pos pa'lante y ya contaras como te ha ido... y en que gastas ese tiempo!!

Taluego!

VinCenT.
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha

 Yo no he podido ver el paralelismo, no hay forma!,  mando a dibujar un triangulo intercalado con determinar la visibilidad de la proxima luz (por ejemplo) y no consiguo ningun aumento de la velocidad, será que si no usas el glFlush() el paralelismo se consigue automaticamente en opengl?

En un pentium 3 750 con escenas de 600 portales vivos (o sea visibles por la camara o las luces) utilizando el sistema de cortes de portales es mas rapido que teniendo grandes triangulos con muchos objetos por sector. Comprobado empiricamente!.

Saludos

BeRSeRKeR

 Tal vez se podría hacer el clipping por hardware a través de los User Clipping Planes pero los veo poco flexibles en este caso, sobre todo  teniendo en cuenta que (si no recuerdo mal) se consume una unidad de textura por clipping plane que se active, de forma que el número de aristas por portal estaría algo limitado. :)

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Haddd

 Nosotros utilizamos esta lógica para renderizar:

Renderizamos con un pixel shader de ambiente para que la Z se asigne al valor que corresponda.

Para cada objeto
  Para cada luz
     Comprobamos si la query ha terminado y si ha terminado comprobamos si el nº de pixels es 0, con lo      cual podemos dejar de procesar más luces para este objeto
     Renderizamos lanzando una query(Sólo la 1ª vez)


Pues SIEMPRE es más rápido NO comprobar la query y CASI nunca llega a terminar ninguna Query.

Así que parece que las querys no son muy útiles. Sin embargo, te diré que nosotros no utilizamos muchos polígonos, abrá que ver con un nº mayor si le da tiempo. Seguimos trabajando en ello y te daremos más conclusiones cuando las tengamos.




Pogacha

 No termino de entender ...
Cuantas querys se pueden mandar a la vez?








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.