ThreeVR(ThreeJS)如何在相机四元数上替换Y旋转?

时间:2015-10-03 22:31:35

标签: rotation three.js quaternions

我正在使用threeVR制作360度全景照片。它使用移动设备方向在球体内旋转相机,并允许用户在触摸时手动拖动球体。

但是,当用户松开触摸时,相机会跳回设备旋转。我想修改此行为,以便当用户释放触摸时,相机会保持当前围绕Y轴的旋转(但不是X和Z)。

我不理解四元数的数学,但我尝试修改DeviceOrientationController.js上的方法updateDeviceMove来添加以下代码,它确实适用于Y轴,但是它与Z轴相混淆。

// manuallyMoved is a flag that I set to true on touchend event
// objQuat is the rotation of the camera after user dragged the view 
// deviceQuat is the rotation to be applied, obtained from device orientation values
// The code below replaces the line:
// this.object.quaternion.copy( deviceQuat );

if( manuallyMoved ) {
    objY = rotation.setFromQuaternion( objQuat, 'YXZ' ).y;
    realY = rotation.setFromQuaternion( deviceQuat, 'YXZ' ).y;
    manQuat = new THREE.Quaternion().setFromAxisAngle( new THREE.Vector3(0,1,0), (objY - realY) );
    deviceQuat.multiply( manQuat );
    manuallyMoved = false;
}else{
    this.object.quaternion.slerp( deviceQuat, 0.07 );
}

由于代码与Z值混淆,我认为setFromAxisAngle可能不是这样做的。如何修改deviceQuat以应用拖动的Y旋转,但允许相机从那里使用设备方向?

这是使用随机图像的link to my demo

0 个答案:

没有答案