2017-08-15 53 views
6

我想知道是否有方法获取通过3dio.js插入的模型的边界框,或者计算其中心点?我正在寻找他们的原点。获取模型的边界框或中心

下面的图片显示了与红色框指示的场景原点相关的两个模型。

3D-Model_1

3D-Model_2

回答

6

可以访问3d.io实体的three.js所对象是这样的:

var threeElem = document.getElementById("custom-id").components['io3d-data3d'].data3dView.threeParent 

然后你可以使用从three.js所本地边框:

var bbox = new THREE.Box3().setFromObject(threeElem) 

像这样你可以得到最小/最大范围whi你可以用它来确定原点。

我希望能回答你的问题。让我知道!

编辑: 家具,很可能会基于Madlaina的回答

var threeElem = document.getElementById("custom-id").components['io3d-furniture'].data3dView.threeParent 
+1

作品十分感谢,只是一个小错字。 'Data3dView'应该是'data3dView'。 这是我最初尝试过的,但它没有工作,因为模型尚未加载。这是通过听“模型加载”事件来解决的。 我将在下面添加我的解决方案作为答案,供其他人参考。 –

+0

非常感谢。我在我的回答中修复了错字:) –

4

。我需要确保该模型前

addModelToScene(type) { 

    let scene = document.querySelector('a-scene'); 
    let model = document.createElement('a-entity'); 
    model.setAttribute('io3d-data3d', getModelKey(type))  

    model.addEventListener('model-loaded',() => { 
     // Access the three.js object of the 3d.io 
     let threeElem = model.components['io3d-data3d'].data3dView.threeParent 

     // create the bounding box 
     let bbox = new THREE.Box3().setFromObject(threeElem) 

     // Calculate the center-point offsets from the max and min points 
     const offsetX = (bbox.max.x + bbox.min.x)/2 
     const offsetY = (bbox.max.y + bbox.min.y)/2 
     const offsetZ = (bbox.max.z + bbox.min.z)/2 

     // apply the offset 
     model.setAttribute('position', {x:-offsetX,y:-offsetY, z:-offsetZ}) 
    }); 

    scene.appendChild(model);  

} 

结果加载: Centered 3D-Model

+0

很酷!很高兴它的作品!我一定会在自己的草稿中使用它 –