Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Frustum culling

Iniciado por Whoiam, 14 de Diciembre de 2002, 06:34:26 PM

« anterior - próximo »

_Grey

                                Bueno, yo no e escaneado ningun libro pero tengo aqui un .pdf que esta bastante bien, como no recuerdo la dire os lo pongo aqui:

http://enigsoft.en.eresmas.com/fustrum.pdf

puede parecer algo complicado pero en los apendices podreis encontrar la implementacion, tanto para OpenGL como para Direct3D.

Saludos.                                

Loover

                                No va el link... ni siquiera poniendo frustum ;)                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_Grey

                                Jope!! que fallo de tonto muy tonto que he tenido...

probar este:

http://enigsoft.en.eresmas.com/FUSTRUM.pdf                                

Loover

                                anda! no se me ocurrio ponerlo en mayuscula. Este si rula! gracias :)                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Whoiam

                                Muchas gracias _Grey.          :)


Varios temas mas... ...no se si poner un nuevo post. Vosotros opinareis, si creeis que debe estar como nuevo topic.


Referente al frustrum culling ,quiero decir varias cosas. Siempre que miro revistas hablan de targetas que hacen la ostia poligonos por segundo. Weno, yo tengo un p4 512DDR con un Riva TnT2 32MB, ok.. ...pues pq si cojo y dibujo 1000 triangulos en pantalla a 1024x768, posicionados aleatoriamente ( sin texturas, ni nada ), ma bajan los frames hasta 20 o menos. Pq cuando utilizo el Frustrum Culling solo gano 2 frames, en teoria deberia ganar muchisismos, puesto que = solo paso al render 100 de los 1000.  En cambio si me alejo bastante y dibujo todos los triangulos mejoro ostensiblemente el rendimiento, tiene menos superficie para dubujar. En culaquier caso creo que hay algo que se me escapa.


Otra Cosa. ¿ No os parece que necistariamos algun server donde almacenar la información que vamos recopilando ? Docs, páginas interesantes, etc, etc
No se desde el punto de vista legal de copyrigths si es viable el tema para Stratos. Pero estaria bien que se hiciera, no con el animo de plagiar, si no el de aprender. Por ejemplo, que opinamos que el tutorial de NeHe de cargar un MOD esta mu bien... ...Ok... pues nos lo descargamos lo comentamos lo intentamos mejorar y lo guardamos en un sever, de forma que tengamos acceso a todo esto. Evidentemente ofreciendo a quien acceda al server para descargase algo, la funte de donde fue extraida.

Incluso podriamos hacer CD's descargables, vamos como la MSDN, pero de programacion 3d. Creo que si ordenamos la informacion, sera mas rápido que quien quiera aprender aprenda.

A ver que os parece. Solo son ideas.

Gracias.                                

Degiik

                                Me parece un gran idea  :D  :D  :D  :D                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

Repoker

                               
Citar

Pq cuando utilizo el Frustrum Culling solo gano 2 frames, en teoria deberia ganar muchisismos, puesto que = solo paso al render 100 de los 1000.


Bueno, eso depende de la técnica que uses para el frustrum culling :) te cuento mi experiencia:

Experimentando con height maps se me ocurrio la brillante idea de probar hasta donde podia llegar la potencia de mi recien adquirida GF4 ti4200. Pues me hice un algoritmo que hacia render "a saco" de toda la malla con display lists y otro que usaba frustrum culling chequeando triángulo por triángulo si estaba o no dentro del frustrum. Aqui tienes los resultados:


                                        Display lists(a saco)     Frustrum Culling

Malla 100x100 (20mil triangulos):75-80 fps      40-45 fps

Malla 200x200 (80mil triangulos):75-80 fps      10 fps

Malla 300x300 (180mil triangulos):70-75 fps      1-5 fps

Malla 400x400 (320mil triangulos):45-55 fps      XXX

Malla 500x500 (500mil triangulos):35-40 fps      XXX

Malla 600x600 (720mil triangulos):25 fps      XXX


Como puedes ver, a mi algoritmo de frustrum culling le falta bastante por pulir :)                                

BeRSeRKeR

                                Jeje, ese PDF es el mismo que puse yo 4 posts más arriba...  :loco:                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

jpastor

                                Eso te pasa por ponerlo escondido.  :jaja:                                

