THREE.Box3.setFromObject(*object*)
возвращает неправильные значения. Лучший способ показать вам, показывая вам, как я работаю через него:setFromObject (mesh) возвращает неправильные значения, иногда
Я создаю 2 ячейки из вершин. Первый с функцией triangle()
, другой - с trapezoidForm()
.
var triangle = function (base, height) {
return [
new THREE.Vector2(0, -height/2),
new THREE.Vector2(-base/2, height/2),
new THREE.Vector2(base/2, height/2)
];
}
var trapezoidForm = function (base, upperBase, height) {
return [
new THREE.Vector2(-base/2, height/2),
new THREE.Vector2(-upperBase/2, -height/2),
new THREE.Vector2(upperBase/2, -height/2),
new THREE.Vector2(base/2, height/2),
];
}
Я использую возвращаемое значение, чтобы создать свою сетку:
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);
И использовать, чтобы поместить его на сцене, и создать BoundingBox:
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;
Вот где идет не так: Для треугольника, он вычисляет правильное место, но для трапеции, это портит.
Ниже находится печатный экран консоли. Первые три вершины для треугольника, за которыми следует ограничивающий бокс. Следующие 4 для трапеции, с снова ограничивающей коробкой. Для вершин: первое число - X-координата, второе - Z-координата.
Желаемый результат: второй BoundingBox должен возвращать что-то вроде:
max: X: 200
Z: 200
min: X: -200
Z: -100
Изображение показывает текущее состояние (треугольник имеет минус знак в середине, трапеции нет):