Android自定義camera2相機(jī) 系列(三)GLSL語言基礎(chǔ)學(xué)習(xí)

前言

該篇文章是繼camera2 的基礎(chǔ)上 添加的 Opengles,實現(xiàn)濾鏡或者黑白灰等效果,由于Opengles 需要設(shè)置 GLSL 語言的 shader鲜锚,這里單獨(dú)加一張 GLSL 的學(xué)習(xí)筆記。閱讀時間20分鐘+

參考文章 湖廣午王 CSDN
參考文章

1. 關(guān)于GLSL

著色器是用來實現(xiàn)圖像渲染的,用來替代固定渲染管線的可編程程序榔袋。著色器替代了傳統(tǒng)的固定渲染管線,可以實現(xiàn)3D圖形學(xué)計算中的相關(guān)計算罕容,由于其可編程性喉镰,可以實現(xiàn)各種各樣的圖像效果而不用受顯卡的固定渲染管線限制。這極大的提高了圖像的畫質(zhì)。

在Opengloes 中著色器分為頂點(diǎn)著色器片元著色器长已,我們可以理解為:頂點(diǎn)著色器是針對每個頂點(diǎn)執(zhí)行一次胞四,用于確定頂點(diǎn)的位置悬垃;片元著色器是針對每個片元(可以理解為每個像素)執(zhí)行一次,用于確認(rèn)渲染每個片元(像素)的顏色廊佩。

2. GLSL 簡要說明

OpenGLES的著色器語言GLSL是一種高級的圖形化編程語言囚聚,其源自應(yīng)用廣泛的C語言顽铸。與傳統(tǒng)的C語言不同的是谓松,它提供了更加豐富的針對于圖像處理的原生類型优质,諸如向量、矩陣之類淑际。OpenGLES 主要包含以下特性:

1.GLSL是一種面向過程的語言,和Java的面向?qū)ο笫遣煌摹?br> 2.它完美的支持向量和矩陣操作扇住。
3.它是通過限定符操作來管理輸入輸出類型的轴合。
4.GLSL提供了大量的內(nèi)置函數(shù)來提供豐富的擴(kuò)展功能地消。

3.1 基本類型

類型 描述
void 同 java拷况,表示空類型裆针。作為函數(shù)的返回類型愚铡,表示這個函數(shù)不返回值拇颅。
bool 布爾類型 rue 和false娘摔,可以產(chǎn)生布爾型的表達(dá)式菲语。
int 整型 代表至少包含16位的有符號的整數(shù)惹盼。十進(jìn)制庸汗,十六進(jìn)制 八進(jìn)制
float 浮點(diǎn)型
bvec2 /3 /4 包含2 / 3 / 4個布爾成分的向量
ivec2 / 3 / 4 包含2 / 3 / 4個整型成分的向量
mat2 或者 mat2x2 2x2的浮點(diǎn)數(shù)矩陣類型
mat3 或者 mat3x3 3x3的浮點(diǎn)數(shù)矩陣類型
mat4 或者 mat4x4 4x4的浮點(diǎn)矩陣
mat2x3 2列3行的浮點(diǎn)矩陣(OpenGL的矩陣是列主順序的) 還有 很多種類型 2× 4 2列 4行 不一一列舉了
sampler1D / 2D / 3D 用于內(nèi)建的紋理函數(shù)中引用指定的1D /2D / 3D 紋理的句柄。只可以作為一致變量或者函數(shù)參數(shù)使用
samplerCube cube map紋理句柄
sampler1DShadow / sampler2DShadow 一維 / 二維深度紋理句柄

代碼舉例 :

float a=1.0;
int b=1;
bool c=true;
vec2 d=vec2(1.0,2.0);
vec3 e=vec3(1.0,2.0,3.0)
vec4 f=vec4(vec3,1.0);
vec4 g=vec4(0.2); //相當(dāng)于vec(0.2,0.2,0.2,0.2)

mat2 i=mat2(0.1,0.5,1.2,2.4);
mat2 j=mat2(0.8); //相當(dāng)于mat2(0.8,0.8,0.8,0.8)

3.2 運(yùn)算符

