三个JS - BoundingBox在执行旋转后没有更新

时间:2014-03-28 12:15:20

标签: javascript rotation three.js bounding-box

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

旋转代码 - 取自 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);

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

有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

three.js r.66

答案 1 :(得分:3)

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

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

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

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