最佳动态语言用于OpenGL/图形绘制
有哪些比较成熟且支持好的方案可以用来编写图形程序呢?
我之前一直在用C++配合OpenGL/GLUT,但我想尝试一些更灵活、更能表达想法的方法。
比如Ruby和Processing?或者Python和OGRE?你们觉得哪些东西用起来比较顺手呢?
5 个回答
我想提一下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++的代码有多像。
我很快就掌握了PyOpenGL,并在200行以内实现了一个四元数类。如果你对Python比较熟悉,我会毫不犹豫地推荐你去试试。
顺便说一下,PyOpenGL的API文档比官方文档要容易读得多。
如果你对C++有一定了解,可以试试Lua。Lua是一种动态语言,可以嵌入到任何C/C++程序中。它在游戏行业非常受欢迎。
如果你只是想试试水,我建议你选择一个和你已经熟悉的动态语言相结合的3D框架。
我大约一到三年前开始用Ruby和OpenGL做实验,那时候玩起来还挺简单的。
如果你真的想认真做一个项目(不管出于什么原因),我建议你选择一个框架,考虑以下几个方面:
- 它是用什么语言实现的(或者说它运行在哪种环境上)
- 这个引擎或运行环境支持哪些动态语言的绑定
- 这个框架的许可证类型
如果你希望你的项目能在不同的操作系统上比较顺利地运行,你可能想选择一个用Java写的框架(因为Java虚拟机到处都能跑),并且有Ruby(jRuby)或JavaScript的绑定(因为这些语言在那里的支持很好)。不过,这样的话可选的框架可能会比较有限。(这可能是我对开源软件和Linux的偏见在作怪)。
维基百科上有一个游戏引擎的列表。我根据几个标准开始了一个用jMonkeyEngine(v2)的项目,发现它很好用,也能很方便地从Rhino(一个Java虚拟机的JavaScript实现)控制。
我最近看到一个基于Java的框架的演示,它支持多种语言,看起来非常酷(受到Ogre引擎的启发),但我忘了名字,也在列表中找不到了。
当时我在做C#,也看过一些针对dotNet和Mono的项目/框架,想让它们能跨平台运行,但要让(Tao?)框架的开发版本和Mono Lua绑定运行起来实在太麻烦了。也许现在情况有所改善。
总之,选择一个能在你想要的环境中运行的框架,并且有你想用的动态语言的绑定。即使这个动态语言的框架库代码比较少,只要你能掌握底层语言,扩展起来也不难。如果你对C++很熟悉,那么Java和C#也不会太难。