Panda3D

Bild des Benutzers manuel

Eine freie 3D Engine mit vielen Features mit Python und C++ Bindings.
Die Engine wird/wurde unter anderem von Disney benutzt und mitentwickelt.

Produkte die Panda3D nutzen:

  • Disney's Toontown
  • Disney's Pirates of the Caribbean Online
  • SimOps Studios: Code3D
  • MSA's Thermal Enforcer
  • Little Mermaid Pinball, Aladdin Pinball, and Pirates Pinball

Freie Softwareprojekte die Panda3D verwenden:

  • Angels Fall First: Second Antarean War
  • La Granja de Los Poderosos
  • HeartSeed
  • Herdelia
  • Vikings
  • Limit Load

Features

Shader Generation
Many advanced rendering techniques now fully automatic:

  • Special Maps: Normal Map, Gloss Map, Glow Map
  • HDR Rendering: Tone Mapping, Bloom Filter
  • Cel Shading: Threshold Lighting, Inking
  • More to come

        

Performance Monitoring
Powerful performance monitoring and optimization tools:

  • Identifies bottlenecks, both CPU and GPU
  • CPU time use decomposed into more than 250 categories
  • Counts meshes, polygons, textures, transforms, state changes, etc
  • Allows user-defined CPU-usage categories
  • Tools for batching and state-change minimization
  • Tools to merge textures and minimize texture switches

        

Full Python Integration
Automatically-generated wrappers expose full functionality of the engine.

  • Highly optimized: all core functionality in C++
  • Thoroughly-tested: two commercial MMOs in Python
  • Panda3D structures garbage collected when using Python
  • Manual and sample programs use Python

        

Just Works, Right out of the Box
No-hassle install:

  • Convenient installer packages for Windows, Mac OSX and Linux
  • Only one external dependency: working graphics driver
  • Sample programs run right out of Start Menu
  • No compilation step needed

        

Exposes Full Power of Graphics API
Modern OpenGL/DirectX features exposed directly to Panda3D user:

  • High-level shader language: Cg
  • Powerful interface between shaders and engine
  • Support for render-to-texture
  • Use of depth/shadow/stencil textures

        

Debugging Tools
Heavy emphasis on error tolerance and debuggable code:

  • Extreme resistance to crashing, even when errors are made
  • More than 5000 assertion-checks to catch errors early
  • Reference-counted data structures minimize memory leaks
  • Many tools to examine internal state (one shown here)

        

Mature, Complete System
Mature system used to deliver several commercial games.
Contains everything you need, not just the "sexy" stuff:

  • Converters for older file formats
  • Font file importers
  • Tool to package games into redistributables
  • Means to pack art assets into encrypted bundles
  • Lots of other boring but essential stuff

Die Installation

Als dependencies werden benötigt (mit Debian default install):

  • python-dev (version 2.6)
  • libosmesa-dev

Desweiteren benötigt man ggf noch weitere Pakete für spezielle Zwecke (zb Video abspielen mit der Engine usw)
Siehe: http://www.panda3d.org/manual/index.php/Dependencies

Dann kann man sich das source Paket auf der Homepage runterladen und entpacken.

wget http://www.panda3d.org/download/panda3d-1.7.0/panda3d-1.7.0.tar.gz
tar xzvf panda3d-1.7.0.tar.gz
cd panda3d-1.7.0

Gebaut wird mit:

makepanda/makepanda.py --everything --installer

Man erhällt ein .deb das man einfach installieren kann.

dpkg -i panda3d_1.7.0_*.deb

Testen der install

Gehe in den samples Ordner im source Verzeichnis und starte ein Beispiel mit "python Tut........."
Wenns funktioniert kann man mit dem coden loslegen.

cd samples/Ball-in-Maze
python Tut-Ball-in-Maze.py

Einfache Heightmap ;-)

Man braucht nur ein grayscale image in 8*x+1 Größe und ein Bild was man als Textur drüber legen will.

from direct.showbase.ShowBase import ShowBase
from panda3d.core import GeoMipTerrain
 
p3dApp = ShowBase()
 
terrain = GeoMipTerrain("mySimpleTerrain")
terrain.setHeightfield("map.png")
#terrain.setBruteforce(True)
 
# Set terrain properties
terrain.setBlockSize(32)
terrain.setNear(40)
terrain.setFar(100)
terrain.setFocalPoint(base.camera)
 
# Store the root NodePath for convenience
root = terrain.getRoot()
root.reparentTo(render)
# Set the "bumpmap" value higher means bigger mountains
root.setSz(50)
 
#Texture
terrain.setColorMap("color.png")
 
# Generate it.
terrain.generate()
# Add a task to keep updating the terrain (not needed if there is no change)
def updateTask(task):
  terrain.update()
  return task.cont
taskMgr.add(updateTask, "update")
 
p3dApp.run()

3D --> Blender

Eine 3D Engine am laufen zu haben ist nur die halbe Miete, man braucht auch noch eine 3D Welt die man dann programietechnisch verändert und manipulieren kann. Was wäre da besser geeignet als Blender, DIE 3d Modelsoftware unter Linux.

Panda3D verwendet ein eigenes Dateiformat um die Modelle von Blender und die Textur und collisionen und Bone Daten zu speichern: .egg

Um seine Blender Modelle in egg zu exportieren brauch man wie in der realen welt ein Huhn was einem das Ei legt.

Chicken ist ein Blender Plugin welches einem sehr einfach .eggs generieren lässt.

Screenshots und Videos