Ich werde eine richtige Antwort schreiben, da ich vor ungefähr 2 Monaten auf Ihrer Bühne war.
Ich habe angefangen, eine sehr einfache Spiel-Engine zu schreiben, damit ich OpenGL 3.x besser lernen kann, aber da ich unerfahren bin und nur wenig darüber weiß, wie ein 3D-Spiel gestaltet werden sollte, stoße ich normalerweise auf Probleme, bei denen mir klar wird, dass ich meine Klassen hätte gestalten sollen anders.
Mach dir keine Sorgen. Aufgrund Ihrer mangelnden Erfahrung werden Sie nie in der Lage sein, über alle Möglichkeiten und Möglichkeiten nachzudenken, wie eine bestimmte Klasse in Ihrem Motor verwendet wird. Am besten betrachten Sie die Hauptfunktionen der Klasse, implementieren sie und strukturieren sie später neu. Versuchen Sie nicht, Dinge zu überdenken, Sie werden in dieser Phase Ihre Zeit verschwenden. Mein erstes Spiel war ein komplettes Durcheinander, ich bin sicher, dass es bei den meisten Leuten der Fall war.
Andere Probleme, mit denen ich konfrontiert bin, sind, wie man die Zeit im Spiel präzise verfolgt und die Bewegung nach Bedarf aktualisiert und dem Renderer mitteilt, dass er neu zeichnen muss.
Was Sie brauchen, ist das Wissen darüber, was eine Spielschleife ist. Dies ist ein guter Anfang. Sobald Sie anfangen, komplexeren Code wie den Umgang mit Physik zu schreiben, sollten Sie Schleifen mit variablen Frame-Zeiten in Betracht ziehen, aber klein anfangen. Eine einfache Spielschleife mit festem Rahmen sollte Ihnen vorerst ausreichen.
Außerdem muss ich immer wieder Get- und Set-Funktionen erstellen, um verschiedene Flags von einem Objekt an ein anderes zu übergeben. Ist das eine schlechte Praxis?
Dies ist eher eine Frage der Softwareentwicklung. Mit der Zeit werden Sie sehen, welche Daten Sie schützen müssen und welche sicher sind. Es ist wahrscheinlich am besten, wenn Sie nur eine Funktion implementieren und dann sehen, was außerhalb davon nicht verfügbar ist und als öffentliche Daten behandelt werden kann.
Es ist alles eine Frage der Erfahrung. Sie schreiben eine Kameraklasse und sehen dann neben den Transformationsmatrizen, welche Funktionen Sie von ihr erwarten. Wenn Sie sofortige Tipps wünschen, muss ich sagen, implementieren Sie Bare Bones, erweitern Sie später.
Artikel und Bücher:
Diese Bücher sprechen über die Architektur moderner Game-Engines und Pipelines. Sie geben Ihnen einen guten Überblick über die zugrunde liegende Technologie. Ich empfehle das erste Buch, wenn Sie sich entscheiden müssen, es ist weniger "voreingenommen" gegenüber bestimmten Technologien, obwohl Sie am Ende wahrscheinlich beide durchstehen möchten, da sie großartige Wissensquellen sind.
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/
http://www.peroxide.dk/papers/collision/collision.pdf
(Ich verknüpfe dies, weil ich es schwierig fand, Artikel darüber zu finden, wie eine korrekte 3D-Kollisionserkennung durchgeführt wird.)
Es gibt mehr Bücher, aber wenn Sie damit fertig sind (insbesondere die Game Engine-Architektur), wissen Sie besser, was Sie wollen.
Übrigens, ich verwende immer noch Freeglut. Würden Sie mir empfehlen, vor dem Fortschreiten oder nachdem ich OpenGL besser verstanden habe, auf ein besseres Fenstersystem umzusteigen?
WinAPI, wenn Sie das Gefühl haben, Zeit und Willen zum Erlernen der Windows-Programmierung zu haben (wenn Sie für Windows entwickeln). FreeGLUT ist gut zum Lernen geeignet, aber irgendwann möchten Sie mehr Funktionalität. Wenn Sie jedoch einen völlig anderen Weg einschlagen möchten, können Sie OpenGL mit Bibliotheken wie SFML oder SDL starten. Bleib bei FreeGLUT, es sei denn, du bist stur wie ich. Ich habe mich direkt für WinAPI entschieden.