NoUserOrg

Reto Spoerri : Game Design : Zürich

ProgrammingPanda3dTutorialDerSzenengraph

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">

  1. verschiebe den panda auf die positionX 1 relativ zum parent objekt (render)

panda.setPos( 1,0,0 )

  1. verschieben den panda relativ zu sich selbst um 1 in der x-achse

panda.setPos( panda, Vec3(1,0,0) )

  1. rotiere den panda um 10° (nach rechts schauen), relativ zu sich selbst.

panda.setHpr( panda, Vec3(10,0,0) )

  1. rotiere den panda so dass er in 10° nach rechts schaut

panda.setHpr( Vec3(10,0,0) ) </code>