WorldViz User Forum Problems with getting head bone rotation right
 Register FAQ Search Today's Posts Mark Forums Read

#1
02-11-2009, 12:53 PM
 Enlil Member Join Date: May 2008 Posts: 61
Problems with getting head bone rotation right

Hello,

I am trying to write some code that causes a head to turn and face an object. I looked at the lookat() commands, and those didn't do what we were looking for, so I am writing it from scratch.

Now, I have a routine that takes two points and gives the euler angle that will point the first at the second. I can use this to turn the camera towards an object. However, when I try to do the same thing with the head or neck bone of an avatar, it does not work like I expected.

The code is here:

def GetTargetAngleToFace(position1, position2):
# Find horizontal target angle
x_pos = position1[X_POS] - position2[X_POS]
z_pos = position1[Z_POS] - position2[Z_POS]
horiz_angle = math.degrees(math.atan2(x_pos, z_pos))
#find vertical target angle
vert_x = math.sqrt(x_pos*x_pos + z_pos*z_pos)
y_pos = position1[Y_POS] - position2[Y_POS]
vert_angle = -math.degrees(math.atan2(y_pos, vert_x))
#print "Angles: H: " + str(horiz_angle) + " V: " + str(vert_angle)
return [horiz_angle, vert_angle, 0]

where self.HeadBone is the locked 'Bip01 Head' of the vcc_female model that comes with vizard.

What I get is the head tilting to not at all the same euler as target_euler. For that matter, if I just get the current euler of the head and change one element of it, then put it back in with setEuler in viz.ABS_GLOBAL mode, I get a different value when I do a getEuler in viz.ABS_GLOBAL mode. So I figure I am doing something wrong. Could anyone help me here?

Thanks,
Christian
#2
02-13-2009, 09:45 AM
 farshizzo WorldViz Team Member Join Date: Mar 2003 Posts: 2,849
You should be able to use the bone.lookat command to have the head face a certain position. Here is a sample script:
Code:
```import viz
import vizact
viz.go()

#Create animating ball

#Create male avatar
avatar1.state(1)

#Create female avatar
avatar2.state(1)

"""Update avatars to look at ball position"""
pos = ball.getPosition()

viz.MainView.move(0,0,-5)```
#3
02-13-2009, 10:24 AM
 Enlil Member Join Date: May 2008 Posts: 61
We require finer control than lookat provides, but I solved the problem - it appears that mode = viz.ABS_GLOBAL does not work in python, though I used viz.AVATAR_WORLD

Thanks for the help in any case.

Christian

 Thread Tools Display Modes Rate This Thread Linear Mode Rate This Thread: 5 : Excellent 4 : Good 3 : Average 2 : Bad 1 : Terrible

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is Off Forum Rules
 Forum Jump User Control Panel Private Messages Subscriptions Who's Online Search Forums Forums Home Announcements Vizard Precision Position Tracker (PPT) Plug-in development

 Similar Threads Thread Thread Starter Forum Replies Last Post Frank Verberne Vizard 5 06-04-2008 11:42 AM S.Telemaque Vizard 0 04-01-2007 10:01 PM S.Telemaque Vizard 3 03-27-2007 07:18 PM Greenwu Vizard 1 07-27-2006 10:32 AM VAmanda Vizard 3 09-21-2005 04:57 PM

All times are GMT -7. The time now is 02:46 PM.