2009-03-13 17 views
14

Sto progettando di scrivere un semplice gioco 3d (vista isometrica) in Java usando jMonkeyEngine - niente di strano, voglio solo imparare qualcosa su OpenGL e scrivere algoritmi efficienti (quelli che generano mappe casuali).Il gioco 3D OpenGL scritto in Python ha un bell'aspetto ed è veloce?

Quando stavo pianificando cosa fare, ho iniziato a chiedermi come passare a Python. So che Python non è nato per essere uno strumento per scrivere giochi 3D, ma è possibile scrivere bei giochi con questo linguaggio?

Ho in mente la grafica 3d, effetti piacevoli e tempo CPU gratuito per alimentare il resto del motore di gioco? Avevo visto dei bei giochi java - e anche onestamente, ero piuttosto scioccato quando ho visto il livello di dettaglio raggiunto in Runescape HD.

D'altra parte, pygame.org ha solo giochi 2D, con alcuni progetti 3D iniziali. Esistono efficienti motori di gioco 3D per Python? Pyopengl è l'unica alternativa? I bei giochi in Python non sono popolari o possibili da raggiungere?

Sarei grato per qualsiasi informazione/feedback.

+0

Ecco alcuni moduli da controllare [ModernGL] (https://github.com/cprogrammer1994/ModernGL), [pygame] (https://www.pygame.org), [pymunk] (https: // github.com/viblo/pymunk) [pyglet] (https://www.pyglet.org) –

risposta

18

Se si è preoccupati per le prestazioni 3D: la maggior parte delle parti critiche per le prestazioni sarà gestita da OpenGL (in una libreria C o anche in hardware), quindi la lingua che si usa per guidarla non dovrebbe essere eccessiva.

Per scoprire veramente se le prestazioni sono un problema, dovresti provarlo. Ma non c'è motivo per cui non possa funzionare in linea di principio.

In ogni caso, è ancora possibile ottimizzare le parti critiche, sia in Python che rilasciando su C. Ancora si ottengono i benefici di Python per la maggior parte del motore di gioco che è meno critico dal punto di vista delle prestazioni.

+0

Utilizzare [ModernGL] (https://github.com/cprogrammer1994/ModernGL) anziché PyOpenGL. Facile e veloce e nessun tipo di richiesta. Non è un motore di gioco, ma l'accesso a OpenGL in modo pignolo. –

2

Si potrebbe voler verificare Python-Ogre. L'ho fatto solo io, niente di serio, ma sembra piuttosto buono.

+0

Ho pensato di fare una riscrittura per WiiTanks sul PC, e mi sono divertito con PyGame ... ma Ogre sembra piuttosto promettente - grazie mille per il collegamento! –

+0

@JonCage Hai mai scritto questo in Python? – johnny

+0

Ho alcune nozioni di base che funzionano, ma niente vale la pena di rilasciare. –

1

Forse un po 'fuori tema ma, se il tuo obiettivo è imparare Python, che ne dici di creare un gioco usando IronPython e XNA? XNA non è OpenGL, tuttavia trovo che sia un motore 2D/3D estremamente semplice, veloce e che supporta Shader Model 3.0.

+6

Come bestemmiare in chiesa immagino ... –

1

Scopri il progetto Frets on Fire: un'alternativa di Guitar Hero open source. È scritto in Python e ha una grafica 3D decente in OpenGL. Suggerirei di verificare its sources per suggerimenti su librerie ecc.

2

Suggerirei pyglet che è un sistema simile a pygame, ma con il massimo dei binding a OpenGL. Puoi iniziare con semplici giochi 2D per ottenere il blocco del sistema e lavorare fino al 3D in un secondo momento. È un sistema più moderno di PyGame che è costruito attorno a SDL, che a sua volta è un po 'lungo nei denti.

1

C'è stato un gioco Vampiri qualche anno fa in cui la maggior parte se non tutto il codice era in Python. Non sono sicuro se le routine 3D fossero in loro, ma ha funzionato bene.

3

ho un EuroPython parlare di miei tentativi amatoriali per guidare OpenGL da Python: http://pyvideo.org/video/381/pycon-2011--algorithmic-generation-of-opengl-geom

L'ultima versione del codice di cui sto parlando è qui: https://github.com/tartley/gloopy

E 'classificato come un' libreria ', ma quello era ingenuo da parte mia: è un mucchio di codice sperimentale personale.

Tuttavia, dimostra che è possibile spostare centinaia di bit di geometria a 60 fps da Python.

Anche se la demo di cui sopra è abbastanza scarno, in quanto utilizza semplicemente la geometria e le facce non testurizzata, una cosa che ho trovato è che la geometria più dettagliata, texture mapping o altri effetti grafici più moderni non intaccano sostanzialmente il framerate. O almeno non lo influenzano di peggio che utilizzare gli stessi effetti in un programma C. Questi vengono eseguiti sulla GPU, quindi non fa alcuna differenza se il tuo programma è scritto in Python.

Una cosa che è sensibile alle prestazioni di Python è se si crea la geometria dinamica sul lato CPU, ad es. spostare singoli vertici all'interno di una forma, piegando o fondendo la forma. Eseguendo questo tipo di calcolo per vertice in Python, quindi costruendo un nuovo array ctypes dal risultato, quindi lo smistamento di questa geometria alla GPU, ogni frame, sarà lento. Invece dovresti probabilmente farlo in uno shader di vertici.

D'altra parte, se vuoi solo trasformazioni affini (spostando oggetti, ruotandole, aprendo casse di cassetti, ruote di automobili rotanti, piegando un braccio robotizzato), tutto ciò può essere fatto dalla GPU e dal il fatto che il tuo programma sia scritto in Python fa poca differenza per le prestazioni.

Problemi correlati