解决使用XbsjEarth提供的Obj.Tileset方法加载3dtile模型,却无法显示出来的问题

4 篇文章 0 订阅
3 篇文章 0 订阅

XbsjEarth

该库提供Obj.Tileset方法,加载3dtile模型,但是在地图上却无法显示出该模型,且控制台也没有报错,核心代码如下所示:

const getEarth = (...p) => {
    for(let pi of p){
        if(pi instanceof XE.Earth){
            return pi;
        }
        if(typeof pi === 'object'){
            let v = null;
            for(let k in pi){
                v = pi[k];
                if(v instanceof XE.Earth){
                    return v;
                }
            }
        }
    }
    return null;
};

function TilesetModel(option) {
	const _url = option.url
	const _id = option.id
	...
	const instance = new XE.Obj.Tileset(getEarth(...arguments) || _earthsdk);
	var conf = {
		"xbsjType": "Tileset",
		url:_url,
		"xbsjRotation": [_heading,_pitch,_roll],
        xbsjScale:[_scale,_scale,_scale],
        ...
	}
	instance.xbsjFromJSON(conf);
	
	instance.xbsjGuid = _id;
	instance._tileset.guid = _id;
	
	if (!isNaN(option.colorBlendMode)) {
        instance._tileset.colorBlendMode = option.colorBlendMode;
    }
    if (!isNaN(option.colorBlendAmount)) {
        instance._tileset.colorBlendAmount = option.colorBlendAmount;
    }
}

但用它加载某特定的3dTile数据时,却无法在地图上显示,控制台也没报错

推断 -> 可能是该3dTile数据的部分属性没有获取到(或封装的参数不兼容),从而导致模型没有加载在地图上。

该如何解决呢?既然XbsjEarth是基于Cesium库而封装的,那直接使用原生Cesium去加载该3dTile,是不是可以解决该问题呢?

Cesium

其部分核心代码如下所示:

const viewer = new Cesium.Viewer("cesiumContainer");
const tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
	url
}));
viewer.flyTo(tileset)

使用该方法,便能成功加载上面的3dTile了。

结论:看来封装的库虽好,但某些时候可能会出现一些意想不到的问题,建议大家多了解底层代码,这样才能从根本上去解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值