C'è un modo per determinare la dimensione e la posizione di un modello e quindi autocentrare e ridimensionare il modello in modo che sia posizionato all'origine e all'interno della vista del modello telecamera? Trovo che quando importare un modello Collada da Sketchup, se il modello non è centrato all'origine in Sketchup, non è centrato in three.js. Mentre ciò ha senso, sarebbe bello centrare automaticamente l'origine dopo l'importazione.Smart Centering e ridimensionamento dopo l'importazione del modello in three.js
Ho visto alcune discussioni nei diversi caricatori di file sull'ottenere i limiti del modello importato, ma non sono riuscito a trovare alcun riferimento su come farlo.
Il problema del ridimensionamento è meno importante, ma mi sembra che si riferisca a una funzione di limiti, motivo per cui l'ho chiesto anch'io.
EDIT:
Maggiori informazioni dopo aver giocato un po 'intorno e un paio di ricerche su Google ...
Il codice per la mia funzione di callback sul caricamento del file Collada ora assomiglia a questo:
loader.load(mURL, function colladaReady(collada) {
dae = collada.scene;
skin = collada.skins[ 0 ];
dae.scale.x = dae.scale.y = dae.scale.z = 1;
dae.updateMatrix();
//set arbitrary min and max for comparison
var minX = 100000;
var minY = 100000;
var minZ = 100000;
var maxX = 0;
var maxY = 0;
var maxZ = 0;
var geometries = collada.dae.geometries;
for(var propName in geometries){
if(geometries.hasOwnProperty(propName) && geometries[propName].mesh){
dae.geometry = geometries[propName].mesh.geometry3js;
dae.geometry.computeBoundingBox();
bBox = dae.geometry.boundingBox;
if(bBox.min.x < minX) minX = bBox.min.x;
if(bBox.min.y < minY) minY = bBox.min.x;
if(bBox.min.z < minZ) minZ = bBox.min.z;
if(bBox.max.x > maxX) maxX = bBox.max.x;
if(bBox.max.y > maxY) maxY = bBox.max.x;
if(bBox.max.z > maxZ) maxZ = bBox.max.z;
}
}
//rest of function....
Questo sta generando alcuni dati interessanti sul modello. Posso ottenere una coordinata estrema globale per il modello, che presumo (probabilmente erroneamente) sarebbe vicino a un riquadro di delimitazione generale per il modello. Ma il tentativo di fare qualsiasi cosa con quelle coordinate (come la media e lo spostamento del modello nelle medie) genera risultati incoerenti.
Inoltre, sembra inefficiente dover scorrere ogni geometria per un modello, c'è un modo migliore? In caso contrario, questa logica può essere applicata ad altri caricatori?
Questi dovrebbero aiutare http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object http://stackoverflow.com/questions/20059612/calculate-camera-zoom-required -per-oggetto-per-adattarsi all'altezza dello schermo http://stackoverflow.com/questions/11274358/aggiustare-camera-per-visibile-three-js-shape http://stackoverflow.com/domande/16462848/tre-JS-zoom-to-fit-larghezza-di-oggetti-ignorando altezza – gaitat