Whoiam

                                Repoker... Cuando hablas de Display List te refieres a utilizar glGenLists,glCallLists... etc o bien a utilizar VERTEX_ARRAYS.

   
               l=glGenLists (1);
               glNewList (l,GL_COMPILE);
   glBegin(GL_TRIANGLES);
   for (i=0;i      {
      glColor3ub (rgb[0],rgb[1],rgb[2]);
      glVertex3f (xyz[0],xyz[1],xyz[2]);
      glVertex3f (xyz[0]-5,xyz[1]-5,xyz[2]);
      glVertex3f (xyz[0]+5,xyz[1]-5,xyz[2]);
      }
   glEnd();
   glEndList();



y despues lo llamo a    glCallList (l); desde la funcion del render... ...pues bien no gano frames LOS PIERDO!!! AGHHHH!!!

P.D: De todas formas... ...con 1000 triangulos 20 frames ? tan mala es la Riva TNT 2 ?                                

CoLSoN2

                                joder repoker, checkear cada triangulo con el frustum...

normalmente se divide la malla (octrees,etc) y entonces compruebas cada cubo-division, que puede contener que se yo, 500 polys...

evidentemetne, si compruebas cada triangulo, lo que ganas de render lo pierdes muchisimo mas por cpu                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Loover

                                ¿Cada uno de esos cuadros del octree debería ser un display list?
Lo digo pq se ganaría velocidad pero implicaría que los mapas fueran estáticos... es decir, no podríamos hacer que las montañas crecieran... o se generara un hueco al estilo worms. Depende de que tipo de juego quieras hacer.
¿Cómo lo haceis vosotros?

Otra pregunta:
¿La única forma de aprovechar el T&L con OpenGL es usar display list? ¿Hay otros métodos?                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

CordayUK

                                hola a tod@s, hacia bastante que no posteaba al foro O:)

sobre lo del frustum culling, primero lo de que bajen o suban los FPS no es del todo cierto, DirectX ya hace por si solo frustum culling, solo renderea lo que ve la camara, por supuesto. Asi que te da lo mismo decirle que pinte 100 que 1000 porque la diferencia va a ser poca.
Ahora, el furstum culling si que te va a dar mas velocidad a la hora de trabajar con tu escena. Todos los poligonos, objetos, etc que no esten en el frustum culling no hace falta que los actualices cada frame, ni mires colisiones, ni por supuesto mandarlos a renderizar.

como calcularlo, el post que he visto antes creo que lo explicaba, pero no lo he mirado bien, si eso envio yo mi codigo.
Basicamente creas un cubo normalito de 1x1, y le aplicas una matriz resultante de multiplicar la vista y la proyeccion. Vista para orientar el cubo hacia donde mire la camara, y proyeccion para hacerlo en 3D, el cubo original se transformara en una piramide donde la punta esta justo donde estas tu, y la base en el horizonte, alla donde este el limite de lo que dibujas. Una vez calculado este cubo, creas 6 planos (arriba, abajo, derecha, izquierda, cerca, lejos) (puedes crear un plano a partir de 3 puntos, asi que coge cualquiera de los 4 puntos de cada cara del cubo para ello) y despues para saber si algo esta dentro o fuera del cubo calculas la distancia desde el centro del objeto a cada uno de los planos, segun si es positivo o negativo estara a un lado del plano o al otro. En el momento que este test falle para cualquiera de los planos el objeto esta fuera del frustum.

basicamente este es el proceso, hay muchos tutoriales que explican esto pero casi todos son para OpenGL, no he encontrado nada para DirectX.
mira en gamedev.net que hay varios articulos sobre esto. :)

En cuanto a los libros, los de Game Programming Gems (corregirme sino) creo que ninguno habla del frustum culling, pero los de Game programming series hay uno que si: http://www.amazon.co.uk/exec/obidos/ASIN/1...8703436-8406836

te puedo enviar codigo fuente si quieres sobre frustum culling y octree pero son en OpenGL.

salu2                                

Whoiam

                                OpenGL Roolz...  Corday UK

pero pq me bajan los frames cuando utilizo Display Lists ?                                

CordayUK

                                lo de las display list no lo se muy bien, no controlo mucho el OpenGL la verdad.

pero puede ser porque chequeads si cada vertice esta en el frustum, en vez de ello utiliza simplemente una bounding sphere, asi solo compruebas un punto y el radio. Para el terrreno no puedes usar bounding sphere, pero si octree. el centro del cubo te puede servir tambien para mirar si un nodo esta o no dentro del frustum.
Yo en concreto no me preocupo de dividir cada nodo con el frustum culling etc, con tal de que este un poquito dentro del frustum ya lo rendereo, la diferencia no es mucha. :)

general sobre frustum culling
http://www.gamedev.net/reference/programmi...atures/culling/

codigo fuente frustum culling en OpenGL
http://www.gametutorials.com/download/Open...Culling_OGL.zip                                






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.