GLSL語言的操作符與Java 語言相似手报。如下表(操作符的優(yōu)先級從高到低排列

操作符 描述
() 用于表達(dá)式組合蚯舱,函數(shù)調(diào)用改化,構(gòu)造
[ ] 數(shù)組下標(biāo),向量或矩陣的選擇器
. 結(jié)構(gòu)體和向量的成員選擇
++ -- 前綴或后綴的自增自減操作符
+ – ! 一元操作符枉昏,表示正 負(fù) 邏輯非
* / 乘 除操作符
+ - 二元操作符 表示加 減操作
<> <= >= == != 小于陈肛,大于,小于等于兄裂, 大于等于句旱,等于,不等于 判斷符
&& ^^ 邏輯與 晰奖,或谈撒, 異或
?: 條件判斷符
= += –= *= /= 賦值操作符

3.3 結(jié)構(gòu)體

結(jié)構(gòu)體可以組合基本類型和數(shù)組來形成用戶自定義的類型。在定義一個結(jié)構(gòu)體的同時畅涂,你可以定義一個結(jié)構(gòu)體實例港华。或者后面再定義午衰。

struct surface {float indexOfRefraction;
vec3 color;float turbulence;
} mySurface;

surface secondeSurface;

可以通過=為結(jié)構(gòu)體賦值立宜,或者使用 ==,!=來判斷兩個結(jié)構(gòu)體是否相等

只有結(jié)構(gòu)體中的每個成分都相等臊岸,那么這兩個結(jié)構(gòu)體才是相等的橙数。訪問結(jié)構(gòu)體的內(nèi)部成員使用. 來訪問(和 java 相同)。

結(jié)構(gòu)體至少包含一個成員帅戒。固定大小的數(shù)組也可以被包含在結(jié)構(gòu)體中灯帮。GLSL的結(jié)構(gòu)體不支持嵌套定義。只有預(yù)先聲明的結(jié)構(gòu)體可以嵌套其中逻住。

struct myStruct {

  vec3 points[3]; //固定大小的數(shù)組是合法的
  surface surf;  //可以钟哥,之前已經(jīng)定義了
  
  struct velocity {  //不合法float speed;
    vec3 direction;
  } velo;

  subSurface sub; 
  //不合法,沒有預(yù)先聲明瞎访;
  struct subSurface { 
   int id;
  };
};

3.4 數(shù)組

GLSL中只可以使用一維的數(shù)組腻贰。數(shù)組的類型可以是一切基本類型或者結(jié)構(gòu)體。下面的幾種數(shù)組聲明是合法的:

surface mySurfaces[];
vec4 lightPositions[8];
vec4 lightPos[] = lightPositions;const int numSurfaces = 5;
surface myFiveSurfaces[numSurfaces];float[5] values;

指定顯示大小的數(shù)組可以作為函數(shù)的參數(shù)或者使返回值,也可以作為結(jié)構(gòu)體的成員.數(shù)組類型內(nèi)建了一個length()函數(shù)扒秸,可以返回數(shù)組的長度播演。

vec4 myColor, ambient, diffuse[6], specular[6];

myColor = ambient + diffuse[4] + specular[4];

3.5 修飾符

修飾符 描述
const 常量值必須在聲明是初始化。它是只讀的不可修改的伴奥。
attribute 表示只讀的頂點(diǎn)數(shù)據(jù)写烤,只用在頂點(diǎn)著色器中。數(shù)據(jù)來自當(dāng)前的頂點(diǎn)狀態(tài)或者頂點(diǎn)數(shù)組拾徙。它必須是全局范圍聲明的洲炊,不能再函數(shù)內(nèi)部。一個attribute可以是浮點(diǎn)數(shù)類型的標(biāo)量,向量选浑,或者矩陣蓝厌。不可以是數(shù)組或則結(jié)構(gòu)體
uniform 一致變量。在著色器執(zhí)行期間一致變量的值是不變的古徒。與const常量不同的是拓提,這個值在編譯時期是未知的是由著色器外部初始化的。一致變量在頂點(diǎn)著色器和片段著色器之間是共享的隧膘。它也只能在全局范圍進(jìn)行聲明代态。
varying 頂點(diǎn)著色器的輸出。例如顏色或者紋理坐標(biāo)疹吃,(插值后的數(shù)據(jù))作為片段著色器的只讀輸入數(shù)據(jù)蹦疑。必須是全局范圍聲明的全局變量∪唬可以是浮點(diǎn)數(shù)類型的標(biāo)量歉摧,向量,矩陣腔呜。不能是數(shù)組或者結(jié)構(gòu)體叁温。
centorid varying 在沒有多重采樣的情況下,與varying是一樣的意思核畴。在多重采樣時膝但,centorid varying在光柵化的圖形內(nèi)部進(jìn)行求值而不是在片段中心的固定位置求值。
invariant (不變量)用于表示頂點(diǎn)著色器的輸出和任何匹配片段著色器的輸入谤草,在不同的著色器中計算產(chǎn)生的值必須是一致的跟束。所有的數(shù)據(jù)流和控制流,寫入invariant變量的是一致的丑孩。編譯器為了保證結(jié)果是完全一致的冀宴,需要放棄那些可能會導(dǎo)致不一致值的潛在的優(yōu)化。除非必要温学,不要使用這個修飾符花鹅。在多通道渲染中避免z-fighting可能會使用到。
in 用在函數(shù)的參數(shù)中枫浙,表示這個參數(shù)是輸入的,在函數(shù)中改變這個值古拴,并不會影響對調(diào)用的函數(shù)產(chǎn)生副作用箩帚。(相當(dāng)于C語言的傳值),這個是函數(shù)參數(shù)默認(rèn)的修飾符
out 用在函數(shù)的參數(shù)中黄痪,表示該參數(shù)是輸出參數(shù)紧帕,值是會改變的。
inout 用在函數(shù)的參數(shù),表示這個參數(shù)即是輸入?yún)?shù)也是輸出參數(shù)是嗜。

