2010-03-21 15 views
11

Estoy comenzando un curso de gráficos por computadora, y tengo que elegir un idioma.pyopengl: ¿Podría reemplazar C++?

Las opciones se encuentran 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.

He oído, sin embargo, 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 de antemano.

+2

su no si Python es lo suficientemente maduro, es sólo una cuestión de rendimiento del equipo, computadoras no están al nivel de rendimiento hasta donde pueden permitirse perder los ciclos adicionales que utiliza Python en comparación con C++, esto cambiará, sin embargo, en algún momento como inevitablemente (con las velocidades de la computadora aumentando año tras año) .. lenguaje como C++ siempre se usaría, creo, para ciencia de vanguardia, etc. donde están intentando usar hasta el último bit de recursos informáticos, pero para la mayoría de las aplicaciones los lenguajes de alto nivel tomarían el control eventualmente, como lo han hecho hasta ahora – Rick

Respuesta

25

Depende MUCHO en el contenido 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 tus cálculos 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 cada escena, y con todo en 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 lenguaje de scripting.

+1

Gracias, aprecio los gráficos de computadora del mundo real, párrafo – Tom

+0

No puedo explicar la precisión con la que creo que esta respuesta es correcta. – phkahler

+0

@phkahler - ¿Qué quieres decir? – kibibu

0

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++. Consulte this post para comparar entre varios lenguajes de programación.

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

+3

. tú Haga preciso lo que implica con "¿Alguna vez intentó iniciar un nuevo hilo usando Python"? Los hilos son muy fáciles de comenzar en Python. :) ¿Quiso decir que los hilos de CPython sufren el bloqueo de Intérprete global? – EOL

+0

En realidad, nunca desarrollé varios subprocesos en Python, pero vi muchas publicaciones en su contra –

2

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.

+0

Eso es exactamente lo que un amigo me dijo, las mismas palabras, en un idioma diferente. – Tom

+0

Es por eso que escribes tus propias bibliotecas cuando se trata de dudas. –

4

Aquí está mi experiencia personal:

La primera vez que oí hablar de PyOpenGL, yo era absolutamente encantados . 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 PyOpenGL's functions son idénticos a los 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 pasó mucho tiempo después (alrededor de 2 semanas) 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 Python Octree, y cuando pasé 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 recuerdo, lo actualizaré. ;]

(.. Para responder a su pregunta, no, Python nunca reemplace C++ Esos dos Lanaguages ​​tienen propósitos diferentes, y diferentes fortalezas)

+1

A medida que aumenta el rendimiento de la computadora, un lenguaje dinámico puede llegar a ser útil incluso para juegos de alto rendimiento, el poder de la computadora siempre debe considerarse menos valioso que los programadores. cuando las computadoras avanzan lo suficiente, tendría sentido usar Python para cosas que ahora solo se pueden hacer en C++, por supuesto que no será más rápido en términos de ejecución en la máquina, pero el tiempo de desarrollo sería ... habría un cambio de paradigma así que solo cosas que ni siquiera son posibles ahora se realizarían en C++ y todo lo hecho ahora podría hacerse en un lenguaje como Python – Rick

+0

>> por supuesto, no será más rápido en términos de ejecución en la máquina –

+2

hecho un octtree grande en Python como una serie de operaciones de Numpy.Numpy está loco demente, me he acostumbrado a la idea de que las cosas que me hacen encogerme ante la mera idea de intentarlo en C se pueden hacer en un par de líneas de Python. Numpy hace lo mismo para el big data crunching. –

5

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 de arriba implementando octrees, no hay nada que te impida usar numpy, que está escrito en C, desde su implementación. (También asegurarse de que está utilizando la memoria lineal como un árbol binario, y no punteros a objetos en un enlace como la estructura)

Blog post on this subject

Cuestiones relacionadas