2015-11-27 17 views
5

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.

Console log, showing the problem

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):

state of situation

Trả lời

0

Tìm thấy giải pháp cho bản thân mình cuối cùng:

tôi phải tạo BoundingBox tôi trước khi tôi đặt lại vị trí hoặc xoay nó:

//Boundingbox 
boundingBox.setFromObject(mesh); 

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

thay vì:

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

lý do tại sao tam giác không gây ra vấn đề, được vì nó đã được trả về 0,0.

Các vấn đề liên quan