获取模型的边界框或中心
Getting the bounding box or centers of models
我想知道是否有办法为通过 3dio.js 插入的模型获取边界框,或者计算它们的中心点?我希望它们以原点为中心。
下图是相对于红框所示场景原点的两个模型。
您可以像这样访问 3d.io 实体的 three.js 对象:
var threeElem = document.getElementById("custom-id").components['io3d-data3d'].data3dView.threeParent
然后您可以使用来自 three.js:
的原生边界框
var bbox = new THREE.Box3().setFromObject(threeElem)
这样你就得到了 min/max 边界,你可以用它来确定原点。
希望这能回答您的问题。让我知道!
编辑:
对于家具,它可能是
var threeElem = document.getElementById("custom-id").components['io3d-furniture'].data3dView.threeParent
基于 Madlaina 的回答。我需要确保在
之前加载了模型
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);
}
结果:
我想知道是否有办法为通过 3dio.js 插入的模型获取边界框,或者计算它们的中心点?我希望它们以原点为中心。
下图是相对于红框所示场景原点的两个模型。
您可以像这样访问 3d.io 实体的 three.js 对象:
var threeElem = document.getElementById("custom-id").components['io3d-data3d'].data3dView.threeParent
然后您可以使用来自 three.js:
的原生边界框var bbox = new THREE.Box3().setFromObject(threeElem)
这样你就得到了 min/max 边界,你可以用它来确定原点。
希望这能回答您的问题。让我知道!
编辑: 对于家具,它可能是
var threeElem = document.getElementById("custom-id").components['io3d-furniture'].data3dView.threeParent
基于 Madlaina 的回答。我需要确保在
之前加载了模型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);
}
结果: