Ich verwende den folgenden Code, um ein mit dem ObjectLoader geladenes komprimiertes msgpack-Objekt zu skalieren und zu zentrieren, und es funktioniert nicht. Ich denke, dass mein Objekt eine Drehung darauf hat und dadurch seltsames Verhalten verursacht. Bei einigen Objekten zentriert es sich erfolgreich, bei anderen hingegen ist die Zentrierung ausgeglichen, und auch die Skalierung ist nicht richtig.So zentrieren und skalieren Sie Objekt threejs
In diesem Snippet ist das Ergebnis die Szene aus dem ObjectLoader. Mein Gedanke war, dass das Objekt nicht sehr gut geformt war, aber ich bin mir nicht sicher. Ich wollte, dass die Tabelle auf dem Bild oder ein anderes vom Benutzer eingegebenes Netz oben auf dem Raster liegt, zentriert und skaliert ist, so dass die maximale Größe 1 Einheit beträgt.
Jedes Flächenmaß 0,25, ist die Achse bei 0,0,0 http://i.stack.imgur.com/fkKYC.png
// result is a threejs scene
var geometry = result.children[0].geometry;
var mesh = result.children[0];
geometry.computeBoundingBox();
var middle = new THREE.Vector3();
middle.x = (geometry.boundingBox.max.x + geometry.boundingBox.min.x)/2;
middle.y = -geometry.boundingBox.min.y;
middle.z = (geometry.boundingBox.max.z + geometry.boundingBox.min.z)/2;
middle.negate();
mesh.position.copy(middle);
// scales the mesh up to maxsize
var maxSize = 1;
// gets the biggest axis
var maxVal = geometry.boundingBox.max.x - geometry.boundingBox.min.x;
if (maxVal < geometry.boundingBox.max.y - geometry.boundingBox.min.y) {
maxVal = geometry.boundingBox.max.y - geometry.boundingBox.min.y;
}
if (maxVal < geometry.boundingBox.max.z - geometry.boundingBox.min.z) {
maxVal = geometry.boundingBox.max.z - geometry.boundingBox.min.z;
// scales the current size proportional to the maxval, times maxsize
mesh.scale.divideScalar(maxVal * maxSize);
self.scene.add(result);
Die Bounding Box ist das rote Quadrat um das Objekt. –