2009-12-15 16 views

Respuesta

5

Dado que está familiarizado con C++, puede probar Lua. Lua es un lenguaje dinámico que puede integrarse en cualquier programa C/C++. Es muy popular en la industria del juego.

6

Si solo te interesa experimentar, te sugiero que elijas un marco 3D con encuadernaciones para un lenguaje dinámico con el que ya estás familiarizado.

Empecé a hacer experimentos con Ruby/OpenGL hace un año o tres y eso fue bastante fácil de jugar.

Si realmente quiere construir un proyecto (por cualquier razón), sugeriría recoger un marco basado en una combinación de

  • La lengua materna se implementa en (o tiempo de ejecución que se ejecuta en)
  • los enlaces de lenguaje dinámicos disponibles para el motor de tiempo de ejecución o
  • la licencia del marco

si desea que su proyecto sea bastante facilidad corriendo por diferen t OS, es probable que desee elegir un marco escrito en Java (porque la JVM se ejecuta en todas partes) con enlaces en Ruby (jRuby) o JavaScript (porque estos lenguajes están bien soportados allí). Sin embargo, esto limitaría los marcos disponibles para usted. (Este es mi sesgo OSS + linux mostrando).

Wikipedia tiene un list of game engines. Basado en varios criterios, comencé un proyecto con jMonkeyEngine (v2) y me resultó fácil trabajar con Rhino y controlarlo (una implementación de JVM JavaScript).

Recientemente vi una presentación de otro framework basado en Java con enlaces para varios idiomas que parecían realmente geniales (inspirados en el motor Ogre), pero olvidé el nombre y no puedo encontrarlo en la lista.

Realizando C# en ese momento, observé proyectos/frameworks dirigidos tanto a dotNet como a Mono para ejecutar plataformas pero era demasiado complicado conseguir las compilaciones de desarrollo del framework (Tao?) Y los enlaces Mono Lua en ejecución. Tal vez las cosas han cambiado.

Para resumir, elija un marco que pueda ejecutarse en los entornos que desee con enlaces para el lenguaje dinámico que desee utilizar. Incluso si el código de la biblioteca de marcos disponible para el lenguaje dinámico que desea utilizar es bastante mínimo, puede ampliarlo fácilmente si puede trabajar con el idioma subyacente. Si dominas C++, Java y C# no deberían ser demasiado exagerados.

2

Si está buscando lenguajes dinámicos que soportan OpenGL fuera de la caja (sin fijaciones externas) probar estos:

+0

+1 para el enlace de raqueta (antiguo esquema PLT). –

3

Me gustaría mencionar Python con PyOpenGL como una opción a considerar.

Si ya está familiarizado con OpenGL, PyOpenGL es básicamente un contenedor API escrito en Python. Al principio, me sorprendió lo similar que se ve el código en Python y en C++. Como esto (Nota También estoy usando Pyglet):

def setup_render(self): 
    '''First rendering setup''' 
    glClearColor(0.0, 0.0, 0.0, 1.0) 
    glClearDepth(1.0)  

    glEnable(GL_LIGHTING)  
    glEnable(GL_DEPTH_TEST)  
    glEnable(GL_ALPHA_TEST)   
    glEnable(GL_CULL_FACE)    

def draw(self, time_passed): 
    '''Drawing events''' 
    if self.has_exit: 
     pyglet.app.exit() 
     return 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    glUseProgram(self.shader.program) 
    self.set_lights() 

    # Draw objects here 
    glTranslate(0, 0, -10) 
    glScale(5.0, 5.0, 5.0) 
    glutSolidSphere(1, 16, 16) 

Ver lo similar que es de código C++.

Pude recoger rápidamente PyOpenGL en Python, e implementé una clase Quaternion de menos de 200 líneas. Si te sientes cómodo con Python, no dudaría en recomendarte que lo verifiques. Por cierto, PyOpenGL's API documentation es mucho más legible que el official one, también.

2

Mi sugerencia personal para después de la madurez y soporte sería Processing - muy flexible, de código abierto, bien documentado y un great community. La sintaxis es similar a C, por lo que no debería tener dificultad para recogerla.

Una solución un poco más innovadora que parece muy prometedora (¡pero todavía no he podido probarla!) Es Penumbra - una biblioteca Clojure para el desarrollo de OpenGL en un estilo de programación dinámica y funcional. He aquí un pequeño fragmento elegante:

(enable :light0) 
(push-matrix 
    (translate 0 0 -10) 
    (draw-quads 
    (vertex 0 0 0) 
    (vertex 0 1 0) 
    (vertex 1 1 0) 
    (vertex 1 0 0))) 

Tenga en cuenta que gracias a un montón de Clojure macro inteligencia, que se encarga de forma automática y transparente cosas como hacer estallar las matrices de transformación en el momento adecuado. Otras cosas que se ven bien son cosas como el soporte de GPGPU.

Cuestiones relacionadas