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)