Threejs:计算旋转文本的边界框

Threejs: computing the bounding box of rotated text

本文关键字:边界 文本 旋转 计算 Threejs      更新时间:2023-09-26

在我的场景中,我有一个文本。在我创建它之后,我旋转它以适合正确的区域。但是,边界框完全忽略了旋转。

我在这里做了一把小提琴:http://jsfiddle.net/paulocoelho/qMqH7/5/

如果你检查你得到的输出:

// before rotation
THREE.Vector3 {x: 28.365000000000006, y: 6.2806, z: 0.5, constructor: function, set: function…}
THREE.Vector3 {x: 0.2542, y: 0, z: 0, constructor: function, set: function…}
// after rotation
THREE.Vector3 {x: 28.365000000000006, y: 6.2806, z: 0.5, constructor: function, set: function…}
THREE.Vector3 {x: 0.2542, y: 0, z: 0, constructor: function, set: function…}

因为我在Z轴上旋转90度,我希望看到"旋转后边界"为:

{x: 2.2806, y: 28.365000000000006, z: 0.5}

有没有一种方法可以轻松实现这一点?

geometry对旋转一无所知。你有两个选择。

第一个选项是通过将旋转矩阵应用于几何体而不是旋转网格来旋转几何体。例如,

geometry.rotateZ( Math.PI / 2 );

现在您可以调用geometry.computeBoundingBox(),您应该看到您所期望的内容。

第二个选项是使用Box3.setFromObject( object )来计算网格的边界框:

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

此函数计算对象(包括其子对象)的世界轴对齐边界框,同时考虑对象和子对象的世界变换。

EDIT:更新为three.js r.95