CustomShader

new Cesium.CustomShader (options)

ModelExperimental Cesium3DTileset 一起使用的用户定义的 GLSL 着色器。

如果使用纹理制服,则必须进行额外的资源管理:

  • 必须在每一帧调用 update 函数。当自定义着色器传递给 ModelExperimental Cesium3DTileset 时,此步骤将自动处理
  • 当不再需要自定义着色器来正确清理 GPU 资源时,必须调用 CustomShader#destroy 。应用程序负责调用此方法。

要在 Cesium3DTileset ModelExperimental 请将 ExperimentalFeatures.enableModelExperimental 设置为 true 或 tileset.enableModelExperimental 设置为 true

有关更详细的文档,请参阅 自定义着色器指南

Name Type Description
options Object 具有以下选项的对象
姓名 类型 默认 描述
mode 自定义着色器模式 CustomShaderMode.MODIFY_MATERIAL 可选 自定义着色器模式,它决定了如何将自定义着色器代码插入到片段着色器中。
lightingModel 照明模型 可选 光照模型(例如 PBR 或 unlit)。如果存在,这将覆盖模型的默认照明。
isTranslucent 布尔值 false 可选 如果设置,模型将呈现为半透明。这会覆盖模型的默认设置。
uniforms Object.<String, UniformSpecifier > 可选 用户定义制服的字典。关键是将出现在 GLSL 代码中的统一名称。 value 是描述统一类型和初始值的对象
varyings Object.<String, VaryingType > 可选 用于声明着色器中使用的其他 GLSL 变化的字典。关键是将出现在 GLSL 代码中的不同名称。该值是变量的数据类型。对于每个变化,声明将自动添加到着色器的顶部。调用者负责在顶点着色器中分配一个值并在片段着色器中使用该值。
vertexShaderText 细绳 可选 自定义顶点着色器作为 GLSL 代码字符串。它必须包含一个名为 vertexMain 的 GLSL 函数。请参阅预期签名的示例。如果未指定,则在计算的顶点着色器中将跳过自定义顶点着色器步骤。
fragmentShaderText 细绳 可选 自定义片段着色器作为一串 GLSL 代码。它必须包含一个名为 fragmentMain 的 GLSL 函数。请参阅预期签名的示例。如果未指定,将在计算的片段着色器中跳过自定义片段着色器步骤。
Example:
const customShader = new CustomShader({
  uniforms: {
    u_colorIndex: {
      type: Cesium.UniformType.FLOAT,
      value: 1.0
    },
    u_normalMap: {
      type: Cesium.UniformType.SAMPLER_2D,
      value: new Cesium.TextureUniform({
        url: "http://example.com/normal.png"
      })
    }
  },
  varyings: {
    v_selectedColor: Cesium.VaryingType.VEC3
  },
  vertexShaderText: `
  void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {
    v_selectedColor = mix(vsInput.attributes.color_0, vsInput.attributes.color_1, u_colorIndex);
    vsOutput.positionMC += 0.1 * vsInput.attributes.normal;
  }
  `,
  fragmentShaderText: `
  void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
    material.normal = texture2D(u_normalMap, fsInput.attributes.texCoord_0);
    material.diffuse = v_selectedColor;
  }
  `
});
Experimental

This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.

Methods

setUniform (uniformName, value)

更新着色器中声明的制服的值
Name Type Description
uniformName String 制服的 GLSL 名称。这必须匹配构造函数中声明的制服之一
value Boolean | Number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | String | Resource 制服的新价值。