3D-Welten mit Python und Panda3D

Spielplatz

Es gibt zwar einige freie Spiele-Engines, doch nicht jede ist leicht zu programmieren. Panda3D vereinfacht durch die Skriptsprache Python den Einstieg, bietet aber auch Potenzial für Profis.

Die Erfinder von Micky Maus und Donald Duck hatten schon einige echte Themenparks gebaut, als sie beschlossen, in die virtuelle Welt des Internet einzusteigen. So begannen die Entwickler im Disney-VR-Studio im Jahr 2000 damit, eigene Software zu schreiben, die sie zum Bau ihres 3D-Online-Spiels Toontown verwenden konnten. Heraus kam Panda3D [1], eine Spiele-Engine, die sich mit der Skriptsprache Python verwenden lässt. 2002 stellte Disney das Paket unter eine freie Lizenz, damit Universitäten sich besser an dem Projekt beteiligen konnten.

Eine Game Engine wie Panda3D nimmt Spieleentwicklern einen Großteil der immer wiederkehrenden Aufgaben ab – so das Laden von Spielfiguren und Sounds, grundlegende Bewegungssteuerung und einiges mehr. Die Programmierung dieser Funktionen in der Sprache C++ gewährleistet die nötige Performance für weitgehend ruckelfreie Darstellung. Anwender der Engine machen von dieser Infrastruktur über Python Gebrauch, das weniger umständlich zu benutzen ist als C++. Grundlegende Python-Kenntnisse vermittelt zum Beispiel die entsprechende LinuxUser-Artikelreihe.

Die Installation der Panda-Engine gestaltet sich einfach – solange Sie über eine RPM- oder DPKG-basierte Distribution verfügen. Dafür finden Sie fertige Pakete auf der Heft-CD. Das Debian-Paket von der Homepage ließ sich auch unter dem neuesten Ubuntu installieren. Zum Funktionieren fehlte nur noch ein symbolischer Link von /usr/lib/libssl.so.0.9.8 auf /usr/lib/libssl.so.0.9.7. Andernfalls müssen Sie den Quellcode selbst kompilieren. Das fällt zwar nicht schwer, dauert aber etwas und setzt so manches Entwicklungspaket voraussetzt, zum Beispiel von OpenSSL und LibTIFF. Zum Übersetzen wechseln Sie ins Verzeichnis panda3d-1.2.3 und rufen makepanda/makepanda.py --everything auf. Ohne den letzten Parameter gestartet, gibt Makepanda die verschiedenen Optionen zur Kompilierung aus. Mehr Informationen zum Installieren bietet die Datei doc/INSTALL-MK.

Modell-Export

Prinzipiell setzen sich Spielewelten aus einfachen geometrischen Elementen zusammen, die realistischer erscheinen, wenn auf ihnen so genannte Texturen liegen – also Bilder echter Gegenstände. Möglichst große Realitätsnähe ist nicht immer das Ziel: So realisiert zum Beispiel Toontown eher einen Comic-artigen Charakter (Abbildung 1). Das ändert aber nichts an der Unterscheidung zwischen Geometrie und Oberflächeneigenschaft bei 3D-Modellen.

Abbildung 1: Disneys Online-Spiel Toontown wurde mit der freien Panda3D-Engine realisiert.

Die Modelle werden üblicherweise in spezialisierten Programmen gezeichnet und dann in ein Format umgewandelt, mit dem die 3D-Engine umgehen kann. Entsprechende Export-Plugins zum Panda3D-Format gibt es für die Windows-Profitools Maya, Softimage XSI und 3DStudio Max. Eine gute Alternative für Heimanwender stellt das Shareware-Programm Milkshape [2] dar, das viele auch zum Editieren von Quake-Modellen verwenden.

