vue-Cesium 和 Cesium加载3dtiles ,出现An error occurred while rendering

报错原因

这是因为gltf1.0升级到gltf2.0后不支持自定义shader

解决方法一

var fixGltf = function(gltf) {

    if (!gltf.extensionsUsed) {

        return;

    }

 

    var v = gltf.extensionsUsed.indexOf('KHR_technique_webgl');

    var t = gltf.extensionsRequired.indexOf('KHR_technique_webgl');

    // 中招了。。

    if (v !== -1) {

        gltf.extensionsRequired.splice(t, 1, 'KHR_techniques_webgl');

        gltf.extensionsUsed.splice(v, 1, 'KHR_techniques_webgl');

        gltf.extensions = gltf.extensions || {};

        gltf.extensions['KHR_techniques_webgl'] = {};

        gltf.extensions['KHR_techniques_webgl'].programs = gltf.programs;

        gltf.extensions['KHR_techniques_webgl'].shaders = gltf.shaders;

        gltf.extensions['KHR_techniques_webgl'].techniques = gltf.techniques;

        var techniques = gltf.extensions['KHR_techniques_webgl'].techniques;

 

        gltf.materials.forEach(function (mat, index) {

            gltf.materials[index].extensions['KHR_technique_webgl'].values = gltf.materials[index].values;

            gltf.materials[index].extensions['KHR_techniques_webgl'] = gltf.materials[index].extensions['KHR_technique_webgl'];

 

            var vtxfMaterialExtension = gltf.materials[index].extensions['KHR_techniques_webgl'];

 

            for (var value in vtxfMaterialExtension.values) {

                var us = techniques[vtxfMaterialExtension.technique].uniforms;

                for (var key in us) {

                    if (us[key] === value) {

                        vtxfMaterialExtension.values[key] = vtxfMaterialExtension.values[value];

                        delete vtxfMaterialExtension.values[value];

                        break;

                    }

                }

            };

        });

 

        techniques.forEach(function (t) {

            for (var attribute in t.attributes) {

                var name = t.attributes[attribute];

                t.attributes[attribute] = t.parameters[name];

            };

 

            for (var uniform in t.uniforms) {

                var name = t.uniforms[uniform];

                t.uniforms[uniform] = t.parameters[name];

            };

        });

    }

}

 

Object.defineProperties(Cesium.Model.prototype, {

    _cachedGltf: {

        set: function (value) {

            this._vtxf_cachedGltf = value;

            if (this._vtxf_cachedGltf && this._vtxf_cachedGltf._gltf) {

                fixGltf(this._vtxf_cachedGltf._gltf);

            }

        },

        get: function () {

            return this._vtxf_cachedGltf;

        }

    }

});

方法2,osgb转3dtiles时,直接使用工具osg2cesiumApp(我的资源里有哦)

使用这个转出来的3dtiles,不会报错,下载地址:
https://download.csdn.net/download/zhengshaofeng1/12692050 (转码过程中程序未响应的话,不用理会,他会转完的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值