Cesium GLTF Model 设置图片纹理透明度

260 阅读1分钟

现有的Cesium库中不支持对模型的编辑,自然也不包括修改贴图或者修改贴图的透明度等功能

需要修改 packages\engine\Source\Scene\Model\MaterialPipelineStage.js 中

processMetallicRoughnessUniforms 函数

const baseColorTextureAlpha = metallicRoughness.baseColorTextureAlpha;
if (defined(baseColorTextureAlpha)) {
    shaderBuilder.addDefine("HAS_BASE_COLOR_TEXTURE_ALPHA", undefined, ShaderDestination.FRAGMENT);
    shaderBuilder.addUniform(
      "float",
      "u_baseColorTextureAlpha",
      ShaderDestination.FRAGMENT
    );
    uniformMap.u_baseColorTextureAlpha = function() {
      return metallicRoughness.baseColorTextureAlpha;
    };
}

对应的 packages\engine\Source\Shaders\Model\MaterialStageFS.js 中修改

materialStage 中添加

#ifdef HAS_BASE_COLOR_TEXTURE_ALPHA\n\
baseColorWithAlpha.a *= u_baseColorTextureAlpha;\n\
#endif\n\

再由上层传入对应的 值即可实现。