PyOpenGl o pyglet?


Estoy buscando hacer algunos retoques con OpenGL y Python y no he podido encontrar buenas razones para usar PyOpenGL versus pyglet

¿Qué recomendarías y por qué?

Author: Hortitude, 2008-11-11

9 answers

Como dijo Tony, esto realmente va a depender de sus objetivos. Si estás " retocando "para intentar aprender sobre OpenGL o renderizado 3D en general, prescindiría de todas las bromas y comenzaría a trabajar con PyOpenGL, que es lo más cercano que vas a llegar a la programación 3D" raw " usando Python.

Por otro lado, si estás "retocando" a través de la burla de un juego o aplicación multimedia, o tratando de aprender sobre las prácticas de programación en general, Pyglet te ahorrará mucho de tiempo de desarrollo inicial al proporcionar ganchos para eventos de entrada, sonidos,texto / billboarding, etc. A menudo, esta inversión inicial es lo que impide que las personas completen sus proyectos, por lo que tenerlo hecho por usted no es algo que deba ignorarse. (También es muy pitónico evitar reinventar la rueda.)

Si usted está buscando hacer cualquier tipo de elevación de servicio pesado (que normalmente cae fuera de mi definición de "retoques", pero tal vez no si usted está retoques con el diseño del motor 3D) entonces usted puede que quiera echar un vistazo a Python-Ogre, que envuelve el muy completo y robusto OGRE 3D motor gráfico.

 29
Author: bouvard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-17 08:50:24

Comienza con pyglet. Contiene la mejor API de alto nivel, que contiene todo lo que necesita para comenzar, desde abrir una ventana hasta dibujar sprites y primitivas de OpenGL usando sus clases de Sprites y Lotes amigables y poderosas.

Más tarde, es posible que también desee escribir su propio código de nivel inferior, que hace llamadas directamente a funciones OpenGL como glDrawArrays, etc. Puedes hacer esto usando los enlaces OpenGL de pyglet, o usando los de PyOpenGL. La buena noticia es que cualquiera que uses, puedes inserte tales llamadas directamente en el medio de su aplicación pyglet existente ,y 'simplemente funcionarán'. La transición de su código de Pyglet a PyOpenGL es bastante fácil, por lo que esta no es una decisión por la que deba preocuparse demasiado por adelantado. Los intercambios entre los dos son:

Los enlaces de PyOpenGL hacen que la interfaz de OpenGL sea más amigable y pitónica. Por ejemplo, puede pasar matrices de vértices en muchas formas diferentes, matrices ctypes, matrices numpy, listas planas, etc., y PyOpenGL convertirá en algo que OpenGL puede usar. Cosas como esta hacen que PyOpenGL sea realmente fácil y conveniente.

Los enlaces OpenGL de Pyglet se generan automáticamente y no son tan fáciles de usar como PyOpenGL. Por ejemplo, a veces tendrá que crear manualmente objetos ctypes, para pasar tipos de args 'C pointer' a OpenGL. Esto puede ser complicado. Sin embargo, el lado positivo es que las fijaciones de pyglet tienden a ser significativamente más rápidas.

Esto implica que hay un término medio óptimo: Uso pyglet para ventanas, eventos de ratón, sonido, etc. A continuación, utilice la API amigable de PyOpenGL cuando desee realizar llamadas directas a funciones OpenGL. Luego, al optimizar, reemplace solo el pequeño porcentaje de llamadas PyOpenGL críticas para el rendimiento que se encuentran dentro de su bucle de renderizado interno con los equivalentes de pyglet. Para mí, esto me da entre 2 y 4 veces más velocidad de fotogramas, con la conveniencia de PyOpenGL para el 90% de mi código.

 30
Author: Jonathan Hartley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-22 14:21:04