3.6 內(nèi)置變量

內(nèi)置變量可以與固定函數(shù)功能進(jìn)行交互愈案。在使用前不需要聲明。頂點(diǎn)著色器可用的內(nèi)置變量如下表:

名稱 類型 描述
gl_Color vec4 輸入屬性-表示頂點(diǎn)的主顏色
gl_SecondaryColor vec4 輸入屬性-表示頂點(diǎn)的輔助顏色
gl_Normal vec3 輸入屬性-表示頂點(diǎn)的法線值
gl_Vertex vec4 輸入屬性-表示物體空間的頂點(diǎn)位置
gl_MultiTexCoordn vec4 輸入屬性-表示頂點(diǎn)的第n個紋理的坐標(biāo)
gl_FogCoord float 輸入屬性-表示頂點(diǎn)的霧坐標(biāo)
gl_Position vec4 輸出屬性-變換后的頂點(diǎn)的位置鹅搪,用于后面的固定的裁剪等操作站绪。所有的頂點(diǎn)著色器都必須寫這個值。
gl_ClipVertex vec4 輸出坐標(biāo)丽柿,用于用戶裁剪平面的裁剪
gl_PointSize float 點(diǎn)的大小
gl_FrontColor vec4 正面的主顏色的varying輸出
gl_BackColor vec4 背面主顏色的varying輸出
gl_FrontSecondaryColor vec4 正面的輔助顏色的varying輸出
gl_BackSecondaryColor vec4 背面的輔助顏色的varying輸出
gl_TexCoord [] vec4 紋理坐標(biāo)的數(shù)組varying輸出
gl_FogFragCoord float 霧坐標(biāo)的varying輸出

片段著色器 的內(nèi)置變量如下表:

名稱 類型 描述
gl_Color vec4 包含主顏色的插值只讀輸入
gl_SecondaryColor vec4 包含輔助顏色的插值只讀輸入
gl_TexCoord[] vec4 包含紋理坐標(biāo)數(shù)組的插值只讀輸入
gl_FogFragCoord float 包含霧坐標(biāo)的插值只讀輸入
gl_FragCoord vec4 只讀輸入恢准,窗口的x,y,z和1/w
gl_FrontFacing bool 只讀輸入,如果是窗口正面圖元的一部分甫题,則這個值為true
gl_PointCoord vec2 點(diǎn)精靈的二維空間坐標(biāo)范圍在(0.0, 0.0)到(1.0, 1.0)之間馁筐,僅用于點(diǎn)圖元和點(diǎn)精靈開啟的情況下。
gl_FragData[] vec4 使用glDrawBuffers輸出的數(shù)據(jù)數(shù)組坠非。不能與gl_FragColor結(jié)合使用敏沉。
gl_FragColor vec4 輸出的顏色用于隨后的像素操作
gl_FragDepth float 輸出的深度用于隨后的像素操作,如果這個值沒有被寫炎码,則使用固定功能管線的深度值代替

3.7 構(gòu)造函數(shù)

構(gòu)造函數(shù)可以用于初始化包含多個成員的變量盟迟,包括數(shù)組和結(jié)構(gòu)體。構(gòu)造函數(shù)也可以用在表達(dá)式中辅肾。調(diào)用方式如下:

vec3 myNormal = vec3(1.0, 1.0, 1.0);
greenTint = myColor + vec3(0.0, 1.0, 0.0);
ivec4 myColor = ivec4(255);

還可以使用混合標(biāo)量和向量的方式來構(gòu)造队萤,只要你的元素足以填滿該向量。

