View Single Post
  #3  
Old 01-04-2017, 11:44 PM
imnotamember imnotamember is offline
Member
 
Join Date: Jan 2017
Posts: 2
Thanks Jeff,

While that is really helpful (helped resolve some other issues) it didn't quite resolve my problem. The problem I'm stuck on is how to have the arrow point to the avatar while remaining independent from the main view's orientation. In the current situation, it is now independent of the main view but not pointing toward the avatar. I have a feeling I need to unlink the arrow from the avatar but then it becomes dependent on the main view's orientation again.

In the post you linked to you described it as an HUD, which is essentially what I'm going for. I just want this arrow to act like a compass that is always pointing toward the avatar. Here is my integration of your post-linked code and my own:
Code:
import viz
import vizact
import vizshape

viz.setMultiSample(4)
viz.fov(60)
viz.go()

viz.MainView.move([0,0,-1])

#Create skylight
viz.MainView.getHeadLight().disable()
sky_light = viz.addLight(euler=(0,90,0))
sky_light.position(0,0,-1,0)
sky_light.color(viz.WHITE)
sky_light.ambient([0.9,0.9,1])

#Add the gallery model
gallery = viz.addChild('gallery.osgb')

#Add audio
music = viz.addAudio('bach_air.mid',loop=1)
music.loop(viz.ON)
music.play()

#Add an avatar
avatar = viz.addAvatar('vcc_male2.cfg',pos=[0,0,1])
avatar.state(1)

#Create static drop shadow to avatar
shadow_texture = viz.addTexture('shadow.png')
shadow = vizshape.addQuad(parent=avatar,axis=vizshape.AXIS_Y)
shadow.texture(shadow_texture)
shadow.zoffset()

#Move avatar around the room with a sequence of walk, turn, and wait actions

#Create action to wait 5-10 seconds
RandomWait = vizact.waittime(vizact.randfloat(5,10))

#A list of painting locations
avatarMove = [[-3.7,2.2,300],[-3.7,6.5,270],[0,8,0],[3.7,6.5,90],[3.7,2.6,90],[3.7,1,130]]
actions = []
for loc in avatarMove:
	#Add an action to walk to the next painting, turn towards it, and wait a few seconds
	actions.append(vizact.method.playsound('footsteps.wav',viz.LOOP))
	actions.append(vizact.walkTo([loc[0],0,loc[1]],turnSpeed=250.0))
	actions.append(vizact.method.playsound('footsteps.wav',viz.STOP))
	actions.append(vizact.turn(loc[2],250.0))
	actions.append(RandomWait)

#Repeat the sequence of actions forever
avatar.addAction(vizact.sequence(actions,viz.FOREVER))
DESKTOP_MODE = True
canvas = viz.addGUICanvas()
canvas.alignment(viz.ALIGN_CENTER)
canvas.setPosition([0,-1,0])
canvas.setRenderWorldOverlay([800, 600], fov=40.0, distance=3.0)
canvasUpscale = [500, 500, 500]
arrow = vizshape.addArrow(color=viz.GREEN,parent=canvas)
arrow.setScale(200,200,200)
link = viz.link(gallery, arrow, mask=viz.LINK_ORI)
link.postMultInverseLinkable(viz.MainView)

def updateArrow():
	arrow.lookAt(avatar.getPosition())
	
vizact.ontimer(0,updateArrow)
Reply With Quote