View Single Post
  #5  
Old 05-12-2009, 01:09 PM
Penguin Penguin is offline
Member
 
Join Date: Mar 2009
Posts: 14
Step by step I'm able to locate the source of the problem: I use the sphere in a hierarchical group order. The following code reproduces the strange behaviour of rotating.

Code:
import viz
import vizmat
import vizshape

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

root = viz.add(viz.GROUP, parent=viz.WORLD)
root.setPosition([0,1.8,3],viz.REL_GLOBAL)

node = vizshape.addSphere(pos=[0,0,0], parent=root)
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)
Reply With Quote