【发布时间】:2021-04-13 20:33:58
【问题描述】:
我想将导入的 GLB 模型缩放到与场景中的立方体相同的大小。需要确保模型保持在阴影投射区域内并且足够大以使阴影可见。
我已经计算了两个对象的边界框:
// shadowcasting area
var sceneExtent = new THREE.BoxGeometry( 4, 4, 4 );
var cube = new THREE.Mesh( sceneExtent, material );
var sceneBounds = sceneExtent.computeBoundingBox()
和
// imported mesh
model.traverse( function ( child ) {
if ( child.isMesh ) {
child.geometry.computeBoundingBox()
meshBounds = child.geometry.boundingBox
}
} );
但是现在不知道用他们怎么修改GLTF模型的scale
// meshBounds = child.geometry.boundingBox
// sceneBounds = sceneExtent.computeBoundingBox()
// how to resize model scale to match size of sceneBounds
model.scale.set(1,1,1)
我已经研究了很多,但我似乎不了解我目前找到的解决方案。
如何修改模型比例以使sceneBounds 与我拥有的信息相匹配?
更新:要获取边界框,请改用.setFromObject():
sceneBounds = new THREE.Box3().setFromObject( cube );
meshBounds = new THREE.Box3().setFromObject( model );
【问题讨论】:
-
我会计算两个边界框每边(x,y,z)的长度,然后计算它们的商。然后使用该比率来设置比例。如果您的 glb 模型的边界框不完全是立方体,这意味着您将在轴上具有不同的比率,您需要通过对它们进行排序来使用最小或最大的比率,以将模型包含在立方体中。如果您需要代码方面的帮助,请告诉我。
-
非常感谢,是的,我可以在代码方面使用一些帮助。我不确定如何应用您描述的方法(就像我找到的所有其他解决方案一样)。如果你能用代码告诉我如何做你描述的事情,那就太好了:)
标签: javascript three.js scale