WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   View (https://forum.worldviz.com/showthread.php?t=1902)

nlfrnassimi 03-11-2009 08:51 PM

View
 
I have tried to link my view to my avatar and make it first point of view. I have assigned r key to make avatar and view go to a certain point and also created another view to be able to change my view. I have tried to look side, up and down by pressing certain keys but they don't work properly and another problem is that my animated path (r key ) doesn't work now.

Please take a look at my code. and tell me what are the mistakes that I have made.



import viz

viz.go()

viz.add('tut_ground.wrl')

view = viz.MainView

character = viz.add('vcc_male.cfg') # Add a CAL3D based avatar
character.state(1) # Activate the walking state

viewLink = viz.link( character, view)
viewLink.setDstFlag( viz.LINK_HEAD)
viewLink.preTrans( [-.4, .1, 0] )

vizact.whilekeydown(viz.KEY_UP,character.rotate,1, 0,0,vizact.elapsed(-15),viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_DOWN,character.rotate,-1,0,0,vizact.elapsed(-15),viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_RIGHT,character.rotate ,0,1,0,vizact.elapsed(15),viz.REL_PARENT)
vizact.whilekeydown(viz.KEY_LEFT,character.rotate, 0,1,0,vizact.elapsed(-15),viz.REL_PARENT)


def characterWalk (key):
if key == 'r':
character.state(2)
walk = vizact.walkTo([10,0,0],1,45)
character.addAction(walk)

viz.callback(viz.KEYBOARD_EVENT, characterWalk)

secondView = viz.addView()
secondView.setPosition(10,2,20)
secondView.rotate(220)

def anotherView (key):
if key == 'v':
viz.MainWindow.viewpoint(secondView)

viz.callback(viz.KEYBOARD_EVENT, anotherView,priority=1)

nlfrnassimi 03-11-2009 10:06 PM

I found the solution :)

nlfrnassimi 03-11-2009 11:18 PM

I was able to make my view move and rotate correctly, but the problem is that I can't fix my view to be beside the avatar's head. and I also want to press a key for example 'r' and move the character to a certain point but anything I tried didn't work at all.

Please take a look at my 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)

view = viz.MainView
view.setPosition(0,1.7,0)
car = viz.add('mini.osgx')
car.translate(5,0,5)

def mytimer(num):
Quote:

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_OR I)
elif viz.iskeydown(viz.KEY_RIGHT):
view.rotate(0,1,0,TURN_SPEED*viz.elapsed(),viz.BOD Y_ORI,viz.REL_PARENT)
elif viz.iskeydown(viz.KEY_LEFT):
view.rotate(0,1,0,-TURN_SPEED*viz.elapsed(),viz.BODY_ORI,viz.REL_PARE NT)
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,-0.35,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)

nlfrnassimi 03-11-2009 11:38 PM

sorry about the code I can't get the code indentation. please tell me how to do that.

moooh 03-12-2009 05:25 AM

just post the code inbetween the code tags [ code] code goes here [ /code]
without the extra spaces I added in order for the tags to show up as text


All times are GMT -7. The time now is 10:43 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC