View Single Post
  #1  
Old 03-31-2008, 10:19 AM
Frank Verberne Frank Verberne is offline
Member
 
Join Date: Mar 2008
Location: Netherlands
Posts: 148
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)
Reply With Quote