Ich habe ein Mesh-Set, das sich in einem Object3D befindet. Wenn ich die Vertices bekomme, sind sie nicht zentriert auf dem Objekt. Also muss ich das Zentrum des Object3D berechnen und dann die Meshes verschieben, um sie auf das Zentrum auszurichten. Ich habe versucht, die Boundingboxes jedes Mesh zu berechnen und dann max - min / 2; das funktioniert nicht. Jede Hilfe hier wäre fantastisch. Ich habe versucht, Object3D.setFromObject(); dies gibt nur Unendlichkeit zurück.
Antworten
Zu viele Anzeigen?Um ein Object3D zu zentrieren, abhängig von seinen Kindern, müssen Sie durch sie iterieren, soweit ich weiß. Der Code würde wie folgt aussehen:
// myObject3D is your Object3D
var children = myObject3D.children,
completeBoundingBox = new THREE.Box3(); // erstellt ein neues Box, das alle Werte enthält
for(var i = 0, j = children.length; i < j; i++){ // iteriere durch die Kinder
children[i].geometry.computeBoundingBox(); // berechne die Bounding Box der Mesh-Geometrie
var box = children[i].geometry.boundingBox.clone(); // klone die berechnete Bounding Box, da wir sie übersetzen müssen
box.translate(children[i].position); // übersetze die Bounding Box der Geometrien um die Position der Meshes
completeBoundingBox.addPoint(box.max).addPoint(box.min); // füge die max und min Werte zu deiner completeBoundingBox hinzu
}
var objectCenter = completeBoundingBox.center()
console.log('Das ist das Zentrum Ihres Object3D:', objectCenter );
// Sie wollen, dass das Zentrum Ihrer Bounding Box bei 0|0|0 liegt
myObject3D.position.x -= objectCenter.x;
myObject3D.position.y -= objectCenter.y;
myObject3D.position.z -= objectCenter.z;
Hoffe, ich habe Ihr Problem richtig verstanden!
Ahmad Ali
Punkte
19
center = function(obj) {
var children = obj.children,
completeBoundingBox = new THREE.Box3();
for(var i = 0, j = children.length; i < j; i++) {
children[i].geometry.computeBoundingBox();
var box = children[i].geometry.boundingBox.clone();
box.translate(children[i].position);
completeBoundingBox.set(box.max, box.min);
}
var objectCenter = completeBoundingBox.center()
console.log('Das ist das Zentrum Ihres Object3D:', objectCenter );
obj.position.x -= objectCenter.x;
obj.position.y -= objectCenter.y;
obj.position.z -= objectCenter.z;
}