3 Stimmen

Three.js setzt das Zentrum eines Object3D basierend auf internen Meshes.

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.

2voto

raphaelRauwolf Punkte 324

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!

0voto

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X