问题描述
我在后端使用了 Three.js lib 来计算 AABB(轴对齐边界框)。
getAABB: function (position,scale,orientation) {
const cube = new Mesh(new BoxGeometry(0,0));
cube.position.set(...position);
cube.scale.set(...scale);
cube.rotation.set(...orientation);
const bb = new Box3().setFromObject(cube);
const { min,max } = bb;
return {
x: {
min: min.x,max: max.x,},y: {
min: min.y,max: max.y,z: {
min: min.z,max: max.z,}
};
}
对于三个@0.118,结果看起来不错:
{
x: { min: 0.5391231359521602,max: 3.46087686404784 },y: { min: 0.32046946879189564,max: 3.6795305312081044 },z: { min: 0.4349899537033477,max: 3.5650100462966523 },}
但是一旦我更新到three@0.119,它就开始返回错误的结果:
{
x: { min: 2,max: 2 },y: { min: 2,z: { min: 2,}
在本例中,您可以看到 0.119 https://jsfiddle.net/yura_syedin/zwm3jkdL/
的错误结果这是 0.118 https://jsfiddle.net/yura_syedin/5801pLaw/34/
的正确结果解决方法
看起来 BoxGeometry
构造函数在 r119
中修复了一个错误。
- 在
r118
中,当您使用0,0
宽度/高度/深度参数构造一个框时,构造函数认为它们没有被定义,并且默认为1,1,1
。这是the implementation forr118
。 - 在
r119
中,当您用0,0
构造一个盒子时,它尊重这些尺寸,并为您提供一个带有min: 2,max: 2
的盒子,因为它尊重尺寸为 0 个单位。这是the implementation forr119
。
只要确保您使用一些非零值初始化框,您就会在不同版本中获得相同的结果。