2009-03-13 16 views
14

Estoy planeando escribir un juego simple de 3d (vista isométrica) en Java usando jMonkeyEngine: nada que me guste, solo quiero aprender algo sobre OpenGL y escribir algoritmos eficientes (generadores de mapas aleatorios).¿Puede el juego 3D OpenGL escrito en Python verse bien y ejecutar rápido?

Cuando estaba planeando qué hacer, comencé a preguntarme sobre cambiar a Python. Sé que Python no nació para ser una herramienta para escribir juegos en 3D, pero ¿es posible escribir juegos atractivos con este lenguaje?

Tengo en mente gráficos en 3D, buenos efectos y tiempo de CPU libre para alimentar el motor de juego? Había visto buenos juegos java, y también, para ser sincero, estaba bastante sorprendido cuando vi el nivel de detalle logrado en Runescape HD.

Por otro lado, pygame.org solo tiene 2 juegos, con algunos proyectos en 3D iniciales. ¿Hay algún motor de juego 3D eficiente para Python? ¿Es pyopengl la única alternativa? Los buenos juegos en Python no son populares o posibles de lograr.

Estaría agradecido por cualquier información/comentario.

+0

Aquí hay algunos módulos que debe verificar [ModernGL] (https://github.com/cprogrammer1994/ModernGL), [pygame] (https://www.pygame.org), [pymunk] (https: // github.com/viblo/pymunk) [pyglet] (https://www.pyglet.org) –

Respuesta

18

Si le preocupa el rendimiento 3D: OpenGL manejará la mayoría de las partes críticas para el rendimiento (en una biblioteca C o incluso en hardware), por lo que el lenguaje que use para manejarlo no debería importar demasiado.

Para saber realmente si el rendimiento es un problema, tendría que intentarlo. Pero no hay ninguna razón por la cual no pueda funcionar en principio.

En cualquier caso, aún podría optimizar las partes críticas, ya sea en Python o cayendo a C. Todavía obtiene el beneficio de Python para la mayor parte del motor del juego que es menos crítico para el rendimiento.

+0

Utilice [ModernGL] (https://github.com/cprogrammer1994/ModernGL) en lugar de PyOpenGL. Fácil y rápido y no se requieren ctypes. No es un motor de juego, sino el acceso al OpenGL de forma pitónica. –

2

Es posible que desee comprobar Python-Ogre. Simplemente lo fastidié yo mismo, nada serio, pero parece bastante bueno.

+0

He estado pensando en volver a escribir para WiiTanks en la PC, y había estado jugando con PyGame ... pero Ogre parece bastante prometedor, ¡muchas gracias por el enlace! –

+0

@JonCage ¿Alguna vez escribiste esto en Python? – johnny

+0

Obtuve algunos de los conceptos básicos pero nada que valga la pena divulgar. –

1

Quizás un poquito fuera de tema pero, si su objetivo es aprender Python, ¿qué tal crear un juego usando IronPython y XNA? Sin embargo, XNA no es OpenGL, pero creo que es un motor 2D/3D extremadamente simple, rápido y compatible con Shader Model 3.0.

+6

Como jurar en la iglesia, supongo ... –

1

Vea el proyecto Frets on Fire - una alternativa de fuente abierta de Guitar Hero. Está escrito en Python y tiene gráficos 3D decentes en OpenGL. Sugiero que consulte its sources para obtener sugerencias sobre bibliotecas, etc.

2

recomendaría pyglet que es un sistema similar al PyGame, pero con fijaciones completas a OpenGL. Puede comenzar con simples juegos 2D para familiarizarse con el sistema y trabajar hasta 3D más tarde. Es un sistema más moderno que PyGame que se basa en SDL que en sí mismo es un poco largo en el diente en estos días.

1

Hubo un juego de vampiros hace unos años donde la mayoría si no todo el código estaba en Python. No estoy seguro si las rutinas 3D estaban en ellos, pero funcionó bien.

3

Hablé un EuroPython de mis intentos de aficionados a conducir OpenGL desde Python: http://pyvideo.org/video/381/pycon-2011--algorithmic-generation-of-opengl-geom

La última versión del código que estoy hablando es de aquí: https://github.com/tartley/gloopy

Está catalogado como un " biblioteca ', pero eso fue ingenuo de mi parte: es un montón de código experimental personal.

Sin embargo, demuestra que puede moverse alrededor de cientos de bits de geometría a 60 fps de Python.

Aunque la demostración anterior es bastante básica ya que usa simplemente geometría y caras sin textura, una cosa que encontré es que geometría más detallada, mapeo de texturas u otros efectos gráficos más modernos no afectan sustancialmente la velocidad de cuadros. O al menos no lo afectan peor que usar los mismos efectos en un programa C. Estos se ejecutan en la GPU, por lo que no hace ninguna diferencia si su programa está escrito en Python.

Una cosa que es sensible al rendimiento de Python es si está creando una geometría dinámica en el lado de la CPU, p. moviendo vértices individuales dentro de una forma, doblando o derritiendo la forma. Realizando este tipo de cálculo por vértice en Python, luego construyendo una nueva matriz de tipos desde el resultado, y luego el cambio de esta geometría a la GPU, cada cuadro, será lento. En cambio, probablemente deberías estar haciendo esto en un sombreado de vértices.

Por otro lado, si solo quiere transformaciones afines (mover objetos, girarlos, abrir cajoneras, girar las ruedas del automóvil, doblar un brazo robótico articulado), todo esto se puede hacer mediante la GPU y el El hecho de que su programa esté escrito en Python tiene poca importancia para el rendimiento.

Cuestiones relacionadas