一个用户定义的 GLSL 着色器,与
Model 以及
Cesium3DTileset 一起使用。
如果使用纹理 uniforms,则必须进行额外的资源管理:
-
必须每帧调用
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
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.
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>
用户声明的附加 uniforms。
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:
更新着色器中声明的 uniform 的值
| Name | Type | Description |
|---|---|---|
uniformName |
string | uniform 的 GLSL 名称。它必须与构造函数中声明的某个 uniform 相匹配 |
value |
boolean | number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | string | Resource | TextureUniform | uniform 的新值。 |
