我正在尝试模拟显示一些恒星的星系。行星是星形网格的子节点。 当您缩放时,星形网格会变大但我想要在某个缩放级别,星形保持相同的大小,并且只有行星相对于缩放比例增加。
这段代码工作正常,但我想知道这是否是最好的方法,也许还有另一种更好的方法来实现这个目标:
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 为了让我的恒星在缩放时保持相同的大小,我必须将它乘以比例因子,但由于我的行星是恒星的子星,我需要通过相反的方式来否定比例。
答案 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