tutorial mac español python graphics 3d pyopengl

python - mac - pyopengl tutorial español



pyopengl: ¿Podría reemplazar a c++? (5)

Estoy comenzando un curso de gráficos por computadora, y tengo que elegir un idioma.

Las opciones están entre C ++ y Python. No tengo ningún problema con C ++, python es un trabajo en progreso. Así que estaba pensando en ir por la carretera de Python, usando pyopengl para la parte de gráficos.

Sin embargo, he oído que el rendimiento es un problema.

¿Python / pyopengl es lo suficientemente maduro como para cuestionar el rendimiento de C ++?

Me doy cuenta de que es una posibilidad remota, pero me gustaría escuchar sus pensamientos, experiencias sobre los usos de pyopengl.

Gracias por adelantado.


Python es un lenguaje dinámico que se interpreta y compila en tiempo de ejecución y, como tal, no puede tener un mejor rendimiento que C ++. Eche un vistazo a esta publicación para comparar entre varios lenguajes de programación.

Otra buena razón para preferir C ++ es la ejecución paralela. Muchas tareas en CG pueden optimizarse dividiéndolas en varios hilos que se ejecutan en paralelo: ¿alguna vez intentó iniciar un nuevo hilo usando Python?


Python es un lenguaje impresionante, pero no es la herramienta adecuada para gráficos. Y si quieres hacer algo remotamente avanzado, tendrás que usar librerías unpythonic y terminarás con un feo código C escrito en Python.


Depende MUCHO en los contenidos de su curso de gráficos de computadora. Si estás haciendo algo como el curso introductorio que he enseñado en el pasado, básicamente se trata de girar cubos y esferas, algunos mapas de texturas y algunas animaciones de vértices, y eso es todo. En este caso, Python sería perfectamente adecuado, suponiendo que se puede evitar el paradigma de máquina de estados OpenGL Unpythonic (y, seamos honestos, no-C ++).

Para cosas como hacer las matemáticas matriciales puedes usar Numpy, cuyo núcleo está escrito en C y es bastante rápido. Estarás en funcionamiento más rápido, iterarás más rápido y seguramente te divertirás más.

Si, sin embargo, estás haciendo un curso de gráficos por ordenador hardcore, vanguardista, de millones de triángulos por escena y animado por todo, quédate con C ++.

Si su clase le ha dado la opción, probablemente sea una apuesta segura que Python estará bien.

Sin embargo, si desea aprovechar sus conocimientos en un trabajo real en gráficos de computadora, casi todos los motores de juegos y gráficos están escritos en C o C ++, mientras que Python (o Lua) se deja como un lenguaje de scripting.


Aquí está mi experiencia personal:

Cuando escuché por primera vez sobre PyOpenGL, estaba absolutamente emocionado . OpenGL en mi idioma favorito? ¡Acuerdo! Así que comencé a aprender programación gráfica en 3D por mi cuenta.

Revisé varios tutoriales y libros como NeHe y OpenGL SuperBible . Debido a que las funciones de PyOpenGL son idénticas a las de OpenGL (con pequeñas diferencias), no fue difícil replicar la mayoría de los ejemplos. Además, NeHe tiene muchos códigos fuente en Python que otros hicieron.

No fue mucho tiempo después (alrededor de 2 semanas) cuando leí en Quaternions y lo implementé en Python. Ahora tengo un entorno habilitado para GLSL con opciones de interacción de cámara 3D completas. Hice un shader Phong simple, y usé Quaternions para manejar las rotaciones de mi cámara. Aún no tengo un solo golpe de rendimiento.

Meses después, volví a este código.

Intenté una implementación de Python Octree, y cuando fui a 8 niveles (256x256x256 vóxeles), me llevó más de 2G de RAM calcular y minutos después, todavía no está hecho. Me di cuenta de que cuando almacena muchos objetos en Python, no es simplemente una estructura simple como en C ++. Ahí es donde me di cuenta de que necesitaba factorizar esto, escribir esto en C ++ y luego pegarlo de nuevo con una llamada de Python.

Una vez que haya terminado con esto, si lo recuerdo, lo actualizaré. ;]

(Para responder a su pregunta, no, Python nunca reemplazará a C ++. Esos dos idiomas tienen diferentes propósitos y diferentes puntos fuertes).


Python es el camino a seguir. Como toda la programación opengl está cargando datos a la RAM de la tarjeta de video, entonces usando opengl para operarlo, las limitaciones de velocidad en python son irrelevantes. También facilita las cosas difíciles en C ++, es decir, abrir archivos, imágenes, sonidos, etc.

En cuanto a la persona que está arriba implementando octrees, no hay nada que te impida usar numpy, que está escrito en C, para implementarlo. (también asegúrese de que está utilizando la memoria lineal como un árbol binario, y no punteros a los objetos en un enlace como la estructura)

Publicación del blog sobre este tema