View Single Post
  #2  
Old 05-05-2010, 12:22 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
The following example shows how to set the position and orientation of the shadow projector. It moves in a circle around the avatar and turns so that it is always pointed at the avatar.
Code:
import viz
viz.go()

#Add ground model
ground = viz.add('tut_ground.wrl')

#Add avatar
avatar = viz.add('vcc_female.cfg',euler=(180,0,0))
avatar.state(5)

#Shadow resolution (power of two)
#Higher values mean sharper shadows, but take more texture memory
SHADOW_RES = 256

#Postion of shadow projector
SHADOW_POS = [0,0,0]

#Controls size of orthographic shadow projector
#Large values mean larger area is covered, but resolution will be diluted
SHADOW_AREA = [5,5]

#Create shadow projector
import Shadow
shadow = Shadow.ShadowProjector(size=SHADOW_RES,pos=SHADOW_POS,area=SHADOW_AREA)
#Add avatar as a shadow caster
shadow.addCaster(avatar)

#Add ground as shadow receiver
shadow.addReceiver(ground)

import math

SPEED = 0.5
def moveProjector():
    t = viz.tick() * SPEED
     
    # Move projector in a circle
    newX = -math.cos(t) * 2
    newZ = math.sin(t) * 2
    shadow.setPosition([newX, 2, newZ])
    shadow.setEuler([t/math.pi * 180,40,0])

vizact.ontimer(0,moveProjector)	
	
import vizcam
viz.cam.setHandler(vizcam.PivotNavigate(center=[0,1.5,0],distance=7))
Reply With Quote