Three.js子节点忽略父对象的缩放

时间:2015-08-08 09:00:29

标签: three.js scale

我正在尝试模拟显示一些恒星的星系。行星是星形网格的子节点。 当您缩放时,星形网格会变大但我想要在某个缩放级别,星形保持相同的大小,并且只有行星相对于缩放比例增加。

这段代码工作正常,但我想知道这是否是最好的方法,也许还有另一种更好的方法来实现这个目标:

  var scale = instance.controls.scale;
  obj.scale.set(obj.scale.x*scale,obj.scale.y*scale,obj.scale.z*scale);
  for (var c = 0; c < obj.children.length; c++) {
      var child = obj.children[c];
      child.scale.set(child.scale.x/scale,child.scale.y/scale,child.scale.z/scale);
  }

比例变量来自相机控件,通知我应用了多少变焦。放大将导致比例&gt; 1和缩小将导致比例&lt; 1 为了让我的恒星在缩放时保持相同的大小,我必须将它乘以比例因子,但由于我的行星是恒星的子星,我需要通过相反的方式来否定比例。

1 个答案:

答案 0 :(得分:2)

在父对象和子对象之间添加一个额外的容器,如下所示:

var container = new THREE.Group();
obj.add( container );
containter.add( child );

然后,

obj.scale.multiplyScalar( scale );
container.scale.divideScalar( scale );

three.js r.71