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

                                Mis esperiencias son de DirectX no de OpenGL que hace tiempo que no lo toco, pero si os puedo contar que a mi tambien me perdia fps usando el frustum culling, pero la cuestion es saber como usarlo.

Evidentemente calcular poligono por poligono es un gran error, hay que dividir el gran objeto que es el escenario en trozos "de tamaño moderado", si usas distintos vertexbuffer (hablo de DirectX) tambien perderas tiempo tontamente, cuando se trata de un objeto como un personaje, nada de dividirlo en trozos, calculas todo ese objeto si esta o no dentro de la vista (aqui si que ganareis tiempo,seguramente).

Whoiam , como ya e dicho hace tiempo que no toco OpenGL pero parece que la gente hoy en dia le da mas a los VERTEX_ARRAY que a las listas, en fin si algien lo puede comfirmar.........?

Loover , cuando tienes T&L siempre se usa, es decir envias el vertice y OpenGL lo pasa por la matriz de mundo y las que haga falta, indistintamente de usar listas o no, pero usando listas o VERTEX_ARRAY le pasas los vartices mas rapidamente que haciendo un bucle con un monton de glVertexXX(), pero cuando lo trasforme por las matrizes de mundo y todas las demas usara T&L................... a no ser que este desactivado,claro.

CordayUK ,lo de que DirectX hace frustum culling por si solo es una afirmacion gratuita, evidentemente no pinta los poligonos que estan fuera de la camara, pero nada mas.Las colisiones y demas cosas se tienen que seguir calculando aun que no salgan por el frustum, aun que no se vea "el malo siguira moviendo".

BeRSeRKeR , no te estrañe que me dieras tu mismo la url de ese .pdf, pero no se cual es y no lo encuentro, por eso lo e colgado por ahi.

Saludos.                                

CordayUK

                                te doy la razon, he sido un poco bestia al decir que el directx ya hace frustum culling por si mismo :)
lo que queria decir es que al final no va a renderear mas que lo que ve la camara, la velocidad se gana no en que no tenga que "renderear" literalmente los objetos, sino en que ni siquiera los mandas a renderear.                                

Repoker

                                Whoiam:

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

Me refiero a lo primero, genlist y luego callList.

Colson:

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

Ya ya coño XD no tengo implementado ningun algoritmo para reducir el nº de triangulos a chequear, tenia pensado usar quadtrees o octrees :P pero todavia no lo tengo hecho.

Arras !                                

Whoiam

                                pues joder, a mi las Display List no me mejoran el rendimiento :( :( :(
y a ti el rendimiento es bestial cuando le pones listas :( :( :(

vaya kk                                

Loover

                                ¿Whoiam la prueba la hiciste con un único triángulo o con pocos? Para que se aprecie una mejora deben ser muchos los que mandes a la tarjeta. Prueba a renderizar una fase completa del quake 3 por ejemplo... la diferencia es casi del doble de fps

Otra cosa, leo muchas veces que el glDrawElements es más rapido que mucha ordenes glvertexf... eso es cierto SOLO cuando estan fuera de un display list. Si las utilizas dentro de un display list se renderizarán ambas igual de rápidas, porque ya pasarán a otra estructura bien diferente almacenada a ser posible en la memoria de la tarjeta.

Grey_:
No estoy seguro de lo que dices del T&L, lei hace tiempo en un foro en ingles... lo he vuelto a buscar pero no lo encuentro... gente que preguntaba como explotar el T&L de las tarjetas actuales en OpenGL; y no se cansaban de repetir que usando display lists y que no se podía desactivar.                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Repoker

                               
Citarpues joder, a mi las Display List no me mejoran el rendimiento :( :( :(
y a ti el rendimiento es bestial cuando le pones listas :( :( :(

Bueno, parece muy bestia porque la otra manera (frustrum) esta mal hecha. En realidad no es tanta la diferencia, si hago una comparación entre display lists y normal (gltriangle etc.) ya posteare ..                                

deadLock++

                                En constestación a CordayUK:

Es cierto que finalmente tanto DirectX como OpenGL realizan un clipping de la escena. Sin embargo para ganar velocidad lo mejor es eliminar la renderización del vértice lo mas tempranamente posible del pipeline.

Es decir, el clipeo y escalado se realiza al final de este pipeline, pero antes multiplicaste cada vértice por las tres matrices (de mundo, de vista y de proyección), hay que tratar de procesar la menor cantidad de vértices que finalmente no se renderizarán.

Es díficil que esto lo implemente una librería como DirectX y OpenGL ya que quien tiene conocimiento del dominio del problema es el programador y no la librería. Tú a lo mejor sabes que cierto objeto no es necesario dibujarlo en un determinado momento pero DX no lo sabrá hasta no incorporarlo y proyectarlo al mundo con el mismo tipo de coordenadas que el resto de los objetos.                                

Repoker

                                El en **** clavo tio.                                

CordayUK

                                tienes razon. que carajo!  :D                                

Whoiam

                                mmm para el frustrum culling utilizo una funcion que le paso 1 punto (xyz) y me determina si ese punto se encuentra dentro del frustrum...

Por consiguiente, si tengo triangulos en mi escena le paso los vertices de los tres triangulos y si con esa funcion me dice que hay alguno dentro, dibujo el rectangulo.

...pero puede darse la circumstancia que tenga en pantalla...  :-?

alguna idea  :idea:  :idea:  :idea:                                

CordayUK

                                para que el triangulo este fuera del frustum todos los vertices han de estar fuera pero al mismo lado del plano del frustum, en el caso que tu dices cada uno tiene diferente signo no?                                

Whoiam

                                mi funcion solo devuelve true o false... :(

voy a cambiar e implementar una que me diga por que lado ha salido fuera. ;) asias.                                






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.