2013-07-15 16 views
0

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

我做了这里提琴: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} 

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

回答

2

geometry不知道任何关于旋转。你有两个选择。

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

geometry.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI/2)); 

现在,您可以拨打geometry.computeBoundingBox(),你应该看到你所期望的。

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

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

此函数计算的对象(包括其子女)的世界轴对齐包围盒,占两者对象的和孩子的世界变换。

编辑:更新为three.js r.69