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.
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