WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Looking through the eyes of an avatar (https://forum.worldviz.com/showthread.php?t=1428)

Frank Verberne 03-31-2008 10:19 AM

Looking through the eyes of an avatar
 
In my experiment, I want participants to see the world through the eyes of an avatar. Therefore, I linked het headbone of the avatar and the Mainview to the same tracker. This works great, but not perfect yet. The problem is that the MainView is inside the head of the avatar. When I update the position of the link MainView-tracker with the position of the headbone and I set that position 11 cm further on the X-axis, then it is solved when participants look one direction. However, when they turn their heads 180 degrees (look the other way), the view is translated to the back of the head of the avatar. So what I would like is the MainView to be in front of the eyes of the avatar (not INSIDE its head) no matter where the participant looks at. How can I do that? I hope my question is clear, the code below should make things clearer.
Code:

#Link all bones to trackers of pp1
def updateBones_pp1():
        for i in range(0, len(link_bones_pp1)):
                if link_bones_pp1[i] != 'None':
                        bone = avatar.getBone(link_bones_pp1[i])
                        euler = tracker[i].getEuler()
                        bone.setEuler(euler,viz.AVATAR_WORLD)
                        if link_bones_pp1[i] == 'skel_Head01':
                                pos = tracker[i].getPosition()
                                link.setPos([0,0,pos[2]+.11])

#Depending on the subjectnumber, create an avatar and set the position of the viewpoint.
if subject != '':
        condition = int(subject)%4
        if condition == 0 or condition == 1:                      #Condition 4 or 1
                global link
                link = viz.link(tracker[19], viz.MainView)  #Link MainView to headtracker
                avatar = viz.add(avatarlist[condition])      #Avatar = Dutch for condition 4 and Moroccan for condition 1
                lock_all_bones(avatar)
                avatarLink(avatar, 1)
                vizact.ontimer(0,updateBones_pp1)                        #Update linkbones
        elif condition == 2 or condition == 3:                          #Condition 2 or 3
                avatar = viz.add(avatarlist[condition-2])    #Avatar = Dutch for condition 2 and Moroccan for condition 3
                viz.MainView.setPosition(0,1.90,-5.5)                #(Y,Z,X) third person perspective
        viz.MainView.getHeadLight().disable()
        light_avatar = viz.addLight()
else:
        print 'Geen proefpersoonnummer ingevuld! Dit is de testmode!'
        avatar = viz.add(avatarlist[0])
        lock_all_bones(avatar)
        avatarLink(avatar,1)
        vizact.ontimer(0,updateBones_pp1)
avatar.scale(0.33,0.33,0.33)
light_mirror = viz.addLight()
light_mirror.position(0,0,3,0)


farshizzo 03-31-2008 12:27 PM

You will need to use the link.preTrans operator to offset the link position. For example, if the the eyes of the avatar are 4 centimeters forward from the head position then you would use the following code:
Code:

link = viz.link(headBone,viz.MainView)
link.preTrans([0,0,0.04])


Frank Verberne 04-01-2008 05:52 AM

Thanks again farshizzo! Now it works perfectly.


All times are GMT -7. The time now is 06:05 PM.

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