如何获得由three.js中的骨骼缩放的网格的大小?

如何获得由three.js中的骨骼缩放的网格的大小?,three.js,gltf,Three.js,Gltf,我的项目是一个带有three.js的小javascript网络游戏 我使用GLTFLoader将带有动画的GLTF文件导入到我的项目中。模型已加载,我可以播放所有动画。 我的目标是使网络流量尽可能小。这就是为什么我只想导入几个GLTF模型作为基础模型,并使用three.js在客户端更改它们的外观。 通过缩放模型的特定骨骼,我可以使模型看起来很高,而不会干扰骨骼的动画 唯一的问题是: 如果通过缩放某些骨骼来更改模型的大小,则整个Y轴上的模型大小都会更改。正反两面 例如: 如果我将“人类”模型放置在

我的项目是一个带有three.js的小javascript网络游戏

我使用GLTFLoader将带有动画的GLTF文件导入到我的项目中。模型已加载,我可以播放所有动画。 我的目标是使网络流量尽可能小。这就是为什么我只想导入几个GLTF模型作为基础模型,并使用three.js在客户端更改它们的外观。 通过缩放模型的特定骨骼,我可以使模型看起来很高,而不会干扰骨骼的动画

唯一的问题是:

如果通过缩放某些骨骼来更改模型的大小,则整个Y轴上的模型大小都会更改。正反两面

例如:

如果我将“人类”模型放置在平面上,然后通过缩放骨骼来缩放模型,则模型的脚会因为缩放而移动到平面下方。 这就是为什么我需要知道我的模型在缩放骨骼前后的确切高度或大小。这样我就可以计算出我需要把模型推到飞机上方多远

我试过了

mesh.geometry.computeBoundingBox()
然后得到边界框的大小,但这只是给了我模型不变几何体的大小

我还尝试创建一个新的Box3对象,并使用以下方法使其与更改后的模型大小相同:

new Box3().setFromObject(mesh);
但这也给了我几何体不变的大小

那么,如何获得由three.js中的骨骼缩放的网格的大小? 还是有别的办法来解决我的问题

期待阅读您的建议。

基于性能原因,在GPU上应用蒙皮(骨骼引起的顶点变换),并且顶点位置永远不会读回应用程序内存。因此,诸如
geometry.computeBoundingBox()
mesh.scale
和光线投射等方法将不考虑蒙皮

如果您的用例很简单(例如,只有一个骨骼影响蒙皮),则始终可以获得该特定骨骼的比例,并将其与原始边界框相乘:

var bone = model.getObjectByName('MyScalingBone');
console.log(bone.scale);