C++ -> Direct3D/OpenGL



  • Hi,

    erstmal - ich habe noch nie ein wirklich ernsthaftes Spiel geschrieben, also entschuldigt bitte falls ich etwas dummes frage.
    Soweit ich das mitbekommen habe werden die meisten (anspruchsvollen 3D) Spiele heutzutage mit C++ entwickelt. Allerdings sind sowohl OpenGL als auch Direct3D erstmal reine C Schnittstellen. Ist das "Standardvorgehen" beim schreiben einer eigenen Engine also sich erstmal C++-Wrapper für Direct3D/OpenGL zu schreiben? Oder übersehe ich hier etwas ganz gravierendes?



  • Hm.. keine Ahnung aber vielleicht verschiebt das ein Mod mal 😃



  • OpenGL ist eine rein prozedurale Schnittstelle, also das was man gemeinhin als "C Schnittstelle" bezeichnen würde. D3D dagegen ist eine COM Schnittstelle und damit eher objektorientiert. Aber natürlich kann man D3D auch von C aus verwenden, C und OOP schließt sich ja nicht aus. Ich seh jetzt erstmal jedenfalls keinen Grund warum man unbedingt einen Wrapper schreiben müsste, zumindest bei OpenGL würde man sich wohl ein paar ulitity Klassen schreiben aber die ganze API zu wrappen ist weder notwendig noch unbedingt sinnvoll. Meiner Erfahrung nach ist es besser mit der Abstraktion erst auf auf höherer Ebene zu beginnen, z.B. eine Klasse Renderer die eben eine Anwendungsspezifische Schnittstelle bietet für alles mögliche was die Anwendung eben so zeichnen möchte. Man sollte an dieser Stelle vielleicht auch gleich das Gerücht ausräumen dass man erstmal eine Engine schreiben muss um ein Spiel schreiben zu können. Auch wenn das eine weit verbreitete Vorstellung sein mag: Das ist Blödsinn. Wenn man ein wenig drüber nachdenkt wird eigentlich sofort klar dass wenn dann eher genau das Gegenteil der Fall ist. Oder hältst du jemanden der keine Erfahrung mit der Entwicklung von Spielen hat wirklich für geeignet um eine generische Komponente zu entwerfen die als Basis für die Entwicklung von Spielen dienen soll!? Nicht dass man nicht viel dabei lernen kann (ich kenn wen ders früher oft genug versucht hat 😉 ). Aber wenn du mich heute fragst dann würd ich sagen der imo bessere Ansatz für einen Anfänger ist es, einfach mal haufenweise Spiele zu entwickeln. Mit der Zeit kristallisieren sich dann die Dinge heraus die eine Engine ausmachen. Also erstmal ein paar Spiele entwickeln und dann vielleicht daraus eine Codebase extrahieren die dann später mal zu einer Engine werden kann.



  • Mit "einen OpenGL/D3D Wrapper schreiben" meinte ich auch eher Funktionen zum rendern/zeichnen und keinen vollständigen Wrapper. Es ging mir eher darum dass man in C++ doch trotzdem (normalerweise) erstmal eine Klasse um das ganze baut und über diese dann auf D3D/OpenGL zugreift. (Und eben keine direkten D3D/OpenGL Funktionen im eigentlichen Programmcode aufruft.)

    Das mit der Engine.. naja.. war auch eher auf "Funktionen zum zeichenen" bezogen 😃


Anmelden zum Antworten