Alles, was ich tun möchte, ist eine OBJ-Datei laden und ihre Koordinaten zu den Weltursprüngen (0,0,0), so dass die Bahn steuert funktionieren perfekt (keine Pivot-Punkte bitte).Drei JS: Laden Sie einen OBJ, übersetzen Sie zum Ursprung (Zentrum in Szene), Orbit
Ich möchte zufällige OBJ-Objekte mit unterschiedlichen Geometrien/Mittelpunkten laden und sie automatisch in den Szenenursprung übersetzen lassen. Mit anderen Worten, eine 'hartcodierte' Übersetzungslösung für ein spezifisches Modell wird nicht funktionieren.
Dies muss einer der häufigsten Szenarien für Three JS (grundlegende 3D-Objekt-Viewer) sein, also bin ich überrascht Ich kann keine endgültige Lösung für SO finden.
Leider gibt es viele ältere Antworten mit veralteten Funktionen, so würde ich wirklich eine neue Antwort schätzen, auch wenn es ähnliche Lösungen gibt.
Dinge, die ich habe versucht,
den Code unten passt das Objekt schön in die Kamera, löst aber nicht die Übersetzung/umkreisen Problem.
// Kamera an Objekt anpassen var bBox = new THREE.Box3(). SetFromObject (Szene); var height = bBox.size(). Y; var dist = Höhe/(2 * Math.tan (Kamera.fov * Math.PI/360)); var pos = Szenenposition;
// Fudge-Faktor, damit das Objekt nicht die ganze Ansicht einnimmt camera.position.set (pos.x, pos.y, dist * 0.5); camera.lookAt (pos);
Anscheinend ist die Geometrie.center() gut für die Übersetzung der Koordinaten eines Objekts zurück zum Ursprung, aber die THREEx.GeometryUtils.center wurde durch geometry.center() ersetzt und ich bekomme Fehler, wenn Sie versuchen, es zu verwenden .
Beim Laden von OBJs wurde die Geometrie jetzt durch bufferGeometry ersetzt. Ich kann nicht scheinen, die Puffergeometrie in Geometrie zu werfen, um die Funktion center() zu verwenden. muss ich das so in die Objekttraverse> Kinderschleife legen? das scheint unnötig kompliziert.
Geometrie = neu THREE.Geometry(). FromBufferGeometry (child.geometry);
Mein Code ist nur ein sehr einfacher OBJLoader.
var objLoader = new THREE.OBJLoader();
objLoader.setPath('assets/');
objLoader.load('BasketballNet_Skull.obj', function (object) {
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material = material;
}
});
scene.add(object);
});
(BTW zuerst auf wirkliche Frage SO Formatierungs/Noob Fragen so vergeben)
Danke für Ihre Antwort NikhilSN aber nicht wirklich das, was ich suche, vielleicht war Frage zu lang/vage. Grundsätzlich ist das Problem - bei jedem geladenen OBJ wie übersetzt man seine Koordinaten in die Mitte, so dass Kamera- und Orbitsteuerung "einfach funktioniert". – lukemunn