2015-08-08 86 views
2

我想模擬顯示一些星星的星系。行星是星形網格的孩子。 當你縮放時,星形網格變大,但我想在某個縮放級別下,星形保持相同的大小,並且只有行星參照縮放比例增加。Three.js孩子忽略父對象縮放

該代碼工作得很好,但我想如果這是最好的方式,也許有另一種更好的方法來實現這一目標:

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); 
    } 

規模變量來自於相機的控制,通知我應用了多少變焦。放大將導致縮放比例> 1,並且縮小將導致縮放爲了保持我的星形相同的大小,如果我縮放,我必須乘以比例因子,但因爲我的行星是星星的孩子,我需要通過相反的方式否定縮放。

回答

2

添加一個額外的容器父對象和孩子之間,就像這樣:

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

然後,

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

three.js所r.71