Есть ли способ определить размер и положение модели, а затем автоматически -центрировать и масштабировать модель так, чтобы она располагалась в начале координат и в поле зрения камеры? Я обнаружил, что когда я импортирую модель 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....
Это генерирует некоторые интересные данные о модели. Я могу получить общую экстремальную координату для модели,который, как я предполагаю, (, вероятно, неправильно )был бы близок к общей ограничивающей рамке для модели. Но попытки сделать что-либо с этими координатами (, например усреднение и перемещение модели к средним значениям ), приводят к противоречивым результатам.
Кроме того, кажется неэффективным перебирать каждую геометрию для модели, есть ли лучший способ? Если нет, можно ли применить эту логику к другим загрузчикам?