用户定义的 GLSL 着色器,适用于
Model 以及
Cesium3DTileset。
如果使用了纹理 uniform,则必须进行额外的资源管理:
-
每帧必须调用
update函数。当自定义着色器传递给Model或Cesium3DTileset时,此步骤会自动处理。 -
当不再需要自定义着色器时,必须调用
CustomShader#destroy以正确清理 GPU 资源。应用程序 负责调用此方法。
有关更详细的文档,请参见 Custom Shader Guide。
| Name | Type | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
一个具有以下选项的对象。
|
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 = texture(u_normalMap, fsInput.attributes.texCoord_0);
material.diffuse = v_selectedColor;
}
`
});
Experimental
此功能使用的是 3D Tiles 规范的一部分,该规范尚未最终确定,并可能在没有 Cesium 标准弃用政策的情况下发生更改。
Members
用户定义的片元着色器的 GLSL 代码。
readonly lightingModel : LightingModel
使用自定义着色器时的光照模型。此值由
CustomShaderPipelineStage 使用。
readonly mode : CustomShaderMode
一个值,决定自定义着色器如何与整体片元着色器交互。此值由
CustomShaderPipelineStage 使用。
readonly translucencyMode : CustomShaderTranslucencyMode
半透明模式,决定自定义着色器的应用方式。如果值为
CustomShaderTranslucencyMode.OPAQUE 或 CustomShaderTranslucencyMode.TRANSLUCENT,自定义着色器
将覆盖模型材质的设置。如果值为 CustomShaderTranslucencyMode.INHERIT,
则自定义着色器将根据原始材质的设置以不透明或半透明形式进行渲染。
-
Default Value:
CustomShaderTranslucencyMode.INHERIT
readonly uniforms : Object.<string, UniformSpecifier>
用户声明的附加 uniforms。
readonly varyings : Object.<string, VaryingType>
用户声明的附加 varyings。此值由
CustomShaderPipelineStage 使用。
用户定义的顶点着色器的 GLSL 代码。
Methods
更新着色器中声明的 uniform 的值。
| Name | Type | Description |
|---|---|---|
uniformName |
string | uniform 的 GLSL 名称。必须与构造函数中声明的 uniforms 之一匹配。 |
value |
boolean | number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | string | Resource | TextureUniform | uniform 的新值。 |
