2013-06-19 101 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