与
Model 和 Cesium3DTileset 一起使用的用户定义 GLSL 着色器。
如果使用纹理统一变量,必须进行额外的资源管理:
-
update函数必须在每一帧都被调用。当自定义着色器传递给Model或Cesium3DTileset时,此步骤会自动处理 -
不再需要自定义着色器时,必须调用
CustomShader#destroy以正确清理 GPU 资源。 应用程序负责调用此方法。
有关更详细的文档,请参阅 自定义着色器指南。
| 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
透明度模式,决定自定义着色器如何应用。如果值为
CustomShaderTransulcencyMode.OPAQUE 或 CustomShaderTransulcencyMode.TRANSLUCENT,自定义着色器
将覆盖模型材质的设置。如果值为 CustomShaderTransulcencyMode.INHERIT,
自定义着色器将根据图元材质设置渲染为不透明或半透明。
-
Default Value:
CustomShaderTranslucencyMode.INHERIT
readonly uniforms : Object.<string, UniformSpecifier>
用户声明的额外统一变量。
readonly varyings : Object.<string, VaryingType>
用户声明的额外 varyings。
由
CustomShaderPipelineStage 使用
用户定义的顶点着色器 GLSL 代码
Methods
销毁此对象持有的 WebGL 资源。销毁对象允许确定性地
释放 WebGL 资源,而不是依赖垃圾回收器来销毁此对象。
一旦对象被销毁,就不应使用它;调用除
一旦对象被销毁,就不应使用它;调用除
isDestroyed 以外的任何函数将导致 DeveloperError 异常。因此,
应像示例中那样将返回值(undefined)赋给对象。
Throws:
-
DeveloperError : 此对象已被销毁,即已调用 destroy()。
Example:
customShader = customShader && customShader.destroy();
See:
Returns:
如果此对象已被销毁则返回 true,否则返回 false。
See:
更新着色器中声明的统一变量的值
| Name | Type | Description |
|---|---|---|
uniformName |
string | 统一变量的 GLSL 名称。必须与构造函数中声明的统一变量之一匹配 |
value |
boolean | number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | string | Resource | TextureUniform | 统一变量的新值 |
