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

One thought on “3D Grafik mit Python

  1. mhh wie die Programmierung gegen Branchenriesen wie Cinema 4D und co ankommt ist da die Frage. Ich denke dass es bei 3D-Visualisierung nicht nur auf Performance sonder auch auf Connectivity ankommt.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s