【问题标题】:Rotating object around object axis THREE.js围绕对象轴旋转对象 THREE.js
【发布时间】:2015-01-06 07:12:19
【问题描述】:

在 THREE.js 中围绕自己的轴旋转对象时遇到一些问题。我正在使用 STLLoader 以 model.stl-0、model.stl-1、...model.stl-13 格式导入 stl 文件。以下是相关代码:

for (i = 0; i<14; i++) {
  loader.load( './models/stl/binary/model.stl-'+ i + '.stl' );
};  

我用它来循环加载器并导入所有文件。

object.rotation.x = value; 

这就是我尝试旋转对象的方式。但是,每个模型都排列成一个拱形,使用上述方法旋转时,旋转是围绕整个模型拱形的中心轴进行的,而不是围绕单个模型本身的中心轴进行的。

如何围绕自己的轴旋转对象?

谢谢

【问题讨论】:

    标签: three.js


    【解决方案1】:

    虽然自从最初提出这个问题并且我想通了,已经一年多了,但我想我会把我的解决方案留给其他有这个问题的人。如果您需要重置对象的原点,以便您可以围绕自己的轴而不是全局原点旋转它,请使用:

    object.geometry.computeBoundingBox();
    
    var boundingBox = object.geometry.boundingBox;
    
    position = new THREE.Vector3();
    position.subVectors( boundingBox.max, boundingBox.min );
    position.multiplyScalar( 0.5 );
    position.add( boundingBox.min );
    position.applyMatrix4( object.matrixWorld );
    
    object.geometry.applyMatrix( 
      new THREE.Matrix4()
        .makeTranslation( 
          -(position.x), 
          -(position.y), 
          -(position.z) 
        ) 
    );
    
    object.geometry.verticesNeedUpdate = true;
    
    object.position.x = position.x;
    object.position.y = position.y;
    object.position.z = position.z;
    

    【讨论】:

    • 提示:您可以使用geometry.translate( x, y, z ); -- 或geometry.center(); 另外,object.position.copy( position )
    【解决方案2】:

    如果您希望对象以不同的方式旋转,对象总是围绕它们自己的中心 (0,0,0) 旋转,我担心您必须修改模型,重新定位它以便中心点位于您想要的位置成为支点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-10
      • 2017-07-14
      • 2016-02-29
      • 2015-07-14
      • 1970-01-01
      • 2015-07-23
      相关资源
      最近更新 更多