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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM