2015-11-27 21 views
5

THREE.Box3.setFromObject(*object*) yanlış değerler döndürür. Size göstermenin en iyi yolu, nasıl çalıştığımı göstermektir:setFromObject (mesh) yanlış değerleri döndürür, bazen

Köşelerden 2 kafes oluşturuyorum. Birincisi triangle() işlevi, diğeri trapezoidForm() ile.

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

Ve sahnenin yerleştirmek için kullanabilirsiniz ve bir BoundingBox oluşturmak için:

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), 
    ]; 

} 

benim örgü oluşturmak için döndürülen değeri kullanın Şimdi

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

, ben 2 şekillerimin merkezini bulmak istiyorum. Yeterince kolay: Sınırlayıcı kutuyu alıp hesapladım. Şunun gibi: Yanlış nereye gittiğini

İşte
var centerX = (boundingBox.max.x + boundingBox.min.x) * 0.5; 
var centerZ = (boundingBox.max.z + boundingBox.min.z) * 0.5; 

geçerli: üçgen için, doğru noktayı hesaplar, ancak trapezoid için, bu işler karışıyor.

Aşağıda, konsolun bir yazdırma ekranı bulunmaktadır. İlk 3 köşe üçgeni, ardından sınırlayıcı kutucuktur. Sonraki 4, trapezoid için, yine sınırlayıcı kutu içindir. Köşeler için: ilk sayı X-Koordur, ikincisi Z-Koordur.

Console log, showing the problem

İstenilen sonuç: 2 boundingbox gibi bir şey dönmelidir:

max: X: 200 
    Z: 200 

min: X: -200 
    Z: -100 

Görüntü mevcut durumunu gösteren (üçgen ortasında eksi işareti vardır, yamuk değil):

state of situation

cevap

0

Sonunda kendimi buldum:

ben yeniden konumlandırmak önce benim BoundingBox oluşturmak zorunda veya döndürün

:

//Boundingbox 
boundingBox.setFromObject(mesh); 

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

yerine:

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

üçgen bir soruna neden olmadı nedeni, bu üzerinde hale getirildi, çünkü 0,0.