麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

Cesium API - PostProcessStage 中文文档

本文介绍下Cesium中 PostProcessStage API的详细使用说明。

PostProcessStage API 调用方法

new Cesium.PostProcessStage(options)
在场景渲染的纹理或上一个后期处理阶段的输出上运行一个后期处理阶段。
Name Type Description
options Object 具有下列属性的对象:
Name Type Default Description
fragmentShader String 要使用的片段着色器。默认的sampler2Duniforms是colorTexturedepthTexture。颜色纹理是渲染场景或前一阶段的输出。深度纹理是渲染场景的输出。着色器应该包含一个或两个uniforms。还有一个名为vec2的变量v_textureCoordinates可以用来采样纹理。
uniforms Object optional 一个对象,其属性将用于设置着色器uniforms变量。 属性可以是常量值,也可以是函数。常量值也可以是用作纹理的URI、数据URI或HTML元素。
textureScale Number 1.0 optional 范围(0.0,1.0)内的一个数字,用于调整纹理尺寸。scale为1.0时,会将这个后期处理阶段渲染为视口大小的纹理。
forcePowerOfTwo Boolean false optional 是否强制纹理维数都等于2的幂。
sampleMode PostProcessStageSampleMode PostProcessStageSampleMode.NEAREST optional 如何采样输入颜色纹理。
pixelFormat PixelFormat PixelFormat.RGBA optional 输出纹理的颜色像素格式。
pixelDatatype PixelDatatype PixelDatatype.UNSIGNED_BYTE optional 输出纹理的像素数据类型。
clearColor Color Color.BLACK optional 将输出纹理清除到的颜色。
scissorRectangle BoundingRectangle optional 用于裁剪测试的矩形。
name String createGuid() optional 此后期处理阶段的唯一名称,供组合中的其他阶段参考,如果没有提供名称,将生成GUID。
异常情况:
  • DeveloperError : options.textureScale 大于 0.0 并且小于等于 1.0。
  • DeveloperError : options.pixelFormat 必须是一种颜色格式。
  • DeveloperError : 当options.pixelDatatype是FLOAT,这个WEBGL实现必须支持 OES_texture_float 扩展,检查context.floatingPointTexture。
示例:
// 改变颜色的简单阶段
var fs =
    'uniform sampler2D colorTexture;\n' +
    'varying vec2 v_textureCoordinates;\n' +
    'uniform float scale;\n' +
    'uniform vec3 offset;\n' +
    'void main() {\n' +
    '    vec4 color = texture2D(colorTexture, v_textureCoordinates);\n' +
    '    gl_FragColor = vec4(color.rgb * scale + offset, 1.0);\n' +
    '}\n';
scene.postProcessStages.add(new Cesium.PostProcessStage({
    fragmentShader : fs,
    uniforms : {
        scale : 1.1,
        offset : function() {
            return new Cesium.Cartesian3(0.1, 0.2, 0.3);
        }
    }
}));
// 改变所选颜色的简单阶段。
// 如果czm_selected返回true,则当前片元属于所选数组中的几何图形。
var fs =
    'uniform sampler2D colorTexture;\n' +
    'varying vec2 v_textureCoordinates;\n' +
    'uniform vec4 highlight;\n' +
    'void main() {\n' +
    '    vec4 color = texture2D(colorTexture, v_textureCoordinates);\n' +
    '    if (czm_selected()) {\n' +
    '        vec3 highlighted = highlight.a * highlight.rgb + (1.0 - highlight.a) * color.rgb;\n' +
    '        gl_FragColor = vec4(highlighted, 1.0);\n' +
    '    } else { \n' +
    '        gl_FragColor = color;\n' +
    '    }\n' +
    '}\n';
var stage = scene.postProcessStages.add(new Cesium.PostProcessStage({
    fragmentShader : fs,
    uniforms : {
        highlight : function() {
            return new Cesium.Color(1.0, 0.0, 0.0, 0.5);
        }
    }
}));
stage.selected = [cesium3DTileFeature];
参考:

成员变量

readonlyclearColor : Color
将输出纹理清除到的颜色。
enabled : Boolean
准备就绪时是否执行此后期处理阶段。
readonlyforcePowerOfTwo : Number
是否强制输出纹理尺寸都等于2的幂。
readonlyfragmentShader : String
当执行这个后期处理阶段时使用的片元着色器。

着色器必须包含一个统一的声明,用于colorTexturedepthTexture,或者两者都有。

The shader must contain a vec2 varying declaration for v_textureCoordinates for sampling the texture uniforms. 着色器必须包含一个vec2针对采样纹理uniforms的v_textureCoordinates的 varying 声明。

readonlyname : String
此后期处理阶段的唯一名称,供PostProcessStageComposite中的其他阶段引用。
readonlypixelDatatype : PixelDatatype
输出纹理的像素数据类型。
输出纹理的颜色像素格式。
readonlyready : Boolean
确定此后期处理阶段是否已准备好执行。只有当readyPostProcessStage#enabledtrue时,才会执行后期处理阶段。
如何采样输入的颜色纹理。
用于裁剪测试的BoundingRectangle。默认的边界矩形将禁用裁剪测试。
为应用后期处理而选择的要素。

在片段着色器中,使用czm_selected来决定是否将后期处理阶段应用到该片元。 例如: if (czm_selected(v_textureCoordinates)) { // apply post-process stage } else { gl_FragColor = texture2D(colorTexture, v_textureCordinates); }

readonlytextureScale : Number
范围(0.0,1.0)内的一个数字,用于调整输出纹理的尺寸。如果是1.0会将此后处理阶段渲染为视口大小的纹理。
readonlyuniforms : Object
一个对象,其属性用于设置片段着色器的uniforms。

对象属性值可以是常量,也可以是函数。在执行后处理阶段之前,将在每一帧调用该函数。

常量值也可以是图像的URI、数据URI或可以用作纹理的HTML元素,如HTMLImageElement或HTMLCanvasElement。

If this post-process stage is part of a PostProcessStageComposite that does not execute in series, the constant value can also be the name of another stage in a composite. This will set the uniform to the output texture the stage with that name. 如果此后期处理阶段是未连续执行的 PostProcessStageComposite的一部分,则常量值也可以是复合中另一个阶段的名称。这会将具有该名称的阶段的uniform设置为输出纹理。

内置方法

销毁此对象持有的WebGL资源。

一旦对象被销毁,它将不能在使用; 调用除isDestroyed之外的任何函数都会导致DeveloperError异常。 因此,将返回值(undefined)赋给对象,如示例所示。
异常情况:
参考:
isDestroyed()Boolean
如果该对象没被销毁,返回false。

如果该对象已经被销毁, 使用isDestroyed 会触发 DeveloperError 异常.
返回值:
false
参考:

其他API

Cesium中文API文档手册(v1.63.1版本)参考:《Cesium中文API文档手册(v1.63.1版本)

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)