与
ModelExperimental
和
Cesium3DTileset
一起使用的用户定义的 GLSL 着色器。
如果使用纹理制服,则必须进行额外的资源管理:
-
必须在每一帧调用
update
函数。当自定义着色器传递给ModelExperimental
或Cesium3DTileset
时,此步骤将自动处理 -
当不再需要自定义着色器来正确清理 GPU 资源时,必须调用
CustomShader#destroy
。应用程序负责调用此方法。
要在
Cesium3DTileset
ModelExperimental
请将
ExperimentalFeatures.enableModelExperimental
设置为
true
或 tileset.enableModelExperimental 设置为
true
。
有关更详细的文档,请参阅 自定义着色器指南 。
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 = 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
更新着色器中声明的制服的值
Name | Type | Description |
---|---|---|
uniformName
|
String | 制服的 GLSL 名称。这必须匹配构造函数中声明的制服之一 |
value
|
Boolean | Number | Cartesian2 | Cartesian3 | Cartesian4 | Matrix2 | Matrix3 | Matrix4 | String | Resource | 制服的新价值。 |