[Python-es] Framework Nabla para aplicaciones OpenGL
Juan Pablo Isler
lighther en gmail.com
Sab Ago 28 22:42:28 CEST 2010
Estimado, por lo que leí es justamente lo que deseo aprender ajajaja, quiero
hacer una especie de reproductor multimedia que controle video, orden y
tiempos de muestra para fotos y con una GUI atractiva, con ventanas que
giren y que se acerquen o se alejen, etc. tal véz estas herramientas me sean
las indicadas, puesto que hice esto con pyQt y la verdá es que le faltaba
más dinamismo a la cosa (esto hace ya 2 o 3 años).
Trataré de probar el asunto, en unos dias más ya que estoy hasta el cuello,
pero me interesa bastante el tema. (Y debo recordar algo de Python joajoa)
Saludos!!!!
Atte. Juan Pablo Isler
2010/8/28 Txema Vicente <txema en nabla.net>
> Buenas.
>
> Estoy cocinando una cosa y voy a soltaros un paquete terrible sobre OpenGL
> e interfaces de usuario, a ver que opinais los que os interese el tema.
>
> Al final están todos los enlaces, el [2] es una captura de pantalla para
> ver de que estoy hablando.
>
> *Antecedentes:*
>
> Lo cuento por justificar la decisión de crear el proyecto, se puede omitir
> tranquilamente.
>
> Hace tiempo me pidieron una aplicacion que moviera imagenes sobre un
> videowall de cuatro proyectores, y eso ha derivado en una libreria que
> publicaré en un par de meses bajo licencia tipo BSD.
>
> Si hay que mover imagenes con la mayor suavidad posible, la primera
> decision fue fácil: aprender OpenGL.
> La segunda decision, en que lenguaje se hace, ya no es tan fácil, si lo es
> decir que por supuesto en C++, pero yo no me atrevo.
>
> Asi que alla por 2005 descubrí python, y con él pygame, pyOpenGL y
> finalmente pyglet, que aún era beta pero prometía. De esta batalla salió un
> claro vencedor: pyglet. Casi todo el API OpenGL al descubierto, soporta
> multiples pantallas, sonido y video. Y no va nada mal para ser interpretado.
>
> El fallo catastrófico es que no hay GUI. Todo se hace a mano. Supongo que
> es por esto que no se ven muchas aplicaciones hechas con pyglet, está muy
> bien para hacer juegos sencillos o pruebas de concepto, pero como necesites
> sacar un dialogo para abrir un archivo, simplemente no hay. En la lista de
> pyglet se ve que hay gente que lo quiere usar con librerias como wxWidgets,
> pero no parece que les vaya muy bien. Otros se han hecho sus propios GUI
> Toolkit, pero son muy ligeritos y no valen para lo que yo necesito. Necesito
> in GUI Toolkit que tenga de todo, me da igual que penalize el rendimiento
> mientras se ve, si oculto no lo hace.
>
> En la primera versión de la aplicación, intenté separar el módulo GUI para
> que sirviera para otras cosas, pero al final no pudo ser. Se hizo funcionar,
> pero el GUI acabo siendo un engendro incrustado por las malas dentro de un
> bucle principal personalizado de pyglet 1.0. Tan modificado que ya no valia
> para pyglet 1.1
>
>
> *El proyecto Nabla Framework:*
>
> Hace ya 7 meses empece de cero otra vez, para hacer un GUI reutilizable,
> esta vez usando la API de pyglet [1] al pie de la letra. Y ya se puede
> probar [3], de hecho he acabado haciendo más cosas de las que planeé. El
> paquete se divide en tres submodulos, con la idea de que se pueda usar sólo
> el GUI sin necesitar los demás.
>
> - nabla.gui: el GUI, basicamente proporciona un objeto "Overlay" sobre el
> que se dibujan Widgets.
> - nabla.geo: un modulo para graficos en "dos dimensiones y media". Organiza
> los planos, y permite seleccionar puntos. Necesita OpenGL 2.0+
> - nabla.app: un esqueleto ampliable "Application" que maneja las dos capas
> anteriores, las ventanas y sus cámaras.
>
> De momento estoy centrado en nabla.gui, que en resumen tiene:
>
> - Un sistema de colocación al estilo de Tkinter, a base de celdas y modos
> "sticky".
> - Una forma de construir widgets, ampliando el genérico "Control"
> - Un conjunto de widgets hechos (van mas de 40): Label, Image, Button,
> ListBox, ComboBox, Window, Tabs, Menu...
> - Dialogos estándar: MessageBox, InputBox, FileOpen, FileSave...
> - Esqueletos de miniaplicaciones: Explorer, Viever, Player, Notepad...
> - Administrador de ventanas sencillito.
> - Consola interactiva.
>
>
> *Las posibilidades:*
>
> El GUI se conecta al sistema de eventos de pyglet y se dibuja en un único
> batch, deberia poderse usar el modulo nabla.gui junto con cualquier otro
> framework o programa hecho sobre pyglet.
>
> Sobre la manera en que está hecho, hay buenas y malas noticias. La mala es
> que se puede optimizar mucho, ahora hace más cambios de estado OpenGL de los
> necesarios para que funcione. La buena es que así sería muy fácil
> convertirlo en un GUI tridimensional, incluso con perspectiva, iluminación o
> lo que se quiera. El código de picking necesario está hecho en nabla.geo.
> Resumiendo, es un GUI dibujado sobre un plano que casualmente coincide con
> la pantalla, pero no tiene por qué coincidir.
>
> Algunas de las cosas para las que puede servir que se me ocurren:
> - Pizarras interactivas,
> - Editor GLSL en tiempo real.
> - Editor de GUI para hacerlos en plan visual, incluso se podria llegar a
> hacer un IDE.
> - Livecoding, algo como Fluxus [5].
> - Hacer un sustituto de nabla.geo que use pyODE [6].
> - Soporte de Wiimote, o multitactil tipo J. Lee. [7]
>
>
> *Comentarios:*
>
> Soy autodidacta, cabezón y encima vasco, aprendí con un Spectrum, luego
> unos años oscuros de VB6, y otros muchos con PHP. Digo esto porque soy
> consciente de que tengo malos vicios: hay muchas cosas de mi código que no
> siguen las buenas costumbres, reinventan la rueda o están hechas muy a lo
> bestia, pero lo voy puliendo.
>
> Si teneis un ratito para probarlo, aun no está acabado, pero sinceramente
> necesito comentarios y ánimo, es muy dificil explicar a la gente porque
> estás perdiendo el tiempo dibujando botoncitos cuando ya hay hechos (no en
> mi contexto OpenGL, coño!). A mi me sirve para lo que quiero, pero me cuesta
> mucho documentarlo en inglés, y necesito saber que no estoy hablando con la
> pared: no se si merece la pena si no hay gente que lo vaya a usar.
>
> Gracias por tu atención.
> Saludos.
>
>
> *Enlaces*
>
> Esto no es una "release", aún no esta terminado. Sólo lo he probado en Win,
> pero deberia funcionar en Linux y Mac, espero confirmación o algún
> traceback.
>
> Necesita pyglet instalado para funcionar:
> [1] http://www.pyglet.org/download.html
>
> Captura de pantalla:
> [2]http://www.nabla.net/lab/nabla-test.jpg
>
> Programa de prueba:
> [3]http://www.nabla.net/lab/nabla-test.zip
>
> Documentacion API (en construcción):
> [4] http://www.nabla.net/lab/nabla-api/
>
>
> Otros:
> [5] http://www.pawfal.org/fluxus/
> [6] http://pyode.sourceforge.net/
> [7] http://johnnylee.net/projects/wii/
>
> Además:
> Un Widget sencillo:
> http://www.nabla.net/lab/nabla-api/nabla.gui.widget.Label-class.html
>
> Un Widget complicado:
> http://www.nabla.net/lab/nabla-api/nabla.gui.widget.TreeFolder-class.html
>
> Páginas de API interesantes:
> http://www.nabla.net/lab/nabla-api/nabla.gui-module.html
> http://www.nabla.net/lab/nabla-api/nabla.geo.space.Space-class.html
> http://www.nabla.net/lab/nabla-api/nabla.app.Application-class.html
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100828/6caa0997/attachment.html>
Más información sobre la lista de distribución Python-es