Yo diría que Pyglet es en realidad más evolucionado que PyOpenGL. Tiene una buena API propia, y tiene un envoltorio completo alrededor de OpenGL al que se accede a través del pyglet.gl ¡módulo! PyOpenGL ni siquiera envuelve todas las funciones que tiene OpenGL. Pyglet también tiene una gran biblioteca para renderizar 2D con aceleración de hardware a través de OpenGL, y está muy bien hecho.

Si quieres un potente motor 3D listo tienes Ogro y tal

 6
Author: Zoomulator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-03 12:25:09

Intenta ModernGL.

pip install ModernGL
  • PyOpenGL es una versión autogenerada de la API OpenGL original (generada con SWIG). La API original de OpenGL no es compatible con python. Los enlaces python generados son difíciles de usar.

  • Pyglet es principalmente para la creación de ventanas y el manejo de eventos, sin embargo, puede usar una API similar a PyOpenGL (por ejemplo pyglet.gl.glClearColor)

  • Pygame proporciona una ventana donde se puede utilizar PyOpenGL para representación.

  • ModernGL es una gran alternativa a PyOpenGL, puede usar la API OpenGL moderna con menos código escrito. ModernGL no creará una ventana por sí misma, pero puede integrarla en pyglet, pygame, PyQt5 e incluso en GLUT.

En ModernGL puede crear un programa de sombreado simple con una sola llamada:

prog = ctx.program(
    vertex_shader='''
        #version 330
        in vec2 in_vert;
        void main() {
            gl_Position = vec4(in_vert, 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330
        out vec4 f_color;
        void main() {
            f_color = vec4(0.3, 0.5, 1.0, 1.0);
        }
    ''',
)

Con ModernGL tienes control total sobre la API de OpenGL.

 6
Author: Szabolcs Dombi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 07:11:13

Pyglet tiene muchos extras incluidos (como carga de imágenes y sonido). Si estás empezando, probaría Pyglet primero, y luego cambiaría a PyOpenGL si sientes que quieres acercarte al metal.

La verdadera pregunta importante, sin embargo, es: ¿qué estás tratando de lograr?

 4
Author: Tony Arkles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-11 03:38:00

Promociono pyglet porque tiene la API más bonita que he visto en cosas como esta.

Pyglet también tiene API opengl. Pero a menudo es mejor usar el soporte de lista de vértices recientemente agregado.

Pyglet.gl

 4
Author: Cheery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-11 16:30:11

Hmm, yo sugeriría pyglet, que realmente proporciona todo lo necesario por un juego o aplicación.

Eso sí, puedes hacer muchas cosas que pyglet hace con PyOpenGL, por ejemplo para crear una ventana todo lo que necesitas hacer es:
glutInitWindow (título)

Aunque creo que glutInitDisplayMode tiene que ser llamado antes de eso.

Resumen simple: si no quieres codificar hasta que llores, elige pyglet, pero si quieres ser un maestro, elige PyOpenGL. Goto http://pyopengl.sourcefourge.net para leer los documentos sobre PyOpenGL y para http://pyglet.org para leer los documentos sobre pyglet. Espero que esto haya sido útil!

 4
Author: Uchiha Madara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-08 20:30:29

Recomendaría Pyglet porque es muy fácil comenzar y tener algo básico funcionando, y luego puedes agregar técnicas más avanzadas a tu propio ritmo.

 3
Author: Kiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-29 02:52:47

La API GL de Pyglet no es tan agradable como la de PyOpenGL: la de pyglet está en la capa de ctypes sin procesar, lo que significa que también tendrá que aprender ctypes. Si estás planeando hacer un montón de programación OpenGL, querrás usar PyOpenGL.

Lo bueno es que puedes mezclar los dos muy bien. Utilice pyglet para proporcionar el contexto GL, sonidos, eventos, carga de imágenes y administración de texturas,renderizado de texto, etc., etc. Utilice PyOpenGL para la programación real de OpenGL que necesita hacer.

 3
Author: Richard Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-07 11:17:49