Home / LinuxUser / 2006 / 11 / 3D-Welten mit Python und Panda3D

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(243 Punkte bei 15 Stimmen)
Re: War doch klar...
(179 Punkte bei 5 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Kubuntu verliert Finanzierung
(130 Punkte bei 4 Stimmen)
Offen fürs Geschäft
(80 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

1652 Hits
Wertung: 69 Punkte (1 Stimme)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

Suse 12.1 Bootvorgang bleibt seit Update stehen
Wimpy *, 12.02.2012 09:22, 0 Antworten
Seit Update auf Kernel 3.1.9-1.4-desktop i686 bleibt der Bootvorgang stehen. Es erscheint der gr...
N24 Stick (Huawei E173) und Ubuntu 11.04
Patrick Obenauer, 11.02.2012 11:54, 1 Antworten
Hallo zusammen! Ich benutze einen alten Laptop, der mit Ubuntu 11.04 flott und problemlos läuft....
Wie kann man beim Einsatz von Compiz die Fenster-Dekoration einstellen?
GoaSkin , 10.02.2012 20:12, 0 Antworten
Hallo, ich nutze Linux Mint mit dem Gnome-Derivat Mate. Da die Distribution Compiz nicht autom...
rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...
Skype für 64-Bit-Prozessor u. Suse 12.1
Klaus Sigerist, 05.02.2012 11:39, 3 Antworten
Hallo Gemeinde! Ich bin nur ein einfacher Nutzer und habe Probleme mit der Installation von Skyp...