7

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

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

红宝石和加工?Python 和 OGRE?哪些事情对你很有效?

4

5 回答 5

8

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

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

如果您真的想构建一个项目(无论出于何种原因),我建议您选择一个基于以下组合的框架

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

如果您希望您的项目能够相当容易地在不同的操作系统上运行,您可能需要选择一个用 Java 编写的框架(因为 JVM 到处运行),并在 Ruby (jRuby) 或 JavaScript 中绑定(因为这些语言都很好那里支持)。但是,这会限制您可用的框架。(这是我的 OSS + linux 偏向展示)。

维基百科有一个游戏引擎列表。基于几个标准,我使用 jMonkeyEngine (v2) 开始了一个项目,发现它很容易使用和控制 Rhino(一个 JVM JavaScript 实现)。

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

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

总而言之,选择一个可以在您想要的环境上运行的框架,并绑定您想要使用的动态语言。即使可用于您想要使用的动态语言的框架库代码相当少,如果您可以使用底层语言,您也可以轻松扩展它。如果您精通 C++,Java 和 C# 应该不会太费力。

于 2009-12-15T01:06:00.747 回答
5

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

于 2009-12-15T00:20:37.437 回答
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 文档也比官方文档更具可读性。

于 2010-04-20T11:15:07.467 回答
2

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

于 2009-12-15T06:21:37.723 回答
2

如果您已经成熟并获得支持,我个人的建议是Processing - 非常灵活、开源、有据可查和一个很棒的社区。语法类似于 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 支持。

于 2010-09-23T15:16:52.020 回答