Filed in: Resources.ProgrammingPanda3dTutorialDerSzenengraph · Modified on : Fri, 31 Jul 09
====== Der Szenengraph ======
f<image scenegraph-image1.jpg? Der Szenengraph bestimmt das Parenting von Objekten. Ein Objekte bewegt sich immer relativ zum parentobjekt. Somit kann zBsp die Kamera hinter einem Charakter (3th person view) angehängt werden.
<code type="Python"> panda = loader.loadModel("panda") panda.reparentTo(render) base.camera.reparentTo( panda ) base.camera.setPos( 0, -20, 5 ) base.camera.lookAt( player ) </code>
Wird nun der player bewegt oder rotiert, dreht die Kamera automatisch mit.
Wird die Kamera nicht an einen andern NodePath gehängt bewegt sich diese relativ zu render. f<image scenegraph-image2.jpg?
Objekte können nicht nur relativ zu ihrem parent bewegt werden.
<code type="Python"> panda.setPos( 10,5,0 ) panda.setHpr( 30,0,0 ) panda.setScale( 1,1,1 ) </code>
Sondern auch relativ zu einem beliebigen andern NodePath.
<code type="Python"> panda.setPos( panda, Vec3(0,-1,0) ) base.camera.setPos( panda, Vec3(0,-1,0) ) </code>
Dies ist äusserst nützlich und sollte geübt werden.
Oft ist es nützlich NodePath's in der Szene einzubauen, nur um das Handling zu vereinfachen.
<code type="Python"> positionNode = render.attachNewNode( 'posNode' ) rotationNode = positionNode.attachNewNode( 'rotNode' ) base.camera.reparentTo( rotationNode ) base.camera.setPos( 0,-50,0 ) base.camera.lookAt( rotationNode ) rotationNode.setHpr( 0,30,0 ) </code>
Hiermit kann zBsp eine RTS-Style Kamerasteuerung aufgebaut werden. Über den positionNode wird festgelegt wohin die Kamera schaut, über den rotationNode wird der Winkel verändert mit der die Kamera auf den positionNode schaut, die y-position der Kamera bestimmt den Abstand.
Andere wege um den Panda zu manipulieren:
<code type="Python">
panda.setPos( 1,0,0 )
panda.setPos( panda, Vec3(1,0,0) )
panda.setHpr( panda, Vec3(10,0,0) )
panda.setHpr( Vec3(10,0,0) ) </code>