【问题标题】:Three JS - BoundingBox not being updated after performing rotations三个 JS - 执行旋转后未更新边界框
【发布时间】:2014-05-07 21:35:51
【问题描述】:

我需要在对其应用旋转后找出几何体的边界框。

要旋转的代码 - 取自 Three JS

的示例编辑器
object.rotation.x = xRadians;
object.rotation.y = yRdians;
object.rotation.z = zRadians

这可以很好地旋转对象。

现在我需要获取更新后的边界框

获取边界框的代码

var minX = parseFloat(object.boundingBox.min.x);
var minY = parseFloat(object.boundingBox.min.y);
var minZ = parseFloat(object.boundingBox.min.z);

无论旋转如何,我都会在 minX-Z 中获得相同的值。获取更新的边界框的正确方法是什么?

我正在使用 r-66。

我也尝试过使用:

var radians = x * Math.PI / 180;
var axisX = new THREE.Vector3(1, 0, 0);
var matrix = new THREE.Matrix4().makeRotationAxis(axisX, radians);
geometry.applyMatrix(matrix);

此方法执行相对旋转并正确更新边界框,但我不想要相对旋转。第一种方法是我正在寻找的,但它不会更新对象的边界框。

有什么想法吗? 谢谢!

【问题讨论】:

    标签: javascript rotation three.js bounding-box


    【解决方案1】:

    Box3.setFromObject( object ) 计算对象(包括其子对象)的世界轴对齐边界框,同时考虑对象和子对象的世界变换。

    var box = new THREE.Box3().setFromObject( object );
    

    three.js r.66

    【讨论】:

    • 我不确定在我使用时是否返回与 object.boundingBox 相同的边界框: var matrix = new THREE.Matrix4().makeRotationAxis(axisX, radians);它似乎返回了完全不同的值。
    • 我不是在寻找帮助我调试代码的人,但我附上了图片以显示 var box = new THREE.Box3().setFromObject( object );似乎没有给出正确的值:link 另外为什么普通的 object.boundingBox 不起作用?谢谢!!
    • 你的意思是geometry.boundingBoxGeometry.boundingBox 不考虑转换。查看源代码,以便了解它在做什么。
    • 你能指出我应该查看代码的哪一部分来查看执行转换的位置吗?
    • 好吧,以下代码不会返回“正确”边界:var box = new THREE.Box3().setFromObject( mesh ); 但无论如何我都会标记答案。
    【解决方案2】:
    var box = new THREE.Box3().setFromObject( object );
    

    将返回世界坐标,因此您需要从中减去它们:

    var bbox = new THREE.Box3().setFromObject(object);
    bbox.min.sub(object.position);
    bbox.max.sub(object.position);
    

    这将为您提供相对于对象的正确边界框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-18
      • 2021-05-27
      • 2018-10-04
      • 2018-02-10
      • 1970-01-01
      • 2014-02-28
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多