vec4 color = vec4(1.0, vec2(0.0, 1.0), 1.0);
vec3 v = vec3(1.0, 10.0, 1.0);
vec3 v1 = vec3(v);
vec2 fv = vec2(5.0, 6.0);

對于矩陣矫钓,OpenGL中矩陣是列主順序的要尔。如果只傳了一個值,則會構(gòu)造成對角矩陣新娜,其余的元素為0.

mat3 m3 = mat3(1.0);

構(gòu)造出來的矩陣式:

1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

mat2 matrix1 = mat2(1.0, 0.0, 0.0, 1.0);

mat2 matrix2 = mat2(vec2(1.0, 0.0), vec2(0.0, 1.0));

mat2 matrix3 = mat2(1.0); 

mat2 matrix4 = mat2(mat4(2.0)); //會取 4x4矩陣左上角的2x2矩陣赵辕。

構(gòu)造函數(shù)可以用于標(biāo)量數(shù)據(jù)類型的轉(zhuǎn)換。GLSL不支持隱式或顯示的轉(zhuǎn)換概龄,只能通過構(gòu)造函數(shù)來轉(zhuǎn)还惠。其中int轉(zhuǎn)為float值是一樣的。float轉(zhuǎn)為int則小數(shù)部分被丟棄私杜。int或float轉(zhuǎn)為bool蚕键,0和0.0轉(zhuǎn)為false,其余的值轉(zhuǎn)為true. bool轉(zhuǎn)為int或float衰粹,false值轉(zhuǎn)為0和0.0锣光,true轉(zhuǎn)為1和1.0.

float f = 1.7;

int I = int(f); // I = 1

數(shù)組的初始化,可以在構(gòu)造函數(shù)中傳入值來初始化數(shù)組中對應(yīng)的每一個值铝耻。

ivec2 position[3] = ivec2[3]((0,0), (1,1), (2,2));

ivec2 pos2[3] = ivec2[]((3,3), (2,1), (3,1));

構(gòu)造函數(shù)也可以對結(jié)構(gòu)體進(jìn)行初始化誊爹。其中順序和類型要一一對應(yīng)。

struct surface {  
  int  index;
  vec3 color;  
  float rotate;
};

surface mySurface = surface(3, vec3(red, green, blue), 0.5);

3.8 控制流

GLSL中的流程控制與 java 中基本相同,主要有:

  1. if(){}频丘、if(){}else{}办成、if(){}else if(){}else{}
  2. while(){}和do{}while()
  3. for(;;){}
  4. break和continue

3.9 函數(shù)

在每個shader中必須有一個main函數(shù)。main函數(shù)中的void參數(shù)是可選的搂漠,但返回值是void時必須的迂卢。

GLSL中的函數(shù),必須是在全局范圍定義和聲明的状答。不能在函數(shù)定義中聲明或定義函數(shù)冷守。函數(shù)必須有返回類型,參數(shù)是可選的惊科。參數(shù)的修飾符(in, out, inout, const等)是可選的

void main(void)
{
 ...
}

3.9.1 常見函數(shù)

  1. radians(x):角度轉(zhuǎn)弧度
  2. degrees(x):弧度轉(zhuǎn)角度
  3. sin(x):正弦函數(shù)拍摇,傳入值為弧度。相同的還有cos余弦函數(shù)馆截、tan正切函數(shù)充活、asin反正弦、acos反余弦蜡娶、atan反正切
  4. pow(x,y):xyxy
  5. exp(x):exex
  6. exp2(x):2x2x
  7. log(x):logexlogex
  8. log2(x):log2xlog2x
  9. sqrt(x):x??√x
  10. inversesqr(x):1x??√1x
  11. abs(x):取x的絕對值
  12. sign(x):x>0返回1.0混卵,x<0返回-1.0,否則返回0.0
  13. ceil(x):返回大于或者等于x的整數(shù)
  14. floor(x):返回小于或者等于x的整數(shù)
  15. fract(x):返回x-floor(x)的值
  16. mod(x,y):取模(求余)
  17. min(x,y):獲取xy中小的那個
  18. max(x,y):獲取xy中大的那個
  19. mix(x,y,a):返回x?(1?a)+y?ax?(1?a)+y?a
  20. step(x,a):x< a返回0.0窖张,否則返回1.0
  21. smoothstep(x,y,a):a < x返回0.0幕随,a>y返回1.0,否則返回0.0-1.0之間平滑的Hermite插值宿接。
  22. dFdx(p):p在x方向上的偏導(dǎo)數(shù)
  23. dFdy(p):p在y方向上的偏導(dǎo)數(shù)
  24. fwidth(p):p在x和y方向上的偏導(dǎo)數(shù)的絕對值之和

