three.js如何确定3dtile格式的模型的中心点和缩放比例。
大家好!我手上有多个3dtile格式的模型(tileset.json + b3dm),请问如何确定合适的比例?即在three.js中如何确定像机的位置和缩放比例?
文件列表,部分如下:
tileset.json的数据 部分如下:
我尝试了如下代码,但max、min都是正负无限:
let boxHelper = new THREE.BoxHelper(obj);
boxHelper.geometry.computeBoundingBox();
let box = boxHelper.geometry.boundingBox;
console.log('box', box);
const center1 = new Vector3();
box.getCenter(center1);
console.log('center1', center1);
let maxDiameter = Math.max((box.max.x - box.min.x), (box.max.y - box.min.y), (box.max.z - box.min.z));
tileset的中心点,我也拿到了 是 (-1.99932, 2.31081, 6.32424),但我确实这是否跟像机位置有关系。但可以确定的是:这个中心点不可以直接用,因为在three.js中每像素代表1m,而我的模型大约25cm。
以下回答来自CHATGPT,
在three.js中确定3D tile格式模型的中心点和缩放比例可以通过以下步骤进行:
var loader = new THREE.Cesium3DTileLoader();
loader.load('path/to/tileset.json').then(function(tileset) {
scene.add(tileset);
});
var box = new THREE.Box3().setFromObject(tileset);
var center = new THREE.Vector3();
box.getCenter(center);
var size = new THREE.Vector3();
box.getSize(size);
var maxDimension = Math.max(size.x, size.y, size.z);
var scale = 1.0 / maxDimension;
tileset.scale.set(scale, scale, scale);
在这段代码中,我们使用Box3计算了模型的边界框,然后计算了模型的中心点和最大维度,最终得到了模型的缩放比例。这个缩放比例可以用来确定在适当的位置摆放相机的位置和视口的大小。
通常,在加载3D tile模型时,three.js会根据边界框自动调整相机的位置和视口的大小。但是,在某些情况下,我们可能需要手动调整这些参数以达到更好的效果。在这种情况下,可以使用相机的position属性和PerspectiveCamera的fov属性来手动控制相机的位置和视口的大小。
希望以上步骤能够帮到你。
版本不兼容,降1级
代码发出来看一下问题。
//获取模型适合观察的缩放的比例
getFitScaleValue: function(obj){
var boxHelper = new THREE.BoxHelper(obj);
boxHelper.geometry.computeBoundingBox();
var box = boxHelper.geometry.boundingBox;
var maxDiameter = Math.max((box.max.x - box.min.x), (box.max.y - box.min.y), (box.max.z - box.min.z));
return this.camera.position.z / maxDiameter;
},
//设置模型到适合观察的大小
setScaleToFitSize: function(obj) {
var scaleValue = this.getFitScaleValue(obj);
obj.scale.set(scaleValue, scaleValue, scaleValue);
return scaleValue;
},