我是一名经验丰富的Javascript程序员,但却是一名Three.js菜鸟。我已经基于Three.js回购中的Molecule示例启动了一个项目:
http://threejs.org/examples/#css3d_molecules
pan操作的代码如下所示:
this.panCamera = (function(){
var mouseChange = new THREE.Vector2(),
objectUp = new THREE.Vector3(),
pan = new THREE.Vector3();
return function () {
mouseChange.copy( _panEnd ).sub( _panStart );
if ( mouseChange.lengthSq() ) {
mouseChange.multiplyScalar( _eye.length() * _this.panSpeed );
pan.copy( _eye ).cross( _this.object.up ).setLength( mouseChange.x );
pan.add( objectUp.copy( _this.object.up ).setLength( mouseChange.y ) );
_this.object.position.add( pan );
// _this.target.add( pan );
_this.target.position.add(pan);
if ( _this.staticMoving ) {
_panStart.copy( _panEnd );
} else {
_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( _this.dynamicDampingFactor ) );
}
}
}
由于代码当前是结构化的,因此在平移操作后模型的中心不会更新。所以最初,当你向任何方向旋转模型时,它会很好地旋转它的中心就像一个旋转到位的球体。然而,在平移操作之后,不是围绕其中心点旋转*,而是在平移操作*之前围绕旧中心点旋转。这使得该模型看起来像是围绕旧中心点旋转的卫星,而不是围绕其中心旋转。 (想想在一根绳子的末端,一个球在你周围摆动。)
_this.object是一个ThreeJS PerspectiveCamera对象 _this.target是一个我认为是模型的3D矢量,但我不太确定。
我找到了这个SO帖子,但没有答案:
three.js: Rotate around origin after panning camera
在平移操作后,我需要更改以更新模型的中心?