zoukankan      html  css  js  c++  java
  • shader之cesium内置变量、常量、函数

    shader之cesium内置变量、常量、函数

    内置uniform

    内置uniform主要置于AutomaticUniforms类里面,该类私有未开放文档。

    • czm_backgroundColor

    代表当前场景背景颜色的自动GLSL制服。

    例:
    // GLSL声明
    统一vec4 czm_backgroundColor;
    //示例:如果给定颜色的RGB与背景颜色匹配,则将其反转。
    vec4 AdjustColorForContrast(vec4颜色)
    {
        如果(czm_backgroundColor.rgb == color.rgb)
        {
            color.rgb = vec3(1.0)-color.rgb;
        }
        返回颜色;
    }
    • czm_brdfLut

    包含BRDF查找纹理的自动GLSL制服,用于基于图像的照明计算。

    例:
    // GLSL声明
    统一采样器2D czm_brdfLut;
    //示例:对于给定的粗糙度和NdotV值,在红色和绿色通道中找到材料的BRDF信息
    浮点粗糙度= 0.5;
    float NdotV =点(法线,视图);
    vec2 brdfLut = texture2D(czm_brdfLut,vec2(NdotV,1.0-粗糙度))。rg;

    包含相机定义的平截头体的近距离(x)和远距离(的自动GLSL制服y这是用于多视锥渲染的单个视锥。

    例:
    // GLSL声明
    统一vec2 czm_currentFrustum;
    //示例
    浮动frustumLength = czm_currentFrustum.y-czm_currentFrustum.x;

    自动GLSL制服,代表模型坐标中摄像机位置的高位。Precisions,Precisions中所述,它用于GPU RTE以消除渲染时的抖动伪影 

    例:
    // GLSL声明
    统一vec3 czm_encodedCameraPositionMCHigh;

    自动GLSL制服,表示模型坐标中摄像机位置的低位。Precisions,Precisions中所述,它用于GPU RTE以消除渲染时的抖动伪影 

    例:
    // GLSL声明
    统一vec3 czm_encodedCameraPositionMCLow;

    包含相机定义的平截头体的近距离(x)和远距离(的自动GLSL制服y这是可能的最大视锥,而不是用于多视锥渲染的单个视锥。

    例:
    // GLSL声明
    统一vec2 czm_entireFrustum;
    //示例
    浮动frustumLength = czm_entireFrustum.y-czm_entireFrustum.x;
    • czm_environmentMap

    包含场景内使用的环境贴图的自动GLSL制服。

    例:
    // GLSL声明
    统一采样器多维数据集czm_environmentMap;
    //示例:在模型上完美映射环​​境图
    浮动反射=反射(视图,正常);
    vec4 ReflectionColor = textureCube(czm_environmentMap,反映);

    自动GLSL制服,其中包含以米为单位的2D场景中眼睛(相机)的高度(x)和高度的平方(y)。

    • czm_fogDensity

    自动GLSL均匀标量,用于根据距相机的距离将颜色与雾色混合。

    表示帧号的自动GLSL制服。该制服每帧自动增加。

    • czm_frustumPlanes

    到视锥平面的距离。顶部,底部,左侧和右侧的距离分别是x,y,z和w分量。

    • czm_geometricToleranceOverMeter

    自动GLSL均匀标量,表示每米的几何公差

    • czm_imagerySplitPosition

    自动GLSL制服,表示在使用分割器渲染图像图层时要使用的分割器位置。这将是相对于画布的像素坐标。

    自动GLSL制服,表示一个4x4投影变换矩阵,其远平面为无穷大,它将眼睛坐标转换为剪辑坐标。剪辑坐标是顶点着色器gl_Position 输出的坐标系 无限远平面用于阴影体积和具有代理几何体的GPU射线投射等算法中,以确保三角形不会被远平面夹住。

    例:
    // GLSL声明
    统一的mat4 czm_infiniteProjection;
    //示例
    gl_Position = czm_infiniteProjection * eyePosition;

    自动GLSL制服,代表将世界坐标转换为模型坐标的4x4模型转换矩阵。

    例:
    // GLSL声明
    统一的mat4 czm_inverseModel;
    //示例
    vec4 modelPosition = czm_inverseModel * worldPosition;

    自动GLSL制服,代表从眼睛坐标转换为模型坐标的4x4转换矩阵。

    例:
    // GLSL声明
    统一的mat4 czm_inverseModelView;
    //示例
    vec4 modelPosition = czm_inverseModelView * eyePosition;

    自动GLSL制服,代表从眼睛坐标转换为3D模型坐标的4x4转换矩阵。在3D模式下,这与czm_inverseModelView相同 ,但是在2D和Columbus View中,它表示模型逆视图矩阵,就好像相机在3D模式下处于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat4 czm_inverseModelView3D;
    //示例
    vec4 modelPosition = czm_inverseModelView3D * eyePosition;

    自动GLSL制服,表示将剪辑坐标转换为模型坐标的4x4逆模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_inverseModelViewProjection;
    //示例
    vec4 modelPosition = czm_inverseModelViewProjection * clipPosition;

    自动GLSL制服,表示一个3x3法向变换矩阵,该矩阵将眼坐标中的法向矢量变换为模型坐标。这与czm_normal提供的转换相反 

    例:
    // GLSL声明
    统一的mat3 czm_inverseNormal;
    //示例
    vec3 normalMC = czm_inverseNormal * normalEC;

    自动GLSL制服,表示一个3x3法线变换矩阵,该矩阵将眼坐标中的法向矢量变换为3D模型坐标。这与czm_normal提供的转换相反 在3D模式下,这与czm_inverseNormal相同 ,但是在2D和Columbus View中,它表示逆法线变换矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat3 czm_inverseNormal3D;
    //示例
    vec3 normalMC = czm_inverseNormal3D * normalEC;

    自动GLSL制服,表示从剪辑坐标转换为眼睛坐标的4x4反投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_inverseProjection;
    //示例
    vec4 eyePosition = czm_inverseProjection * clipPosition;

    自动GLSL制服,表示从眼睛坐标转换为世界坐标的4x4转换矩阵。

    例:
    // GLSL声明
    统一的mat4 czm_inverseView;
    //示例
    vec4 worldPosition = czm_inverseView * eyePosition;

    自动GLSL制服,代表从3D眼睛坐标转换为世界坐标的4x4转换矩阵。在3D模式下,这与czm_inverseView相同 ,但是在2D和Columbus View中,它表示反视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat4 czm_inverseView3D;
    //示例
    vec4 worldPosition = czm_inverseView3D * eyePosition;

    自动GLSL制服,表示将剪辑坐标转换为世界坐标的4x4视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_inverseViewProjection;
    //示例
    vec4 worldPosition = czm_inverseViewProjection * clipPosition;

    表示3x3旋转矩阵的自动GLSL制服,该矩阵将向量从眼睛坐标转换为世界坐标。

    例:
    // GLSL声明
    统一的mat3 czm_inverseViewRotation;
    //示例
    vec4 worldVector = czm_inverseViewRotation * eyeVector;

    表示3x3旋转矩阵的自动GLSL制服,该矩阵将向量从3D眼睛坐标转换为世界坐标。在3D模式下,这与czm_inverseViewRotation相同 ,但是在2D和Columbus View中,它表示反视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat3 czm_inverseViewRotation3D;
    //示例
    vec4 worldVector = czm_inverseViewRotation3D * eyeVector;
    • czm_invertClassificationColor

    自动GLSL制服,将成为未分类3D瓷砖的突出显示颜色。

    • czm_log2FarPlusOne

    自动GLSL制服,包含远距离+ 1.0的log2。在反转对数深度计算时使用。

    • czm_log2NearDistance

    包含近距离log2的自动GLSL制服。在片段着色器中写入日志深度时使用。

    • czm_minimumDisableDepthTestDistance

    自动GLSL制服,表示到摄像机的距离,在该距离上禁用广告牌,标签和点的深度测试,以例如防止剪切地形。设置为零时,应始终应用深度测试。如果小于零,则永远不要应用深度测试。

    自动GLSL制服,表示将模型坐标转换为世界坐标的4x4模型转换矩阵。

    例:
    // GLSL声明
    统一的mat4 czm_model;
    //示例
    vec4 worldPosition = czm_model * modelPosition;

    自动GLSL制服,表示将模型坐标转换为眼睛坐标的4x4模型视图转换矩阵。 

    位置应使用转换为眼睛坐标 czm_modelView ,法线应使用czm_normal转换 

    例:
    // GLSL声明
    统一的mat4 czm_modelView;
    //示例
    vec4 eyePosition = czm_modelView * modelPosition;
    //上面的代码等效于,但比以下代码更有效:
    vec4 eyePosition = czm_view * czm_model * modelPosition;

    自动GLSL制服,表示将3D模型坐标转换为眼睛坐标的4x4模型视图转换矩阵。在3D模式下,这与czm_modelView相同 ,但是在2D和Columbus View中,它表示模型视图矩阵,就好像照相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。 

    位置应使用转换为眼睛坐标 czm_modelView3D ,法线应使用czm_normal3D转换 

    例:
    // GLSL声明
    统一的mat4 czm_modelView3D;
    //示例
    vec4 eyePosition = czm_modelView3D * modelPosition;
    //上面的代码等效于,但比以下代码更有效:
    vec4 eyePosition = czm_view3D * czm_model * modelPosition;

    自动GLSL制服,表示将模型坐标转换为剪辑坐标的4x4模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 投影矩阵将远平面放置在无穷远处。这在诸如阴影体积和具有代理几何体的GPU射线投射之类的算法中很有用,以确保三角形不会被远端平面修剪。

    例:
    // GLSL声明
    统一的mat4 czm_modelViewInfiniteProjection;
    //示例
    vec4 gl_Position = czm_modelViewInfiniteProjection * modelPosition;
    //上面的代码等效于,但比以下代码更有效:
    gl_Position = czm_infiniteProjection * czm_view * czm_model * modelPosition;

    自动GLSL制服,表示将模型坐标转换为剪辑坐标的4x4模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_modelViewProjection;
    //示例
    vec4 gl_Position = czm_modelViewProjection * modelPosition;
    //上面的代码等效于,但比以下代码更有效:
    gl_Position = czm_projection * czm_view * czm_model * modelPosition;

    自动GLSL制服,表示4x4模型-视图-投影转换矩阵,该矩阵将相对于眼睛的模型坐标转换为裁剪坐标。剪辑坐标是顶点着色器gl_Position 输出的坐标系 与czm_translateRelativeToEye结合使用。

    例:
    // GLSL声明
    统一的mat4 czm_modelViewProjectionRelativeToEye;
    //示例
    vec3 positionHigh属性;
    属性vec3 positionLow;
    无效main()
    {
      vec4 p = czm_translateRelativeToEye(positionHigh,positionLow);
      gl_Position = czm_modelViewProjectionRelativeToEye * p;
    }

    自动GLSL制服,代表4x4模型-视图转换矩阵,该矩阵将相对于眼睛的模型坐标转换为眼睛坐标。与czm_translateRelativeToEye结合使用。

    例:
    // GLSL声明
    统一的mat4 czm_modelViewRelativeToEye;
    //示例
    vec3 positionHigh属性;
    属性vec3 positionLow;
    无效main()
    {
      vec4 p = czm_translateRelativeToEye(positionHigh,positionLow);
      gl_Position = czm_projection *(czm_modelViewRelativeToEye * p);
    }

    自动GLSL制服,代表在眼坐标中到达月球的归一化方向。这通常用于定向照明计算。

    例:
    // GLSL声明
    统一vec3 czm_moonDirectionEC;
    //示例
    浮点数= max(dot(czm_moonDirectionEC,normalEC),0.0);

    自动GLSL制服,表示2D / Columbus View和3D之间的当前变形过渡时间,其中0.0是2D或Columbus View,而1.0是3D。

    例:
    // GLSL声明
    统一浮动czm_morphTime;
    //示例
    vec4 p = czm_columbusViewMorph(position2D,position3D,czm_morphTime);

    自动GLSL制服,表示3x3法向变换矩阵,该矩阵将模型坐标中的法向矢量转换为眼睛坐标。 

    应使用czm_modelView将位置转换为眼睛坐标,  而应使用转换法线 czm_normal

    例:
    // GLSL声明
    统一的mat3 czm_normal;
    //示例
    vec3 eyeNormal = czm_normal *正常;

    表示3x3法线变换矩阵的自动GLSL制服,该矩阵将3D模型坐标中的法线向量变换为眼睛坐标。在3D模式下,这与czm_normal相同 ,但是在2D和Columbus View中,它代表法线变换矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。 

    应使用czm_modelView3D将位置转换为眼睛坐标,  而应使用转换法线 czm_normal3D

    例:
    // GLSL声明
    统一的mat3 czm_normal3D;
    //示例
    vec3 eyeNormal = czm_normal3D *正常;
    • czm_orthographicIn3D

    自动GLSL制服,用于指示当前摄影机是否在3D模式下进行正交投影。

    • czm_pass

    表示当前渲染过程的自动GLSL制服。

    例:
    // GLSL声明
    均匀浮动czm_pass;
    //示例
    如果(((czm_pass == czm_passTranslucent)&& isOpaque())
    {
        gl_Position * = 0.0; //在半透明通道中剔除不透明的几何
    }

    自动GLSL制服,表示将眼睛坐标转换为剪辑坐标的4x4投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_projection;
    //示例
    gl_Position = czm_projection * eyePosition;
    • czm_resolutionScale

    自动GLSL制服,表示画布坐标空间与画布像素空间的比率。

    例:
    统一浮动czm_resolutionScale;
    • czm_sceneMode

    表示当前SceneMode的自动GLSL制服,表示为float。

    例:
    // GLSL声明
    统一浮动czm_sceneMode;
    //示例
    如果(czm_sceneMode == czm_sceneMode2D)
    {
        eyeHeightSq = czm_eyeHeight2D.y;
    }

    自动GLSL制服,以眼坐标表示太阳的归一化方向。这通常用于定向照明计算。

    例:
    // GLSL声明
    统一vec3 czm_sunDirectionEC;
    //示例
    浮点数=最大值(点(czm_sunDirectionEC,normalEC),0.0);

    自动GLSL制服,代表世界坐标中太阳的归一化方向。这通常用于定向照明计算。

    例:
    // GLSL声明
    统一vec3 czm_sunDirectionWC;

    一种自动GLSL制服,用于表示哥伦布视图世界坐标中的太阳位置。

    例:
    // GLSL声明
    统一vec3 czm_sunPositionColumbusView;

    自动GLSL制服,表示世界坐标中的太阳位置。

    例:
    // GLSL声明
    统一vec3 czm_sunPositionWC;

    表示3x3旋转矩阵的自动GLSL制服,该矩阵在当前场景时间从“真赤道均分(TEME)”轴转换为伪固定轴。

    例:
    // GLSL声明
    统一的mat3 czm_temeToPseudoFixed;
    //示例
    vec3 pseudoFixed = czm_temeToPseudoFixed * teme;

    自动GLSL制服,代表将世界坐标转换为眼睛坐标的4x4视图转换矩阵。

    例:
    // GLSL声明
    统一的mat4 czm_view;
    //示例
    vec4 eyePosition = czm_view * worldPosition;

    自动GLSL制服,表示将3D世界坐标转换为眼睛坐标的4x4视图转换矩阵。在3D模式下,这与czm_view相同 ,但是在2D和Columbus View中,它表示视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat4 czm_view3D;
    //示例
    vec4 eyePosition3D = czm_view3D * worldPosition3D;

    自动GLSL制服,代表世界坐标系中观察者(摄像机)的位置。

    含有视口的自动GLSL均匀 x,  y,  width,和 height 性质在 vec4的 x,  y,  z,和 w 分量。

    例:
    // GLSL声明
    统一vec4 czm_viewport;
    //通过除法将窗口坐标分量缩放为[0,1]
    //通过视口的宽度和高度。
    vec2 v = gl_FragCoord.xy / czm_viewport.zw;

    自动GLSL制服,表示将窗口坐标转换为剪辑坐标的4x4正投影矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 。 

    当顶点着色器输入或操作BillboardCollection完成的窗口坐标时,此转换很有用。 

    不要将czm_viewportTransformation 与 混淆 czm_viewportOrthographic前者从规范化的设备坐标转换为窗口坐标。后者从窗口坐标转换为剪辑坐标,通常用于分配给 gl_Position

    例:
    // GLSL声明
    统一的mat4 czm_viewportOrthographic;
    //示例
    gl_Position = czm_viewportOrthographic * vec4(windowPosition,0.0,1.0);

    表示4x4转换矩阵的自动GLSL制服,它将转换后的设备坐标转换为窗口坐标。使用上下文的完整视口,并且深度范围假定为 near = 0 和 far = 1。 

    当需要像BillboardCollection那样操作顶点着色器中的窗口坐标时,此转换很有用。在许多情况下,将不会直接使用此矩阵。而是使用czm_modelToWindowCoordinates直接将模型坐标转换为窗口坐标。 

    不要czm_viewportTransformation 与 czm_viewportOrthographic混淆 前者从规范化的设备坐标转换为窗口坐标。后者从窗口坐标转换为剪辑坐标,通常用于分配给 gl_Position

    例:
    // GLSL声明
    统一的mat4 czm_viewportTransformation;
    //将czm_viewportTransformation用作
    //从模型坐标转换为窗口坐标。
    vec4 q = czm_modelViewProjection * positionMC; //裁剪坐标模型
    q.xyz / = qw; //裁剪到规范化的设备坐标(ndc)
    q.xyz =(czm_viewportTransformation * vec4(q.xyz,1.0))。xyz; // ndc到窗口坐标

    自动GLSL制服,表示将世界坐标转换为剪辑坐标的4x4视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

    例:
    // GLSL声明
    统一的mat4 czm_viewProjection;
    //示例
    vec4 gl_Position = czm_viewProjection * czm_model * modelPosition;
    //上面的代码等效于,但比以下代码更有效:
    gl_Position = czm_projection * czm_view * czm_model * modelPosition;

    代表3x3视图旋转矩阵的自动GLSL制服,该矩阵将世界坐标中的矢量转换为眼睛坐标。

    例:
    // GLSL声明
    统一的mat3 czm_viewRotation;
    //示例
    vec3 eyeVector = czm_viewRotation * worldVector;

    表示3x3视图旋转矩阵的自动GLSL制服,该矩阵将3D世界坐标中的矢量转换为眼睛坐标。在3D模式下,这与czm_viewRotation相同 ,但是在2D和Columbus View中,它表示视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

    例:
    // GLSL声明
    统一的mat3 czm_viewRotation3D;
    //示例
    vec3 eyeVector = czm_viewRotation3D * worldVector;

    内置常量

    这里常量和函数的定义,在cesium官网的一个历史文档里有描述,后来版本的文档里没有了。

    https://cesiumjs.org/releases/b28/Documentation/index.html

    点击glsl,可以看到。

    • czm_epsilon6
    • czm_epsilon7
    • czm_infinity
    • czm_oneOverPi
    • czm_oneOverTwoPi
    • czm_passCesium3DTile
    • czm_passCesium3DTileClassification
    • czm_passCesium3DTileClassificationIgnoreShow
    • czm_pass分类
    • czm_passCompute
    • czm_pass环境
    • czm_passGlobe
    • czm_pass不透明
    • czm_passOverlay
    • czm_passTerrain分类
    • czm_passTranslucent
    • czm_pi
    • czm_piOverFour
    • czm_piOverSix
    • czm_piOverThree
    • czm_piOverTwo
    • czm_radiansPerDegree
    • czm_sceneMode
    • czm_sceneMode2D

    内置结构体定义

    内置函数

    czm_alpha重量

    原文:https://www.cnblogs.com/mazhenyu/p/11438990.html

  • 相关阅读:
    IaaS、PaaS、SaaS的简单介绍
    抓包工具F12和Fiddler的使用
    Element的el-cascader组件获取级联选中的label值
    解决C盘爆满的方法
    js-简单的加密解密函数
    使用removeBg去除图片背景
    git手动提交命令
    JS-下拉筛选的实现
    mysql根据json字段内容作为查询条件
    获取访问用户的客户端IP(适用于公网与局域网)
  • 原文地址:https://www.cnblogs.com/s313139232/p/14317366.html
Copyright © 2011-2022 走看看