View Single Post
  #2  
Old 05-11-2009, 04:32 PM
Gladsomebeast Gladsomebeast is offline
Member
 
Join Date: Mar 2005
Location: Isla Vizta, CA
Posts: 397
Interesting goal. I whipped up a bit of code that orbits the sphere by telling the sphere to "lookat" the intersection point, then rotating the sphere the initial offset amount.

The code is not quite right yet because sustained clicking on the same point rolls the sphere around that point. Maybe somebody knows whats wrong?

Code:
import viz
import vizmat
import vizshape

viz.go()
viz.mouse.setOverride(viz.ON)

node = vizshape.addSphere(pos=[0, 1.8, 3])
node.texture(viz.add('image2.jpg'))
rotation = None
def onGrab():
	global rotation
	intersectionItem = viz.pick(1)
	if intersectionItem.valid:
		src_ori = vizmat.Quat(node.getQuat(viz.ABS_GLOBAL))
		node.lookat(intersectionItem.point, viz.ABS_GLOBAL)
		dst_ori = vizmat.Quat(node.getQuat(viz.ABS_GLOBAL))
		#D = O * S so O = D * 1/S
		rotation =  src_ori * dst_ori.inverse()
		
vizact.onmousedown(viz.MOUSEBUTTON_LEFT, onGrab)

def moveSphere():
	if rotation:
		intersectionItem = viz.pick(1)
		if intersectionItem.valid:
			node.lookat(intersectionItem.point)
			node.setQuat(rotation, viz.ABS_LOCAL)
		
vizact.onupdate(viz.PRIORITY_DEFAULT, moveSphere)
		
def endGrab():
	global rotation
	rotation = None
vizact.onmouseup(viz.MOUSEBUTTON_LEFT, endGrab)
__________________
Paul Elliott
WorldViz LLC
Reply With Quote