3D Grafik mit Python


Schaut man einmal um, was laut Google Scholar eine gute Programmiersprache zur Spieleentwicklung ist, so wird dort von der überwältigenden Mehrheit der Autoren die Meinung vertreten, dass C++ das Nonplusultra ist. Die Anzahl der Lehrbücher ist groß, es gibt sogar welche die auf Deutsch verfasst sind und in den letzten 2 Jahren geschrieben wurden. Leider offenbart sich beim Blick in derartige Fachliteratur das blanke Grauen. Der Neueinsteiger wird mit dem vollen Sprachumfang von C++ traktiert. Polymorphe Vererbung, Pointer und copy-Konstruktoren werden bereits im Einleitungskapitel diskutiert auf die dann im weiteren Verlauf aufgebaut wird. Weiterhin heißt es, dass gute Spiele wenigstens aus 10000 Lines of Code in C++ bestehen und alles darunter ist die Amateurliga.

Ganz unrecht haben die Autoren nicht, und was in den Büchern erläutern ist durchweg korrekt. Aber, die Einstiegshürde ist viel zu hoch, auf diese Weise ein Spiel zu entwickeln ist für Leute außerhalb der Spielebranche nicht möglich. Die nach meiner Ansicht nach bessere Wahl ist die Programmiersprache Python. Es gibt dort zwar nicht soviele Bücher die speziell für Spieleentwicklung unter Linux geschrieben wurden, aber immerhin wird pygame noch relativ ausführlich erläutert. Solange man 2D Plattformer Games entwickeln will kommt man mit Linux+pygame+eine Anleitung von Google Scholar schon ziemlich weit. Die Programmierung geht deutlich leichter von der Hand als mit C++ und das Ergebnis kann sich durchaus sehen lassen. Schwieriger wird es jedoch, wenn man 3D Spiele entwickeln möchte. Hier gibt es leider keine Anleitung.

Ganz unmöglich ist das jedoch nicht, es ist nur weniger gut dokumentiert. Als Basis sollte man den Begriff OpenGL kennen, es handelt sich dabei um einen Grafikstandard der in Linux GUIs wie GTK+ und Qt eingesetzt wird um 3D Inhalte anzuzeigen und der Zugriff hat auf die Grafikkarte. Um in OpenGL zu programmieren würde man normalerweise eine Game/Grafik-Engine einsetzen wie z.B. Unity3d. Die ist zwar auch für Linux verfügbar ist jedoch kostenpflichtig. Und OpenSource Alternativen wie Ogre3d, oder Panda3D sind leider keine gute Wahl. Sie sind grottenschlecht dokumentiert und selbst einfachste Dinge wie das Zeichnen eines 3d Cube auf den Bildschirms erfordert bereits sehr tiefe Kenntnisse. Es ist nicht komplett unmöglich, aber es ist nicht geeignet für Einsteiger.

Einen halbwegs leichten Zugang zu der Thematik „3D Grafik mit Python und Linux“ bietet der Blogpost https://pythonprogramming.net/opengl-rotating-cube-example-pyopengl-tutorial/ Dort werden zwei Dinge verwendet: pygame und pyopengl. Beides muss man in Ubuntu zunächst über den Paketmanager installieren, dann aber kann man das Beispielprogramm starten und erhält die folgende Grafik:

opengl

Der Vorteil bei diesem Ansatz ist, dass es sehr weit unten anfängt. Es werden Punkte im Raum definiert, zwischen diesen dann Edges (Linien) gezogen werden und zum Schluss wird in der pygame Gameloop das Objekt rotiert. Bemerkenswert ist vor allem, was in der Grafik alles nicht enthalten ist: es gibt keine animierten Charaktere, keine Physik-Engine, keine Mouse-Listener, keine Texturen und keine Lichtquellen. Stattdessen wird einem minimalistischen Ansatz bei dem wirklich nur ein 3d Cube angezeigt wird und sonst gar nichts. Gerade für Einsteiger ist das ein guter Zugang, weil klar ist wie man das System erweitern muss, wenn man ein Spiel daraus machen möchte.

Von der Performance gibt es keine Probleme. Obwohl Python als Programmiersprache genutzt wird, ist dank OpenGL eine hohe Framerate möglich. Auch die CPU Auslastung geht bei der 3D Darstellung nicht auf 100% hoch, sondern ist kaum wahrnehmbar.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s