2009-12-15 60 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支持一樣。