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