OpenGL /通用图形的最佳动态语言

时间:2009-12-15 00:17:15

标签: python ruby graphics scheme processing

哪些是最成熟,最受支持的编写图形程序的解决方案?

我一直在使用C ++和OpenGL / GLUT,但我想尝试一种更灵活,更富表现力的方法。

Ruby和Processing? Python和OGRE?什么事情对你有用?

5 个答案:

答案 0 :(得分:6)

如果您只是对实验感兴趣,我建议选择一个带有您已熟悉的动态语言绑定的3D框架。

我在一三年前开始使用Ruby / OpenGL进行实验,这很容易就可以玩了。

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

组合的框架
  • 它在其中实现的本机语言(或运行它的运行时)
  • 可用于引擎或运行时的动态语言绑定
  • 框架的许可

如果你希望你的项目能够相当容易地在不同的OS上运行,那么你可能想要选择一个用Java编写的框架(因为JVM在任何地方运行)以及Ruby(jRuby)或JavaScript中的绑定(因为这些语言得到很好的支持)。但是,这会限制您可以使用的框架。 (这是我的OSS + linux偏见显示)。

维基百科有一个list of game engines。根据几个标准,我使用jMonkeyEngine(v2)开始了一个项目,发现使用Rhino(JVM JavaScript实现)很容易使用和控制。

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

当我查看针对dotNet和Mono的项目/框架以跨平台运行时做C#但是让(Tao?)框架和Mono Lua绑定的开发版本运行起来太麻烦了。也许事情发生了变化。

总而言之,选择一个可以在您想要的动态语言绑定的情况下在您想要的环境上运行的框架。即使您想要使用的动态语言可用的框架库代码相当小,如果您可以使用底层语言,也可以轻松扩展它。如果你能熟练使用C ++,Java和C#应该不会太过分。

答案 1 :(得分:5)

鉴于您熟悉C ++,您可以试试Lua。 Lua是一种动态语言,可以嵌入任何C / C ++程序中。它在游戏行业非常受欢迎。

答案 2 :(得分:3)

我想提一下PyOpenGL作为考虑的选项。

如果您已熟悉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更具可读性。

答案 3 :(得分:2)

如果您正在寻找支持OpenGL开箱即用的动态语言(无需外部绑定),请尝试以下方法:

答案 4 :(得分:2)

我的个人建议如果您在成熟和支持后将是Processing - 非常灵活,开源,文档齐全且great community。语法是C语言的,所以你应该没有困难。

一个看起来很有前途的前沿解决方案(但我还没有完成测试!)是Penumbra - 一个用于动态函数编程风格的OpenGL开发的Clojure库。这是一个优雅的小片段:

(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支持一样。