3.9.2 幾何函數(shù)

  1. length(x):計算向量x的長度
  2. distance(x,y):返回向量xy之間的距離
  3. dot(x,y):返回向量xy的點(diǎn)積
  4. cross(x,y):返回向量xy的差積
  5. normalize(x):返回與x向量方向相同赘淮,長度為1的向量

3.9.3 矩陣函數(shù)

  1. matrixCompMult(x,y):將矩陣相乘
  2. lessThan(x,y):返回向量xy的各個分量執(zhí)行x< y的結(jié)果,類似的有g(shù)reaterThan,equal,notEqual
  3. lessThanEqual(x,y):返回向量xy的各個分量執(zhí)行x<= y的結(jié)果睦霎,類似的有類似的有g(shù)reaterThanEqual
  4. any(bvec x):x有一個元素為true梢卸,則為true
  5. all(bvec x):x所有元素為true,則返回true副女,否則返回false
  6. not(bvec x):x所有分量執(zhí)行邏輯非運(yùn)算

3.9.4 紋理采樣函數(shù)

紋理采樣函數(shù)有texture2D蛤高、texture2DProj、texture2DLod碑幅、texture2DProjLod戴陡、textureCube、textureCubeLod及texture3D沟涨、texture3DProj猜欺、texture3DLod、texture3DProjLod等拷窜。

  1. texture表示紋理采樣,2D表示對2D紋理采樣,3D表示對3D紋理采樣
  2. Lod后綴篮昧,只適用于頂點(diǎn)著色器采樣
  3. Proj表示紋理坐標(biāo)st會除以q

后記

該篇文章知識點(diǎn) 多為文章頭部參考文章原文赋荆,這里比較多的是 記錄和歸納。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懊昨,一起剝皮案震驚了整個濱河市窄潭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酵颁,老刑警劉巖嫉你,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躏惋,居然都是意外死亡幽污,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門簿姨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來距误,“玉大人,你說我怎么就攤上這事扁位∽继叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵域仇,是天一觀的道長刑然。 經(jīng)常有香客問我,道長暇务,這世上最難降的妖魔是什么泼掠? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮般卑,結(jié)果婚禮上武鲁,老公的妹妹穿的比我還像新娘。我一直安慰自己蝠检,他們只是感情好沐鼠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叹谁,像睡著了一般饲梭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焰檩,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天憔涉,我揣著相機(jī)與錄音,去河邊找鬼析苫。 笑死兜叨,一個胖子當(dāng)著我的面吹牛穿扳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播国旷,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼矛物,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了跪但?” 一聲冷哼從身側(cè)響起履羞,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屡久,沒想到半個月后忆首,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡被环,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年糙及,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛤售。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丁鹉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悴能,到底是詐尸還是另有隱情揣钦,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布漠酿,位于F島的核電站冯凹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炒嘲。R本人自食惡果不足惜宇姚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夫凸。 院中可真熱鬧浑劳,春花似錦、人聲如沸夭拌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸽扁。三九已至蒜绽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桶现,已是汗流浹背躲雅。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骡和,地道東北人相赁。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓相寇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親噪生。 傳聞我的和親對象是個殘疾皇子裆赵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 在OpenGL ES中著色器分為頂點(diǎn)著色器和片元著色器。頂點(diǎn)著色器是針對每個頂點(diǎn)執(zhí)行一次跺嗽,用于確定頂點(diǎn)的位置。片元...
    大臉萌家的大眼萌閱讀 3,035評論 0 3
  • 概述: 以c為基礎(chǔ): OpenGL著色語言是基于ANSI C編程語言的語法页藻,使用這種語言編寫的程序與C程...
    一川煙草i蓑衣閱讀 2,223評論 0 1
  • 一:著色的原理 OpenGL著色語言(OpenGL Shading Language)是用來在OpenGL中著色編...
    wo不懂閱讀 997評論 0 2
  • 圖元處理(Primitive Processing) 如何在場景中使用曲面細(xì)分來添加幾何細(xì)節(jié) 如何使用幾何著色器處...
    RichardJieChen閱讀 6,891評論 2 4
  • 關(guān)于著色器 著色器是用來實現(xiàn)圖像渲染的桨嫁,用來替代固定渲染管線的可編程程序。著色器替代了傳統(tǒng)的固定渲染管線份帐,可以實現(xiàn)...
    Oneminute閱讀 1,837評論 1 2