Javascript setFromObject(mesh)有时返回错误的值

Javascript setFromObject(mesh)有时返回错误的值,javascript,three.js,bounding-box,Javascript,Three.js,Bounding Box,THREE.Box3.setFromObject(*object*)返回错误的值。向您展示的最佳方式是向您展示我是如何完成的: 我从顶点创建了两个网格。第一个使用triangle()函数,另一个使用梯形() 我使用返回的值创建网格: var material = new THREE.MeshPhongMaterial({ color: 0x666666, /*specular: 0x101010*//*, shininess: 200*/ }); var shape = new

THREE.Box3.setFromObject(*object*)
返回错误的值。向您展示的最佳方式是向您展示我是如何完成的:

我从顶点创建了两个网格。第一个使用
triangle()
函数,另一个使用
梯形()

我使用返回的值创建网格:

var material    = new THREE.MeshPhongMaterial({ color: 0x666666, /*specular: 0x101010*//*, shininess: 200*/ });
var shape       = new THREE.Shape(vertices);
var mesh        = new THREE.Mesh(new THREE.ShapeGeometry(shape), material);
并使用该选项将其放置在场景中,并创建边界框:

mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI / 2, 0, 0);
boundingBox.setFromObject(mesh);
现在,我想找到我的两个形状的中心。很简单:我取边界框,然后计算它。像这样:

var centerX = (boundingBox.max.x + boundingBox.min.x) * 0.5;
var centerZ = (boundingBox.max.z + boundingBox.min.z) * 0.5;
这里是它出错的地方:对于三角形,它计算正确的点,但是对于梯形,它搞糟了

下面是控制台的打印屏幕。前3个顶点用于三角形,然后是边界框。接下来的4个是梯形,同样是边界框。对于顶点:第一个数字是X坐标,第二个是Z坐标

期望的结果:第二个边界框应返回如下内容:

max: X: 200
     Z: 200

min: X: -200
     Z: -100

显示当前状态的图像(三角形在中间有负符号,梯形为非):


最终我自己找到了解决方案:

我必须先创建边界框,然后才能重新定位或旋转它:

//Boundingbox
boundingBox.setFromObject(mesh);

mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI / 2, 0, 0);
而不是:

mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI / 2, 0, 0);
//Boundingbox
boundingBox.setFromObject(mesh);
三角形之所以没有引起问题,是因为它是在0,0上渲染的

mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI / 2, 0, 0);
//Boundingbox
boundingBox.setFromObject(mesh);