Cesium CustomShader 不生效的问题

发布时间 2023-08-11 14:51:04作者: 宇宙野牛

CustomShader官网文档(1.95版本):http://cesium.xin/cesium/en/Documentation1.95/CustomShader.html

一个比较刁钻的例子。
这几天想给模型贴图,学习用CustomShader,找了几个文章的demo和官方demo,都不生效,原来代码基本是这样的:

function loadTilesetTexture(tileset) {
    Cesium.ExperimentalFeatures.enableModelExperimental = true;

    let customShader = new Cesium.CustomShader({
        ...
    });
    tileset.customShader = customShader;
}

后来做了各种尝试包括把customShader赋值放到readyPromise之后,在加载模型时直接定义customShader,加延时,换其他类型的模型,升级Cesium等,今天才偶然发现是 enableModelExperimental 这句放的位置不对,应该放在将模型的primitive添加到scene.primitives之前:

    Cesium.ExperimentalFeatures.enableModelExperimental = true;

    tileset = viewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
            ...
        })
    );

    loadTilesetTexture(tileset);

    function loadTilesetTexture(tileset) {
        let customShader = new Cesium.CustomShader({
            ...
        });
        tileset.customShader = customShader;
    }