#1
|
|||
|
|||
Animation
Hi every one,
I'm doing an application to teach children cross road. I'm trying to get the codes that I need. I have imported a character and placed a camera beside the character to act as first point of view, then I have assigned mouse movement to look around and arrow keys to move the character. I want to press a certain key and animate my character(moving from a point to another), can anyone please tell me how to do it. I have done it before but now combining it with this code it doesn't work. I want the same character to be animated. Here is the code : Code:
import viz viz.go() viz.clearcolor(0.5,0.5,1) MOVE_SPEED = 5 # how fast the viewpoint move TURN_SPEED = 60 # how fast the view point rotate viz.add('tut_ground.wrl') char = viz.add('vcc_male.cfg') char.state(1) intro = viz.add('front.3Ds') intro.translate(0,0,100) intro.visible(viz.OFF) view = viz.MainView #view.setPosition(0,1.7,0) car = viz.add('mini.osgx') car.setPosition(5,0,10) def mytimer(num): if viz.iskeydown(viz.KEY_DOWN): view.move(0,0,-MOVE_SPEED*viz.elapsed(),viz.BODY_ORI) elif viz.iskeydown(viz.KEY_UP): view.move(0,0,MOVE_SPEED*viz.elapsed(),viz.BODY_ORI) elif viz.iskeydown(viz.KEY_RIGHT): view.rotate(0,1,0,TURN_SPEED*viz.elapsed(),viz.BODY_ORI,viz.REL_PARENT) elif viz.iskeydown(viz.KEY_LEFT): view.rotate(0,1,0,-TURN_SPEED*viz.elapsed(),viz.BODY_ORI,viz.REL_PARENT) updatechar() viz.callback(viz.TIMER_EVENT,mytimer) viz.starttimer(0,0.01,viz.FOREVER) def updatechar(): #translate the character to the position of the viewpoint char.translate(view.get(viz.HEAD_POS)) #rotate the character to the same orientation as the BODY_ORI. char.rotate(view.get(viz.BODY_AXISANGLE)) #move the character beside the view. char.translate(0.4,-1.8,0,viz.REL_LOCAL) #viz.REL_LOCAL. This tells vizard to translate the car relative to its local coordinate system (i.e. relative to the direction the car is facing). def mousemove(e): #gets the Euler angle rotation of the HEAD_ORI euler = view.get(viz.HEAD_EULER) #adding the x movement of the mouse to the current yaw(we multiply the x movement by 0.1. This is to decrease the sensitivity of the movement) euler[0] += e.dx*0.1 #adds the y movement of the mouse to the current pitch. We need to negate the value since a positive pitch value means rotating down, but moving the mouse down means having a negative y movement. euler[1] += -e.dy*0.1 #clamping the pitch value between -90 and 90, since we don't want to let the user look down or up so much that they end up upside down. euler[1] = viz.clamp(euler[1],-90.0,90.0) #rotating the HEAD_ORI of the viewpoint by the new euler angle rotation view.rotate(euler,viz.HEAD_ORI) viz.callback(viz.MOUSE_MOVE_EVENT,mousemove) #Turn off built in mouse viz.setMouseOverride() #Hide cursor viz.cursor(viz.OFF) def mousedown(button): if button == viz.MOUSEBUTTON_LEFT: view.reset(viz.HEAD_ORI) elif button == viz.MOUSEBUTTON_RIGHT: view.reset(viz.BODY_ORI|viz.HEAD_POS) updatechar() viz.callback(viz.MOUSEBUTTON_EVENT,mousedown) |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
speed on animation path | whj | Vizard | 8 | 11-17-2008 07:41 PM |
Animation Tracks.... | k_iwan | Vizard | 2 | 03-26-2007 05:52 PM |
Jumpy animation | Elizabeth S | Vizard | 1 | 11-08-2006 02:11 PM |
animation sequence | pkhoosh | Vizard | 2 | 01-23-2006 08:03 AM |
avatar animation problems | jrodman | Vizard | 1 | 01-18-2006 09:12 AM |