Spielplatz

3D-Welten mit Python und Panda3D

01.11.2006
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
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(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!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...