ThreeJS Match GLTF Model To Size Of Bounding Box(GLTF模型与包围盒大小的匹配)
本文介绍了GLTF模型与包围盒大小的匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望将导入的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 );
推荐答案
例如:
// Calculate side lengths of scene (cube) bounding box
let lengthSceneBounds = {
x: Math.abs(sceneBounds.max.x - sceneBounds.min.x),
y: Math.abs(sceneBounds.max.y - sceneBounds.min.y),
z: Math.abs(sceneBounds.max.z - sceneBounds.min.z),
};
// Calculate side lengths of glb-model bounding box
let lengthMeshBounds = {
x: Math.abs(meshBounds.max.x - meshBounds.min.x),
y: Math.abs(meshBounds.max.y - meshBounds.min.y),
z: Math.abs(meshBounds.max.z - meshBounds.min.z),
};
// Calculate length ratios
let lengthRatios = [
(lengthSceneBounds.x / lengthMeshBounds.x),
(lengthSceneBounds.y / lengthMeshBounds.y),
(lengthSceneBounds.z / lengthMeshBounds.z),
];
// Select smallest ratio in order to contain the model within the scene
let minRatio = Math.min(...lengthRatios);
// If you need some padding on the sides
let padding = 0;
minRatio -= padding;
// Use smallest ratio to scale the model
model.scale.set(minRatio, minRatio, minRatio);
这篇关于GLTF模型与包围盒大小的匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:GLTF模型与包围盒大小的匹配
基础教程推荐
猜你喜欢
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 动态更新多个选择框 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01