Dem Linux-Anwender bieten sich keine Alternativen: Er ist auf das 3D-Program Blender festgelegt. Von Haus aus beherrscht Blender das Panda3D-Format namens Egg nicht. Dafür muss der Anwender eins von drei existiertenden Plugins installieren, die jeweils unterschiedliche Beschränkungen aufweisen. Am weitesten entwickelt ist Chicken [3] vom peruanischen Programmierer Daniel Amthauer. Während dieser Artikel entstand, stellte er die grundlegend überarbeitete und verbesserte Version 1.0a seines Plugins fertig, die nun auch über eine brauchbare Dokumentation verfügt (Abbildung 2).

Abbildung 2: Das Blender-Plugin Chicken exportiert Modelle ins Panda-Format Egg.

Um Chicken zu installieren, entpacken Sie Zip-Datei im Verzeichnis .blender/scripts. Wenn Sie dann Blender starten, finden Sie den Egg-Export unter FileExportChicken.

Welt laden

Für die ersten Schritte mit der 3D-Engine sollen die mitgelieferten Beispieldateien genügen, die sich bei einer Standardinstallation in /usr/share/panda3d/models befinden. Das einfachste Panda3D-Skript lädt ein Modell und zeigt es an (Listing 1). Das Ergebnis dieses kurzen Skripts ist in Abbildung 3 zu sehen.

Zunächst lädt es das grundlegende Python-Modul direct.directbase.DirectStart. Daraufhin steht ein Objekt loader zur Verfügung, das eine Funktion loadModel anbietet, die das Modell schließlich lädt. Wie man sieht, fehlt beim Aufruf die Dateierweiterung .egg, die Engine findet das Modell auch ohne sie.

Die Lade-Funktion gibt ein Python-Objekt zurück, über das sich das geladene Modell im weiteren Programm ansprechen lässt. So verändert die Methode setPos() seine Position im Raum. Die erste Variable steht für die X-Koordinate, dann folgen Y und Z. Analog dazu verändert zum Beispiel setScale() die Größe des Objekts in den drei Dimensionen. Im Panda-Koordinatensystem zeigt aus Benutzersicht X nach rechts, Z nach oben und Y in den Bildschirm hinein.

Listing 1

import direct.directbase.DirectStart
panda = loader.loadModel("models/panda")
panda.reparentTo(render)
panda.setPos(0,30,-5)
run()
Abbildung 3: Ein fertiges Modell stellt Panda3 mit nur fünf Zeilen Python (Listing 1) dar.

Mit der Maus können Sie das Modell jetzt bereits drehen, verschieben und vergrößern. Probieren Sie dazu alle drei Maustasten aus. Die Rotation erscheint Ihnen vielleicht etwas eigenartig. Das liegt daran, dass der Rotationsmittelpunkt sich außerhalb des Modells befindet.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2016_06

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Aktuelle Fragen

thema ändern
a b, 29.05.2016 16:34, 0 Antworten
Hallo Linuxer zuerst alle eine schönen Sonntag, bevor ich meine Frage stelle. Ich habe Ubuntu 1...
Ideenwettbewerb
G.-P. Möller, 28.05.2016 10:57, 0 Antworten
Liebe User, im Rahmen eines großen Forschungsprojekts am Lehrstuhl für Technologie- und Innova...
Welche Drucker sind Linux-mint kompatibel?
Johannes Nacke, 20.05.2016 07:32, 4 Antworten
Hallo Ihr Lieben, ich bitte um mitteilung welche Drucker Kompatibel sind mit Linux-Mint. LG Joh...
MS LifeCam HD-5000 an Debian
Kay Michael, 13.04.2016 22:55, 0 Antworten
Hallo, ich versuche die oben erwähnte Cam an einem Thin Client mit Debian zu betreiben. Linux...
Import von Evolution nach KMail erzeugt nur leere Ordner
Klaus-Christian Falkner, 06.04.2016 12:57, 3 Antworten
Hallo, da ich vor einiger Zeit von Ubuntu auf Kubuntu umgestiegen bin, würde ich gerne meine E...