2009-12-15 33 views

回答

5

鉴于你熟悉C++,你可能会给Lua一试。 Lua是一种动态语言,可以嵌入到任何C/C++程序中。它在游戏行业非常流行。

6

如果你在实验只是感兴趣,我建议选择绑定的三维框架的动态语言,你已经熟悉了。

我在一年或三年前开始使用Ruby/OpenGL进行实验,这很容易实现。

如果你认真想建立(无论何种原因)的一个项目,我建议选择基础上的

  • 它在实现的母语(或运行在运行时)的组合框架
  • 可用于发动机或运行时

如果你希望你的项目必须跨越differen很容易运行框架的许可证动态语言绑定在OS中,你可能想用Ruby(jRuby)或JavaScript(因为这些语言在那里得到很好的支持)中的绑定选择用Java编写的框架(因为JVM在任何地方运行)。但是,这会限制您可以使用的框架。 (这是我的OSS + Linux偏差显示)。

维基百科有一个list of game engines。基于几个标准,我开始使用jMonkeyEngine(v2)开发一个项目,并发现使用Rhino进行工作和控制非常容易(JVM JavaScript实现)。

我最近看到另一个基于Java框架的演示文稿,其中有几种语言的绑定,看起来非常酷(受Ogre引擎的启发),但我忘记了名字,并且在列表中找不到它。

在做C#的时候,我看过针对dotNet和Mono的跨平台运行的项目/框架,但获得(Tao?)框架和Mono Lua绑定运行的开发版本太麻烦了。也许事情已经改变。

概括起来,挑选可你想用绑定您要使用的动态语言环境(S)运行的框架。即使可用于您想使用的动态语言的框架库代码非常少,如果您可以使用底层语言,也可以轻松扩展它。如果你对C++流利,Java和C#不应该太过分。

2

如果您正在寻找支持OpenGL外的开箱(无外部绑定)动态语言尝试这些:

+0

+1适用于Racket(原PLT计划)的链接。 – 2012-09-28 08:47:29

3

我想提及PyOpenGL作为一个选项来考虑Python。

如果您已经熟悉OpenGL,PyOpenGL基本上是一个用Python编写的API包装器。起初我很惊讶,代码在Python和C++中看起来有多相似。像这样(注意我也使用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) 

看看它与C++代码有多相似。

我能够在Python中快速获取PyOpenGL,并在200行以下实现了Quaternion类。如果您对Python感到满意,我会毫不犹豫地推荐您检查它。

顺便说一下,PyOpenGL's API documentation也比official one更具可读性。

2

我个人的建议,如果你是在成熟和支持后将是Processing - 非常灵活,开源,有据可查和great community。语法是类C的,所以你应该没有困难地捡起它。

一个看起来非常有前途(!但我还没有得到全面的测试还)略多尖端的解决方案是Penumbra - 在动态函数式编程风格的Clojure库OpenGL开发。这里有一个优雅的小片段:

(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))) 

指出,由于大量的Clojure宏聪明的,它会自动和透明地处理类似的事情在适当的时候弹出的变换矩阵。其他看起来不错的东西就像GPGPU支持一样。