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_degreesPerRadian
- czm_depthRange
- czm_epsilon1
- 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_sceneModeColumbusView
- czm_sceneModeMorphing
- czm_solarRadius
- czm_threePiOver2
- czm_twoPi
- czm_webMercatorMaxLatitude
内置结构体定义
- czm_depthRangeStruct
- czm_ellipsoid
- czm_material
- czm_materialInput
- czm_ray
- czm_raySegment
- czm_shadowParameters
内置函数
czm_alpha重量
- czm_antialias
- czm_approximateSphericalCoordinates
- czm_branchFreeTernary
- czm_cascadeColor
- czm_cascadeDistance
- czm_cascadeMatrix
- czm_cascade重量
- czm_columbusViewMorph
- czm_computePosition
- czm_cosineAndSine
- czm_decompressTextureCoordinates
- czm_depthClampFarPlane
- czm_eastNorthUpToEyeCoordinates
- czm_ellipsoidContainsPoint
- czm_ellipsoidNew
- czm_ellipsoidWgs84TextureCoordinates
- czm_equalsEpsilon
- czm_eyeOffset
- czm_eyeToWindowCoordinates
- czm_fastroxAtan
- czm_fog
- czm_gamma正确
- czm_geodeticSurfaceNormal
- czm_getDefaultMaterial
- czm_getLambertDiffuse
- czm_getSpecular
- czm_getWaterNoise
- czm_getWgs84EllipsoidEC
- czm_HSBToRGB
- czm_HSLToRGB
- czm_hue
- czm_inverseGamma
- czm_isEmpty
- czm_isFull
- czm_latitudeToWebMercatorFraction
- czm_lineDistance
- czm_luminance
- czm_metersPerPixel
- czm_modelToWindowCoordinates
- czm_multiplyWithColorBalance
- czm_nearFarScalar
- czm_octDecode
- czm_packDepth
- czm_phong
- czm_planeDistance
- czm_pointAlongRay
- czm_rayEllipsoidIntersectionInterval
- czm_readDepth
- czm_reverseLogDepth
- czm_RGBToHSB
- czm_RGBToHSL
- czm_RGBToXYZ
- czm_sampleOctahedralProjection
- czm_saturation
- czm_shadowDepthCompare
- czm_shadow可见性
- czm_signNotZero
- czm_sphericalHarmonics
- czm_tangentToEyeSpaceMatrix
- czm_transformPlane
- czm_translateRelativeToEye
- czm_translucentPhong
- czm_transpose
- czm_unpackDepth
- czm_unpackFloat
- czm_vertexLogDepth
- czm_windowToEyeCoordinates
- czm_writeDepthClampedToFarPlane
- czm_writeLogDepth
- czm_XYZToRGB
原文:https://www.cnblogs.com/mazhenyu/p/11438990.html