2009-08-24 8 views
10

Sono uno sviluppatore C# per la maggior parte. Tornato al college ho avuto lezioni su C/C++ quindi so "C" e questa è una buona parte del motivo per cui sono uno sviluppatore C#.Come iniziare quando si tenta di comprendere il codice di un motore di gioco 3D (come id Tech 3)?

Tuttavia, non ho mai avuto la possibilità di codificare in C/C++ professionalmente e mi piacerebbe studiare come funziona un motore di gioco moderno, insieme a come funziona un'applicazione C/C++ di livello industriale.

Il problema è che non ho idea da dove iniziare. Come in, ho scaricato il motore Quake 3 source code (che è stato ritronizzato id Tech 3) e non sono nemmeno sicuro da dove cominciare.

Come dovrebbe un C#/WinForms protetto attaccare una base di codice C massiccia come id Tech 3 o qualche altro enorme motore AAA?

+2

Solo FYI: la fonte di Quake 3 è "terribile" se sei interessato a un bel codice pulito. Voglio dire, funziona, è molto efficiente. Ma davvero, è terribile, come la maggior parte del codice di gioco di produzione. Detto questo, vorrei solo saltare e fare "qualcosa" - personalmente non riesco a capire il codice solo fissandolo. – Justicle

+0

Sì, sono meno interessato al codice pulito e più interessato a come funzionano i moderni motori di gioco 3D. Anche se il modo in cui fanno le cose in Quake 3 è antiquato, è un inizio –

risposta

12

Prova a fare il più semplice programma 3D "Hello World" che utilizza il sottoinsieme più base del motore. Questo probabilmente ti insegnerà molto.

Con basi di codice grandi è meglio non provare a imparare tutto in una volta. Basta immergerti con una domanda molto specifica che devi rispondere a te stesso (o puoi cercare su internet), o un compito molto specifico che devi realizzare. Questo approccio ti dà lo scopo e la motivazione di cui hai bisogno per fare effettivamente qualche programmazione. L'apprendimento verrà da solo.

+0

+1 Assolutamente - proprio come il primo giorno di un nuovo lavoro di codifica, la cosa migliore è saltare dentro e iniziare a correggere i bug: presto scoprirai tutto bisogno di sapere. – Justicle

4

Scrivere una mod sarebbe un buon punto di partenza.

Inizio sul territorio tracciato: il gioco della vaniglia. Cambia cose. Guarda il codice di salto delle granate. Fallo rimbalzare ulteriormente. Aggiungi la previsione lato client (che i proiettili non rimbalzanti hanno già).

Aggiungi un'arma di teletrasporto. Ti dirà di più sul rilevamento delle collisioni di quanto vorresti sapere.

Ci sono alcune funzioni chiave che gestiscono la maggior parte del gioco: le esportazioni del motore, le chiamate trap_ *. Potrebbe essere molto utile sapere quali sono esattamente i mod che stanno facendo con loro prima di aprire il codice del motore e osservare la loro implementazione. Per esempio, potrebbe dirti di più sul motore per sapere che devi chiamare LinkEntity ogni volta che un'entità si muove o altrimenti la sua posizione nell'albero del gioco BSP non viene aggiornata e le successive chiamate al motore potrebbero ignorarlo, piuttosto che sapere esattamente come l'albero è memorizzato e accessibile.

1

Nel caso in cui siete alla ricerca di altri motori di gioco 3D e può forse voler confrontarli tra loro, vedi DIM3:

http://code.google.com/p/dim3/

3

Questo suona come uno scherzo, ma: trovare il main() funzione. Questo è il punto di partenza ben definito dell'esecuzione del programma e dovresti essere in grado di seguire tutto da lì.

Questo dovrebbe aiutare a capire quali sottosistemi dipendono da quale, dal momento che l'ordine della loro inizializzazione sarà in genere dal basso verso l'alto. Ad esempio, un motore tipico inizializzerà i sottosistemi di memoria, debug e traccia in anticipo, poiché la maggior parte degli altri sistemi richiede che tali servizi siano attivi e in esecuzione.

Dovresti anche essere in grado di capire come entrare nel ciclo principale del gioco e capire cosa è necessario prima che il circuito abbia il controllo.

+0

Ciò dipende dalla mia mancanza di esperienza con i programmi Windows C++: ho trovato la funzione WinMain ma non è chiaro come funzioni. Immagino sia ora di iniziare a passare ... –

1

Andre LaMothe praticamente mi ha insegnato tutto ciò che so sulla programmazione dei giochi. Una volta passati attraverso questi due libri, saprai praticamente tutto ciò che devi sapere sui motori 3d.

  1. Tricks of the Windows Game Programming Gurus
  2. Tricks of the 3D Game Programming Gurus - Advanced 3D Graphics and Rasterization

Altrimenti, basta provare a scrivere il proprio piccolo motore per divertimento, vedere quanto si ottiene, cosa ti perdi, e presto inizia a capire il scopo dell'altro codice che stai guardando,

Inoltre, potresti voler provare a guardare lo NeHe Gamedev Tutorials.

0

Non sono mai stato un grande fan della lettura di un prodotto finito di grandi dimensioni. E soprattutto la base del codice di Quake. Ci sono buone cose che puoi imparare da questo, ma non dovrebbe essere il tuo punto di partenza. Devi imparare prima alcuni nuovi concetti usati nella programmazione del gioco.

Suggerisco di mettere un C++ in attesa (se si vuole fare il gioco è necessario tornare ad esso ad un certo punto) ma per ora installare XNA. È un ottimo framework come tutto. NET. Ci sono un sacco di tutorial sul gioco XNA là fuori.

Problemi correlati