2015-11-27 15 views
5

THREE.Box3.setFromObject(*object*) gibt falsche Werte zurück. Der beste Weg, um es Ihnen zu zeigen, ist, Ihnen zu zeigen, wie ich es durcharbeiten kann:setFromObject (Netz) gibt falsche Werte zurück, manchmal

Ich erstelle 2 Meshes von Vertices. Erste mit der triangle() Funktion, die andere mit 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), 
    ]; 

} 

Ich benutze den zurückgegebenen Wert mein Netz zu schaffen:

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

Und dass es Ort in der Szene verwenden und eine BoundingBox zu erstellen:

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

, ich möchte das Zentrum meiner 2 Formen finden. Ganz einfach: Ich nehme die Boundingbox und berechne sie. Wie folgt aus:

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

Hier ist, wo es schief geht: Für das Dreieck, berechnet es die richtige Stelle, aber für das Trapez, ruiniert sie.

Unten ist ein Bildschirm der Konsole. Die ersten 3 Ecken sind für das Dreieck, gefolgt von der Boundingbox. Die nächsten 4 sind für das Trapez, mit wiederum der Bounding Box. Für die Scheitelpunkte: Die erste Zahl ist X-Koord, die zweite ist Z-Koord.

Console log, showing the problem

Wunschergebnis:

max: X: 200 
    Z: 200 

min: X: -200 
    Z: -100 

Bild zeigt den aktuellen Zustand (Dreieck auf das Minus-Zeichen in der Mitte hat, Trapez nicht):

2. BoundingBox etwas wie zurückgeben soll state of situation

Antwort

0

Die Lösung selbst gefunden am Ende:

Ich habe meine boundingBox erstellen, bevor ich neu positionieren oder drehen:

//Boundingbox 
boundingBox.setFromObject(mesh); 

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

statt:

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

der Grund, warum das Dreieck Probleme nicht verursacht wurde, weil es wurde gemacht auf 0,0.

Verwandte Themen