【问题标题】:three@0.119 is breaking calculation of min and max for the bounding boxthree@0.119 正在破坏边界框的最小值和最大值的计算
【发布时间】:2021-04-13 12:24:32
【问题描述】:

我在后端使用 three.js lib 来计算 AABB(轴对齐边界框)。

getAABB: function (position, scale, orientation) {
    const cube = new Mesh(new BoxGeometry(0, 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, max: 2 },
  z: { min: 2, max: 2 },
}

在此示例中,您可以看到 0.119 https://jsfiddle.net/yura_syedin/zwm3jkdL/ 的错误结果

这是 0.118 https://jsfiddle.net/yura_syedin/5801pLaw/34/ 的正确结果

根据发行说明,没有太多变化

【问题讨论】:

    标签: three.js bounding-box aabb


    【解决方案1】:

    看起来BoxGeometry 构造函数在r119 中修复了一个错误。

    • 在r118 中,当您使用0, 0, 0 宽度/高度/深度参数构造一个框时,构造函数认为它们没有被定义,它会默认为1, 1, 1。这是the implementation for r118。
    • 在r119 中,当您使用0, 0, 0 构造一个盒子时,它会尊重这些尺寸,并为您提供一个带有min: 2, max: 2 的盒子,因为它尊重尺寸为0 个单位。这是the implementation for r119。

    只需确保您使用某个非零值初始化该框,您将在各个版本中获得相同的结果。

    【讨论】:

    • 我认为你是对的。如果我用 new THREE.BoxGeometry(1, 1, 1) 定义,它会返回正确的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多