Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





ayuda,¿como acelerar?, 2000 lados y se pone lento.

Iniciado por xeex, 02 de Julio de 2008, 12:18:44 AM

« anterior - próximo »

xeex

hola.
estaba haciendo una esfera en mi programa, bueno, para que esta paresca esfera por lo menos debe tener 8 meridianos y 8 paralelos, es decir, 64 lados,256 vertices(4 vertices por cada lado),768 coordenadas(una coordenada x, y, z por cada vertice).
Bueno la cosa es que una vez hecha la esfera, la meto en un call_list para que la cosa valla mas rapido, pero estoy seguro que el programa podria ir mas rapido.
Cuando muestro al rededor de 1024 lados(que pueden ser lados que forman un volumen, como la esfera antes nombrada o lados solos) el programa se me ve un poco lento, solo un poco, cuando son 2048 lados ya la lentitud se hace muy presente.
Bueno la pregunta es: aparte del unico recurso que conosco y tengo en mi programa, que es meter las figuras o lados a un call_list, ¿que otra solucion tengo para que la velocidad se mantenga?.
Estoy seguro que hay una solucion, ¿o acaso si uno hace un programa, al tener esa cantidad de lados, 2000, ya los programas se empiezan a poner lentos?. En todo caso no creo que sea asi ya que muestro ciertas figuras hechas en "anim8or"(archivos que luego importo a *.OBJ) que tienen una infinidad de lados o caras, y en mi programa se ven de lo mejor(uso glmObject.h).
Bueno, la pregunta es como aparte de los call_list aumento la velocidad de mi programa?, como hago para que cuando muestro una cantidad de 2000 o mas lados este no se ponga super-lento.

Una vez pregunte en otro topico por lo de la velocidad, claro luego lo solucione con el uso de los call_list, pero alguna de las preguntas que me hiso pogacha sirven para este topico tambien.

¿Estas usando aceleracion por hardware?
Res:Si, uso allegro gl y activo la aceleracion por hardware.
¿Estas dibujando lineas en ves de caras llenas?
Res:todas mis figuras y volumenes se basan en caras de 4 vertices en la cual pongo una textura(una texura para cada lado cuando son caras solas, y una textura qu envuelve el volumen cuando son cilindros, esferas, etc).
¿Estas calculando cada elemento en cada frame?
Res:No, solo una vez.
¿Estas usando fan o strips para acelerar?
Res:ESTO NO LO ENTIENDO.:shock: , si me lo pudieran explicar.
¿De cuantos poligonos hablas?
Res:2000 lados, ahi ya se nota la lentitud
¿De cuantos vertices hablas?
Res:2000*4
¿Estas usando vbo para evitar trafico por el canal agp?
Res:ESTO NO LO ENTIENDO.:shock: , si me lo pudieran explicar.
GRACIAS.

Zaelsius

A ver si entendí bien.

Estás usando una DisplayList de OpenGL( glCallList(), ...) que contiene aproximadamente 2000 rectángulos (GL_QUADS), ¿sí?

Eso, aun texturizado y tal, debería ir rapidísimo en cualquier hardware hoy en día. Solo se me ocurre de que te asegures de que realmente se está acelerando por hardware lo que pintas, consultando los valores de retorno de las llamadas de inicialización de Allegro, a ver si se te está escapando alguna error silencioso.


PD: qué mal escribo con "la calor", paso de arreglar los errores xD

xeex

hola,
gracias,
si, tengo por ejemplo una superficie curva que consta de 2048 lados, ahi ya se pone lento. No creo que sea problema de aceleracion ya que como dije , importo un objeto *.obj que creo perviamente en un programa llamado anim8or, este objeto cuenta con, por dar un numero aproximado,
unos 4000 lados. Para cargar este objeto en mi programa uso la libreria
"glmObject.h". La cosa es que este objetos tiene muchas muchas caras y se muestra perfectamente en mi programa, en cambio, el objetos de las 2000 caras que muestro yo se ve lento, bueno es por eso que no creo que pase por un problema de aceleracion.
Ahora, mi pregunta, si no fuese ese el problema, con que otros recursos cuento en openGL para aumentar la velocidad de lo mostrado, aparte de los glCallList.
Es por eso que nombraba lo que alguna ves dijo pogacha:

"¿Estas usando fan o strips para acelerar?"
"¿Estas usando vbo para evitar trafico por el canal agp?"

con que otro metodo se acelera, o pasa solo por aceleracion de hardware y callLists??

saludos.

shash

El código de creación del display list ayudaría a localizar posibles bugs. A parte, que especificaciones tiene la maquina donde estas testeando? En cualquier tarjeta actual puedes lanzar 1M tris mínimo por frame (a 60fps), sin problemas, 2k tris no deberían ir a varios miles de frames por segundo.

Marci

Citar¿Estas usando fan o strips para acelerar?
Res:ESTO NO LO ENTIENDO. , si me lo pudieran explicar.
Se refiere a la manera de dibujar las primitivas en opengl. Cuando vas a dibujar triangulos con vertices en comun, en vez de especificar tres vertices por triangulo solo dibujas el primero especificando tres vertices y despues añades el vertice nuevo (el triangulo ya comparte dos con el triangulo anterior). Los fan son abanicos y los strips son tiras.

Con esto puedes mejorar algo el rendimiento pero no ganarás demasiado.

Citar¿Estas usando vbo para evitar trafico por el canal agp?
Res:ESTO NO LO ENTIENDO. , si me lo pudieran explicar.

Un vertex buffer object es un sistema para almacenar un gran conjunto de vertices y poderlo representar de una forma eficiente con una sola llamada a una funcion. A diferencia de los vertex array en que dichos vertices se guardan en memoria cliente, en los vertex buffer object toda la geometria se almacena en la memoria de la GPU con lo que se consigue una importante mejora de rendimiento al evitar el proceso de intercambiar datos de memoria cliente a memoria de GPU.

Usando VBO si que mejorarás muuucho la velocidad.

marcode

¿no estarás seleccionando una textura o activando estados entre cada dibujado de polígono?
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]

xeex

gracias a todos, estoy revizando y aplicando:
vertex buffer object.

marcode tu te refieres a que si estoy "bindeando" y habilitando las texturas en cada frame?

Prompt

Para saber si está verdaderamente acelerado por hardware y que el cuello de botella no está en CPU solo tienes que ver a cuanto está la CPU de tu proceso en el Task Manager de marras de Windows o Linux.

Si la CPU o % de CPU del proceso es bajo, muy bajo, el cuello de botella no está en CPU sino en GPU. Comprueba eso 1º.

xeex

gracias prompt.
de un 1% uso de cpu pasa a 50%.
jajajaj me imagino que eso es malo,
entonces de cabeza al iniciacion de allegrogl, cuando empeze no le di muxa importancia a eso....
gracias.
lo que no me queda claro es como los objetos obj se me ven tan rapidos, debere revisar esa libreria tambien....

xeex

se me olvido decir que tengo 4 viewports.
pero aun asi no deberia ir tan lento






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.