如何围绕其末端旋转ThreeJS Object3D对象?

时间:2019-02-11 05:32:45

标签: javascript three.js

是否可以围绕对象的末端旋转Object3D对象?我用const boundingBox = new THREE.Box3().setFromObject(this.object)找到了对象的中心,以确定中心。在某个点旋转会意味着将对象平移到一个点,然后旋转,然后再平移吗?

1 个答案:

答案 0 :(得分:1)

  

是否可以将Object3D对象绕其末端旋转?

是的。默认情况下,Object3D绕其中心旋转,但是可以通过“包装”父对象(Object3D)中的对象并设置父对象的位置(这也是一个旋转点)来更改旋转点:

function changeRotationPoint(obj, scene, position) {
  // create parent and add it to scene
  const parent = new THREE.Object3D();

  parent.add(obj);
  if (obj.parent) {
    obj.parent.add(parent);
  } else {
    // add to THREE scene if obj doesn't have a
    // parent
    scene.add(parent);
  }

  // position for rotation, 
  // for example (put your data): { x: 0.1, y: 0.1, z: 0 }
  parent.position.set(position.x, position.y, position.z);

  // correct position of obj, so only rotation point
  // will be changed
  const x = obj.position.x - position.x,
  const y = obj.position.y - position.y,
  const z = obj.position.z - position.z
  obj.position.set(x, y, z);
}

// call function
changeRotationPoint(this.object, scene, { x: 0.1, y: 0.1, z: 0 });

// rotate this.object
this.object.parent.rotation.set(0.1, 0.2, 0.3);