Few questions...

  1. Use base.win.requestProperties instead of WindowProperties.setDefault(wp) where “base” is your ShowBase object

self.dlight = DirectionalLight(‘dlight’) # Create Directional Light
self.dlight.setColor(VBase4(0.8, 0.8, 0.8, 3)) # Set light color
self.dlnp = render.attachNewNode(self.dlight) # Attach light to the scene graph. And create NodePath to manipulate it
self.dlnp.setHpr(7, -6, 0) # Set light orientation
self.dlnp.setPos(0, 8, 4) # For Directional light it not need because DL works independently of position
render.setLight(self.dlnp) # Set on what our light should affect. In this case it’s whole scene (render is a scene root), but you can set somethig like my_model.setLight(self.dlnp) and light should affect only on your model

  1. Collisions is quite complex question. In short: CollisionTraverser calculate yor collisions. base.cTrav - default traverser, which run every frame automatically. If you use another variable for traverser, then you can/should call traverse(NP) by hand when you need.
    Traverser provide information about collision (point, normal, e.t.c), but do nothing with collided models. Handlers (include CollisionHandlerPusher) work with collision information and do something with collided models. What they do is depends of handler type - push, generate event, e.t.c.

  2. direct.directbase.DirectStart just make ShowBase object for you, or you can create it by hand with class MyApp(ShowBase) in second case.

  3. from panda3d.core import LightAttrib