Scriverò una risposta adeguata da quando ero sul tuo palco circa 2 mesi fa.
Ho iniziato a scrivere un motore di gioco molto semplice in modo da poter imparare meglio OpenGL 3.x ma poiché la mia inesperienza e la mia scarsa conoscenza di come un gioco 3D dovesse essere progettato, di solito mi trovo in problemi in cui mi rendo conto che avrei dovuto progettare le mie lezioni in modo diverso.
Non ti preoccupare. Con la tua mancanza di esperienza, non sarai mai in grado di pensare a tutte le possibilità e i modi in cui una determinata classe verrà utilizzata nel tuo motore. È meglio se si considerano le caratteristiche principali della classe, implementarla e ristrutturarla in seguito. Non cercare di pensare troppo alle cose, in questa fase perderai tempo. Il mio primo gioco è stato un casino completo, sono sicuro che è stato il caso per la maggior parte delle persone.
Altri problemi che sto affrontando sono come tenere traccia del tempo in modo conciso nel gioco e aggiornare i movimenti secondo necessità e come dire al renderer che deve ridisegnare.
Ciò di cui hai bisogno è la conoscenza di cosa sia un loop di gioco. Questo è un buon punto di partenza. Una volta che inizi a scrivere codice più complesso come la gestione della fisica, potresti prendere in considerazione loop con tempi di frame variabili, ma iniziare in piccolo. Per ora, per te è sufficiente un semplice loop di gioco a frame fisso.
Inoltre continuo a dover eseguire le funzioni Get e Set per il passaggio di vari flag da un oggetto a un altro, è una cattiva pratica?
Questa è più una domanda di ingegneria del software. Con il tempo vedrai quali dati devi proteggere e quali sono al sicuro. Probabilmente è meglio se si implementa solo una funzione e poi si vede ciò che non è esposto al di fuori di essa e può essere trattato come un dato pubblico.
È tutta una questione di esperienza. Scriverai una classe di telecamere, quindi vedrai quale funzionalità desideri da essa accanto alle matrici di trasformazione. Se vuoi qualche consiglio immediato, dovrei dire, implementare le ossa nude, estenderle in seguito.
Articoli e libri:
- Sviluppo del motore di gioco
Questi libri parlano dell'architettura dei moderni motori di gioco e condutture. Ti daranno una buona panoramica della tecnologia di base. Raccomando il primo libro, se devi scegliere, è meno "distorto" verso determinate tecnologie, anche se alla fine vorresti probabilmente superare entrambe, poiché sono ottime fonti di conoscenza.
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135
http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806
http://ogldev.atspace.co.uk/index.html
http://www.arcsynthesis.org/gltut/index.html
http://www.opengl.org/sdk/docs/man3/
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/
http://www.opengl.org/sdk/docs/manglsl/
- Rilevazione di collisioni
http://www.peroxide.dk/papers/collision/collision.pdf
(Sto collegando questo perché ho trovato difficile trovare articoli su come viene eseguito il corretto rilevamento delle collisioni 3D.)
Ci sono più libri, ma quando avrai finito (in particolare l'architettura di Game Engine), saprai meglio cosa vuoi.
A proposito, sto ancora usando Freeglut, mi consiglieresti di passare a un sistema di finestre migliore prima di progredire o dopo aver compreso meglio OpenGL?
WinAPI, se ritieni di avere tempo e voglia di imparare la programmazione di Windows (se stai sviluppando per Windows). FreeGLUT va bene per l'apprendimento, ma alla fine vorrai più funzionalità. Tuttavia, se vuoi seguire la strada completamente diversa, puoi avviare OpenGL con librerie come SFML o SDL. Resta con FreeGLUT, a meno che tu non sia testardo come me. Sono andato dritto per WinAPI.