[eside-ghost] extensiones C/C++ para Python

altern altern2 en gmail.com
Vie Mayo 2 12:33:40 CEST 2008


Jon Valdés(e)k dio:
> 2008/5/2 altern <altern2 en gmail.com>:
>>  efectivamente en este caso no me sirve de nada pq los objetos pueden de
>> posicion en cuaquier momento. Yo entiendo que lo de las listas tiene sentido
>> en un mundo 3D donde estas moviendo la camara y puede que un objeto pero el
>> mundo en si no se mueve. Pero no estoy seguro. en este caso todo puede
>> moverse asi que no hay ninguna ventaja en usar esto.
> 
> (disclaimer: ahora mismo tengo el teclado en yankee y no puedo poner
> acentos ni enyes)

yo tengo el portatil con teclado ingles y ya me he acostumbrado a no 
poner tildes nunca como ya habreis notado.

> Las display lists se pueden usar aunque los objetos cambien de
> posicion, tamanyo o rotacion. Solo tienes que hacer las llamadas de
> translate, rotate y scale, y luego llamar a la display list. El asunto
> es que para llamar a una display list de un unico poligono, no te va a
> salir rentable hacerlo.
> 
>>  bueno el codigo es medianamente complicado pq es parte de una libreria que
>> gestiona los eventos, abre la ventana ... Os adjunto la parte donde se
>> concentra las funciones OpenGL y la lista del render. Como vereis las
>> funciones son bastante abstractas, puede servir para muchos casos, esto
>> supongo que no es muy adecuado pero la cuestion es que las uso mientras
>> desarollo protopipos y luego una vez tengo todo claro sobre escribo la
>> funcion render de los objetos haciendo las llamadas OpenGL a pelo para sacar
>> mas rendimiento. Creo que este modulo es el que tendria que pasar a C. Por
>> cierto que antes era una clase dentro del modulo graphics.py pero despues de
>> los emails de esta semana se me ocurrio que era mas sencillo tenerlo como un
>> modulo con funciones. Siempre ayuda hablar con otra gente de los problemas
>> de uno, se te ocurren soluciones.
> 
> Mirando el codigo por encima, si que veo un par de cosillas que pueden
> estar dandote problemas.
> 
> Primero: los quadrics, en mi experiencia, son horriblemente poco
> optimos. Recuerdo una libreria que hice que con quadrics iba a 10 fps,
> y despues de reimplementar el dibujado de circulos a mano, iba a 40
> fps. Si tienes muchos objetos de tipo circulo, te recomiendo que
> pruebes a reimplementar el dibujado de circulos usando
> GL_TRIANGLE_FANs por ejemplo, y a ver si mejora.

ahora mismo casi no uso los circulos pero si que esta bien modificarlo 
para el futuro.

> Segundo: Hacer muchas llamadas a glEnable/glDisable se come el
> rendimiento bastante rapido. Una tecnica para mejorar esto es ordenar
> los objetos de forma que todos los que lleven textura (o line stipple,
> o blending, o lo que sea) se dibujen seguidos, sin tener que hacer
> glEnables y glDisables entre ellos. Haces un glEnable antes de dibujar
> el primero, y haces el glDisable despues de dibujar el ultimo. Pierdes
> un poco de cpu al tener que ordenar los objetos, pero si tu cuello de
> botella esta en las llamadas a OpenGL, esto las mejorara bastante.

ya habia leido sobre esto en el redbook. No recuerdo porque no me 
merecia la pena o no me meti a hacerlo. Tendre que mirarlo otra vez a ver.

> De todas formas, esto son palos de ciego porque no he pasado el codigo
> por un profiler. Te recomiendo que lo primero pases el programa por un
> profiler de python, y si te dice que el cuello de botella esta en las
> llamadas a OpenGL, le pases un profiler de OpenGL a ver :)

nunca me he aclarado bien como hacer profile de una aplicacion entera. 
entiendo como revisar una funcion pero no un programa que tiene su 
propio loop. tendre que hacer los deberes.

alguna recomendacion sobre profiles de OpenGL?

gracias por los consejos

enrike


Más información sobre la lista de distribución eside-ghost