2009-12-15 9 views

risposta

5

Dato che si ha familiarità con C++, si può dare a Lua una prova. Lua è un linguaggio dinamico che può essere incorporato in qualsiasi programma C/C++. È molto popolare nel settore dei giochi.

6

Se sei solo interessato a sperimentare, ti suggerisco di scegliere un framework 3D con binding per un linguaggio dinamico con cui hai già familiarità.

Ho iniziato a fare esperimenti con Ruby/OpenGL un anno o tre fa ed è stato abbastanza facile da giocare.

Se si vuole seriamente costruire un progetto (per qualsiasi motivo), suggerirei di prendere un framework basato su una combinazione di

  • La lingua madre è implementato in (o runtime che gira su)
  • Gli attacchi linguaggio dinamico disponibili per il motore o runtime
  • la licenza del quadro

Se volete che il vostro progetto sia abbastanza facilmente che attraversa differen t OS, probabilmente vorrai scegliere un framework scritto in Java (perché la JVM funziona ovunque) con i binding in Ruby (jRuby) o JavaScript (perché questi linguaggi sono ben supportati lì). Ciò, tuttavia, limiterà i quadri a tua disposizione. (Questo è il mio Bias OSS + che mostra).

Wikipedia ha un list of game engines. In base a diversi criteri, ho avviato un progetto con jMonkeyEngine (v2) e ho trovato facile lavorare con e controllare da Rhino (un'implementazione JavaScript JVM).

Recentemente ho visto una presentazione da un altro framework basato su Java con binding per diverse lingue che sembravano davvero interessanti (ispirato al motore Ogre), ma ho dimenticato il nome e non riesco a trovarlo nell'elenco.

Facendo C# al momento ho guardato progetti/framework che hanno come target sia dotNet sia Mono per l'esecuzione su piattaforme diverse, ma era troppo complicato ottenere le build di sviluppo del framework (Tao?) E dei binding Mono Lua in esecuzione. Forse le cose sono cambiate.

Per riassumere, selezionare un framework che può essere eseguito sull'ambiente (s) che si desidera con i collegamenti per la lingua dinamica che si desidera utilizzare. Anche se il codice della libreria di framework disponibile per il linguaggio dinamico che si desidera utilizzare è abbastanza ridotto, è possibile estenderlo facilmente se si può lavorare con la lingua sottostante. Se sei fluente con C++, Java e C# non dovrebbero essere eccessivi.

2

Se siete alla ricerca di linguaggi dinamici che supportano OpenGL out-of-the-box (disponibili associazioni esterne) provare questi:

+0

+1 per il collegamento per Racket (precedente schema PLT). –

3

Vorrei menzionare Python con PyOpenGL come opzione da considerare.

Se hai già familiarità con OpenGL, PyOpenGL è fondamentalmente un wrapper API scritto in Python. All'inizio sono rimasto sorpreso di quanto il codice sia simile in Python e in C++. Ti piace questa (nota sto utilizzando anche 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) 

Vedi quanto simile sia per il codice C++.

Sono stato in grado di rilevare rapidamente PyOpenGL in Python e implementato una classe Quaternion su 200 righe. Se sei a tuo agio con Python, non esiterei a consigliarti di verificarlo.

A proposito, PyOpenGL's API documentation è molto più leggibile rispetto allo official one.

2

Il mio suggerimento personale se siete dopo la maturità e il supporto sarebbe Processing - molto flessibile, open source, ben documentato e uno great community. La sintassi è simile a C quindi non dovresti avere difficoltà a prenderlo.

Una soluzione un po 'più avanzata che sembra molto promettente (ma non ho ancora avuto modo di testare! Ecco un elegante piccolo frammento:

(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))) 

nota che grazie a un sacco di Clojure macro bravura, automaticamente e in modo trasparente gestisce le cose come schioccare le matrici di trasformazione al momento giusto. Altre cose che sembrano buone sono cose come il supporto GPGPU.

Problemi correlati