THREE.Box3.setFromObject(*object*)
trả về giá trị sai. Cách tốt nhất để cho bạn thấy là bằng cách chỉ cho bạn cách tôi làm việc qua nó:setFromObject (lưới) trả về giá trị sai, đôi khi
Tôi tạo 2 mắt lưới từ đỉnh. Đầu tiên với chức năng triangle()
, cái còn lại có 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),
];
}
tôi sử dụng giá trị trả về để tạo ra lưới của tôi:
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);
Và sử dụng để đặt nó trong bối cảnh đó, và để tạo ra một BoundingBox:
mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI/2, 0, 0);
boundingBox.setFromObject(mesh);
Bây giờ, tôi muốn tìm trung tâm của 2 hình dạng của tôi. Đủ dễ dàng: Tôi lấy hộp giới hạn và tính toán nó. Như thế này:
var centerX = (boundingBox.max.x + boundingBox.min.x) * 0.5;
var centerZ = (boundingBox.max.z + boundingBox.min.z) * 0.5;
Đây là nơi nó xảy ra sai: Đối với hình tam giác, nó tính toán điểm đúng, nhưng đối với hình thang, nó lộn xộn.
Dưới đây là màn hình in của bảng điều khiển. 3 đỉnh đầu tiên dành cho tam giác, tiếp theo là boundingbox. 4 tiếp theo là cho hình thang, với một lần nữa các hộp bounding. Đối với các đỉnh: số đầu tiên là X-coord, thứ hai là Z-coord.
mong muốn kết quả: 2 BoundingBox nên trả lại một cái gì đó như:
max: X: 200
Z: 200
min: X: -200
Z: -100
Hình ảnh hiển thị trạng thái hiện tại (hình tam giác có trừ đi-dấu ở giữa, hình thang không):