[C++][OpenGL] Plattfromübergreifend Spiele programmieren



  • Hallo!

    Da mich programmieren allgemein und Spieleentwicklung im speziellen sehr interessiert wollte ich das mal lernen.
    Ich habe auch schon gut Bücher über C++ und OpenGL, allerdings möchte ich dass meine Spiele plattformübergreifend laufen, also unter Linux, Mac und Windows.
    Bis jetzt kenne ich dafür zwei Möglichkeiten:
    - man kappselt alle Funktionen, die Betriebssystemspezifisch sind und wählt dann beim kompilieren aus, welches Betriebssystem man haben will.
    - man verwendet ein fertiges GUI-System, z. B. qt oder GTK

    Im Grunde sind die beiden Möglichkeiten mehr oder weniger das selbe, bei Ersterem hat man mehr Freiheiten, bei Letzterem weniger Aufwand.

    Ich habe mir jetzt qt installiert und es läuft auch schon, doch jetzt stellt sich mir die Frage ob das überhaupt geignet ist, ein Spiel zu entwickeln. Wie realisiert man denn da bitte die Main Loop? (Damit das Spiel auch weiterläuft ohne dass der Benutzer etwas tut)
    Wäre es nicht doch besser, dass ganze selbst zu kapseln?

    mfg, bloodycross



  • Für Spiele brauchst du in der Regel nur eine platforumunabhängige Bibliothek, die dir ein Fenster bereit stellt. Da bist du mit GLUt doch recht einfach beraten. Weitehin wäre da auch noch SDL.

    mfg olli



  • Du meinst, GLUT alleine würde reichen?
    Was ist denn mit Dateizugriffen? (Speichern, Texturen und Modelle laden)
    Platformunabhängig müsste ich also:
    - auf Dateien zugreifen können
    - Netzwerkezugriffe machen können (Multiplayer)
    - Fenster erstellen und damit arbeiten (Windowed / Fullscreen)

    Ich werde mir mal anschauen, was GLUT kann.

    mfg, bloodycross


  • Mod

    bloodycross schrieb:

    - auf Dateien zugreifen können

    z.b. fopen

    bloodycross schrieb:

    - Netzwerkezugriffe machen können (Multiplayer)

    eine eigene sockellib ist relativ trivial da es nur minimale unterschiede gibt, es gibt aber auch viele implementierungen dafuer im netz, ich glaube auch SDL_Net oder sowas. aber socket muesste simpel sein.

    - Fenster erstellen und damit arbeiten (Windowed / Fullscreen)

    ->glut oder sdl

    falls du wirklich gut arbeiten willst, musst du dir eh nen layer noch bauen um nicht von z.b. glut oder sdl abhaengig zu sein. es kann ja sein dass du mal merkst das eine lib nicht das kann was du brauchst und eine andere vieeel besser ist. da willst du ja nicht alle neu schreiben bzw umschreiben muessen, sondern nur deinen wrapper umschreiben.
    das ist auch ein teil von platformuebergreifung.😮



  • Das heißt ich muss es so machen wie ich ursprünglich dachte:

    Einen Wrapper schreiben, der dann GLUT oder SDL umhüllt.
    Dann mache ich mich mal an die Arbeit.

    mfg, bloodycross

    PS: Aus irgendeinem Grund dachte ich fopen ist Windows spezifisch. 😕



  • Wieso einen Wrapper um einen Wrapper?!

    Übrigens, glfw ist auch toll.


  • Mod

    .filmor schrieb:

    Wieso einen Wrapper um einen Wrapper?!

    die sdl wrappt deswegen den driverwrapper darunter damit man eine einfache saubere schnittstelle hat die plattform unabhaengig ist. der driver wrappt die schicht darunter deswegen, damit man verschiedene graphikkarten schnitstellen drunter haben kann. die graphikkartenschnittstellen (also die software wrapper um die hardware) bringen nen abstraktionslayer der es erlaubt z.b. hardwarefehler mittels software noch zu beheben, grakaspezifisch....)
    aber ich glaube das ist hier ein wenig offtopic und zu ausschweifend dir wrapper im vollen zu eklaeren, aber dazu gibt es sicher massig infos im netz.



  • Guck dir die Boost an (www.boost.org).
    Da haste viel dabei, auch Netzwerk (asio z.b.).

    Files kannste ansonsten einfach über iostreams machen, relative Pfade mit "/" als Trennzeichen gehen auf Windows und Unix, musst du vorher nurnoch das "current directory" richtig setzen (was Plattformabhängig ist, aber bloss ein paar Zeilen Code pro Plattform).

    Was Input angeht kann ich dir nicht helfen, gibts aber sicher auch was. SDL kann das schätze ich mal, bloss die will ich nicht empfehlen, weil ich sie nicht mag (ist aber rein persönlich *g*).



  • rapso schrieb:

    aber ich glaube das ist hier ein wenig offtopic und zu ausschweifend dir wrapper im vollen zu eklaeren, aber dazu gibt es sicher massig infos im netz.

    Ganz so schlimm stehts auch nicht um mich ;). Ich meinte nur, dass er nicht unbedingt die SDL oder GLUT wrappen muss, da die bereits stark genug abstrahiert sind.

    glfw kann auch Eingabe 😉


  • Mod

    .filmor schrieb:

    rapso schrieb:

    aber ich glaube das ist hier ein wenig offtopic und zu ausschweifend dir wrapper im vollen zu eklaeren, aber dazu gibt es sicher massig infos im netz.

    Ganz so schlimm stehts auch nicht um mich ;). Ich meinte nur, dass er nicht unbedingt die SDL oder GLUT wrappen muss, da die bereits stark genug abstrahiert sind.

    wenn man nach dieser idee ginge muesste man nie saubere layer in das eigene programm implementieren. doch das sollte man wenn man ein grosses sauberes projekt machen will, damit man nicht an jeder stelle von einer anderen api/lib abhaengig ist



  • Wobei ich dir eher zu SDL raten wuerd als zu GLUT, weil bei SDL hast du auch bereits Audio dabei, plus mehrere Dateiformate fuer Texturen. Ausserdem eine Menge Zusatzlibs, die sich natlos integrieren und dir Sockets (SDL_Net), erweiterte Audio-Funktionen (SDL_mixer), GUIs etc. etc. etc. bringen.


Anmelden zum Antworten