Умное центрирование и масштабирование после импорта модели в three.js

Есть ли способ определить размер и положение модели, а затем автоматически -центрировать и масштабировать модель так, чтобы она располагалась в начале координат и в поле зрения камеры? Я обнаружил, что когда я импортирую модель Collada из Sketchup, если модель не была центрирована в начале координат в Sketchup, то она не центрируется и в three.js. Хотя в этом есть смысл, было бы неплохо после импорта автоматически центрировать -по исходной точке.

Я видел некоторые обсуждения в различных загрузчиках файлов о получении границ импортированной модели, но мне не удалось найти никаких ссылок на то, как это сделать.

Проблема масштабирования менее важна, но я чувствую, что она связана с функцией границ, поэтому я тоже задал ее.

РЕДАКТИРОВАТЬ:

Больше информации после того, как немного поиграем и еще несколько поисков в Google...

Код моей функции обратного вызова при загрузке файла collada теперь выглядит так:

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....

Это генерирует некоторые интересные данные о модели. Я могу получить общую экстремальную координату для модели,который, как я предполагаю, (, вероятно, неправильно )был бы близок к общей ограничивающей рамке для модели. Но попытки сделать что-либо с этими координатами (, например усреднение и перемещение модели к средним значениям ), приводят к противоречивым результатам.

Кроме того, кажется неэффективным перебирать каждую геометрию для модели, есть ли лучший способ? Если нет, можно ли применить эту логику к другим загрузчикам?

8
задан shadyhill 2 August 2012 в 06:22
поделиться