THREE.Box3.setFromObject(*object*)
restituisce valori errati. Il modo migliore per mostrarti è mostrarti come lavoro:setFromObject (mesh) restituisce valori errati, a volte
Creo 2 mesh dai vertici. Il primo con la funzione triangle()
, l'altra con 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),
];
}
Io uso il valore restituito per creare la mia maglia:
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);
e l'uso che per metterlo in scena, e di creare una BoundingBox:
mesh.position.set(posX, 0, posZ);
mesh.rotation.set(-Math.PI/2, 0, 0);
boundingBox.setFromObject(mesh);
Ora, voglio trovare il centro delle mie 2 forme. Abbastanza facile: prendo il boundingbox e lo calcifico. Come questo:
var centerX = (boundingBox.max.x + boundingBox.min.x) * 0.5;
var centerZ = (boundingBox.max.z + boundingBox.min.z) * 0.5;
Qui è dove le cose vanno male: per il triangolo, calcola il posto giusto, ma per il trapezio, si scombina.
Di seguito è riportato uno schermo di stampa della console. I primi 3 vertici sono per il triangolo, seguito dal boundingbox. I prossimi 4 sono per il trapezio, con di nuovo il riquadro di delimitazione. Per i vertici: il primo numero è X-coord, il secondo è Z-coord.
risultato desiderato: 2 ° BoundingBox dovrebbe restituire qualcosa del genere:
max: X: 200
Z: 200
min: X: -200
Z: -100
Immagine che mostra lo stato attuale (triangolo ha il segno meno nel mezzo, trapezoidale no):