2013-06-19 161 views
1

我試圖顯示一組嵌套網格,我從服務器中檢索並且無法更改。迄今爲止,網格有點不同尋常,旋轉和位置在局部座標上,但縮放全部在全局座標中。縮放和嵌套網格

理想情況下,我希望通過向THREE.MESH添加子網格來維護層次結構,但層次結構變平的解決方案也是可行的。

我的問題是,簡單地把孩子網格,使兒童的體形目爆炸:

this.add(child); 

會使孩子的體積和孩子的孩子過大,因爲服務器假定縮放信息沒有繼承。

我已經嘗試了很簡單:

child.scale.divide(this.scale); 
this.add(child); 

,但不工作,我想這是因爲THREE.Object3Dmatrix被定義爲旋轉X比例X平移。

我的liniear代數有點生疏,有人能給我幾個關於如何調整孩子的縮放比例向量的指針嗎?

+0

1.如果所有對象都直接添加到場景中,它們在視覺上是否在位置,旋轉和縮放方面看起來正確? 2.你想創建一個父Object3D,添加這個對象作爲父對象的子對象和孫對象,並使它看起來像(1)中那樣? – WestLangley

+0

如果我直接將對象添加到場景中,那麼它們不會出現在正確的位置(通常在世界座標中接近0,0,0)。如果在將孩子直接添加到場景之前添加父對象的位置,則旋轉關閉。我可以 - 主要是 - 在添加子對象之前,通過將位置與父四元數相乘來糾正旋轉。所謂「主要」,我的意思是除了一些物體之外的所有物體都會以正確的位置和旋轉使用該方法出現在場景中。理想情況下,我想有一個Object3D與兒童和孫子。 – Anton

+0

1.如果按照適當的分級順序添加對象,位置和旋轉是否正確 - 並且只有標尺錯誤? 2.如果是這樣,那麼將scale設置爲(1,1,1),並使用'geometry.applyMatrix(new THREE.Matrix4()。makeScale(s,s)將每個對象的幾何尺寸放大到正確的全局尺寸,s))'。 – WestLangley

回答

2

添加的對象在適當的等級秩序,將比例設置爲(1,1,1),並擴大每個物體到正確的全球規模的幾何形狀,通過使用:

geometry.scale(s, s, s); 

三人。 js r.86

+0

與'geometry.scale(s,s,s)'不完全相同嗎? –

+0

@pinkli是的。該方法稍後添加。更新了答案。謝謝! – WestLangley