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

7

哪些方案是编写图形程序最成熟且支持最好的?

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

是Ruby和Processing?还是Python和OGRE?你用过哪些方案并取得了良好的效果?

5个回答

8
如果你只是想进行实验,我建议选择一个带有动态语言绑定的3D框架,这样你就可以更加熟悉它。
我一两年前开始用Ruby/OpenGL做实验,那很容易玩耍。
如果你真的想要构建一个项目(无论出于何种原因),我建议根据以下组合选择一个框架:
1. 它所实现的本地语言(或运行时)。 2. 引擎或运行时可用的动态语言绑定。 3. 框架的许可证。
如果你希望你的项目在不同的操作系统上运行比较容易,那么你可能需要选择一个用Java编写的框架(因为JVM可以在任何地方运行),并且使用Ruby(jRuby)或JavaScript(因为这些语言在这里得到了很好的支持)进行绑定。然而,这会限制你可用的框架。(这显示了我的开源软件和Linux倾向)
维基百科上有游戏引擎列表。基于多个标准,我开始使用jMonkeyEngine(v2)启动一个项目,并发现它很容易从Rhino(一个JVM JavaScript实现)中控制。
我最近看到了另一个基于Java的框架的演示,它具有多种语言的绑定,看起来非常酷(受Ogre引擎启发),但我忘记了它的名字,也找不到它在列表中的位置。
当时我在做C#,我确实看过一些针对dotNet和Mono的项目/框架,以便跨平台运行,但是获取(Tao?)框架和Mono Lua绑定的开发构建版本太麻烦了。也许事情已经改变了。
总之,选择一个可以在你想要的环境上运行,并且具有你想要使用的动态语言绑定的框架。即使可用于所需动态语言的框架库代码相当少,如果你能使用底层语言进行工作,你可以很容易地扩展它。如果你精通C++,Java和C#,这应该不会太难。

5

如果您熟悉C++,可以尝试使用Lua。Lua是一种动态语言,可以嵌入到任何C/C++程序中。它在游戏行业非常流行。


4

我想提到Python与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行的代码下实现了一个四元数类。如果你对Python感到舒适,我毫不犹豫地推荐你去尝试一下。
顺便说一句,PyOpenGL的API文档比官方文档更易读。可以参考PyOpenGL的API文档,而不是官方文档

2
如果您追求成熟和支持,我的个人建议是使用Processing——非常灵活、开源、文档齐全,并且有众多社区。其语法类似于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支持。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接