我使用Three.js使用JSONLoader加载JSON模型。我也使用TrackballControls.js进行基本交互。如果我移动(PAN)对象,旋转的工作方式会有所不同。如何在移动(PAN)后将旋转更改为模型的中心?
提前致谢。
答案 0 :(得分:2)
由于轨迹球控件旋转相机而不是网格。平移后旋转似乎很奇怪。因此,不使用轨迹球控制,而是根据四元数旋转网格。 在mousemove事件中包含此代码
trackBallControls.noRotate = true;
if (isDragging === true) {
var deltaMove = {
x: event.offsetX -previousMousePosition.x,
y: event.offsetY -previousMousePosition.y
};
var deltaRotationQuaternion = new THREE.Quaternion()
.setFromEuler(new THREE.Euler(toRadians(deltaMove.y * 0.3),
toRadians(deltaMove.x * 0.3),
0,
'XYZ'
));
if (event.which === 1) {
mesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, mesh.quaternion);
}
}
previousMousePosition = {
x: event.offsetX,
y: event.offsetY
};
在鼠标注册事件中,设置isDragging为false。 在mousedown中,设置isDragging为true。
function toRadians(angle) {
return angle * (Math.PI / 180);
}