有沒有一種方法可以確定模型的大小和位置,然後自動居中和縮放模型,使其位於原點和視圖內相機?我發現,當我從Sketchup導入Collada模型時,如果模型未在Sketchup的原點處居中,則它不會以three.js爲中心。雖然這是有道理的,但是在導入之後自動中心起源會很好。在three.js模型導入後的智能居中和縮放
我在不同的文件加載器中看到了一些關於獲取導入模型邊界的討論,但我一直無法找到任何有關如何做到這一點的參考。
縮放問題並不重要,但我覺得它與邊界函數有關,這也是我問它的原因。
編輯:
各處走走,多了一些谷歌搜索後打更多信息...
對現在加載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....
這產生了一些關於模型的有趣數據。我可以得到模型的整體極座標,我假設(可能不正確)會接近模型的整體邊界框。但試圖用這些座標來做任何事情(如平均和將模型移動到平均值)會產生不一致的結果。
另外,循環遍歷模型的每個幾何看起來效率不高,有沒有更好的方法?如果不是,這個邏輯能否應用於其他裝載機?
這些應該有幫助 http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object http://stackoverflow.com/questions/20059612/calculate-camera-zoom-required -for-object-to-fit-in-screen-height http://stackoverflow.com/questions/11274358/adjusting-camera-for-visible-three-js-shape http://stackoverflow.com /問題/ 16462848 /三JS-放大到合適寬度的對象 - - 忽略高度 – gaitat 2014-08-13 00:08:11