Android開發(fā)之OpenGLSL語言(二)

GLSL語言

(一)名詞解釋:

1璧亚、圖元:圖形軟件用來描述各種圖形的函數(shù)。
2帆吻、OpenGL渲染管線
渲染流水線:是顯卡芯片內(nèi)部處理圖形信號相互獨立的并行處理單元展运。簡單理解就是把數(shù)據(jù)轉(zhuǎn)化到OpenGL并且生成最終圖像的一個過程!
3铅忿、GLSL是什么剪决?
GLSL是一門專門為圖形開發(fā)設(shè)計的編程語言。
4檀训、可編程管線的編程階段


這里寫圖片描述

頂點處理階段:由頂點著色器柑潦、細(xì)分著色器和幾何著色器組成。主要功能是決定了圖元的位置峻凫。
頂點著色器:當(dāng)緩存數(shù)據(jù)初始化完成之后渗鬼,頂點著色開始接受頂點數(shù)據(jù),并單獨處理每個頂點荧琼,頂點處理完之后譬胎,開始激活細(xì)分著色器。
細(xì)分著色器:分為細(xì)分控制著色器和細(xì)分計算著色器命锄。用來描述物體的形狀堰乔,在管線中生成新的幾何體,并把這個幾何體處理的更加平順脐恩,然后就會成為最終狀態(tài)镐侯。
幾何著色器:細(xì)分著色器將最終的模型傳給了幾何著色器,其實在管線內(nèi)部會對這些圖元都進(jìn)行修改驶冒,因為有的合適有的不合適苟翻,所以到了幾何著色器就開始對所有的圖像進(jìn)行修改搭伤,改變幾何圖元的類型或者放棄掉沒有用的圖元。
片元處理階段:由片元裁剪袜瞬、光柵化和片元著色器組成怜俐。主要決定了片元的存在以及片元的顏色。
圖元裁剪:剪切掉光柵化之前我們看不到(視口以外)的圖元邓尤。
光柵化:將輸入圖元的數(shù)學(xué)描述轉(zhuǎn)換為與屏幕位置對應(yīng)的像素片元的過程拍鲤。
片元著色器:主要處理光柵化之后的單獨片元,主要計算了片元的顏色和深度值汞扎,然后開始傳遞到片元測試和混合模塊季稳。這里像光照,霧化處理都在這一步澈魄。

(二)GLSL變量

(1)GLSL支持的基本數(shù)據(jù)類型:
float景鼠、int、bool痹扇、uint/double铛漓。
(2)標(biāo)量:只有大小沒有方向
(3)變量命名規(guī)范:

  1. 數(shù)字和“_”不能作為開頭
  2. 變量名不能包含連續(xù)的下劃線
  3. 用戶變量不能用“gl”開頭
  4. 見名識意
    (4)變量的初始化:
    float f=1.0;
    bool b=true鲫构;
    int I=15浓恶;
    (5)類型轉(zhuǎn)換(win):
    float f=1.0;
    bool b=bool(f)
    (6)聚合類型——向量
    向量 :有方向的量
    向量在著色器中的作用:位置结笨,顏色包晰,紋理
    基本類型


    這里寫圖片描述

    向量初始化:
    1、聲明變量的初始化
    vec3 xyz=vec3(1.0炕吸,1.0伐憾,1.0);
    float x= xyz.x;
    vec3 rgb=vec3(1.0,1.0赫模,1.0);
    float r=rgb.r;
    float g=rgb.g;
    當(dāng)三個值相等的時候
    vec3 rgb=vec3(1.0 );等價于vec3 rgb=vec3(1.0树肃,1.0,1.0);
    2嘴瓤、類型之間等價交換
    vec3 xyz1=vec3(1.0扫外,1.0,1.0);
    vec3 xyz2=vec3(xyz1);
    3廓脆、截短
    vec3 xyz1=vec3(1.0,1.0磁玉,1.0);
    vec2 xy=vec2(xyz1);
    4停忿、加長
    vec2 xy=vec2(xyz1);
    vec3 xyz1=vec3(xy ,1.0);
    (7)矩陣
    矩陣在3D開發(fā)中的作用:位移蚊伞,旋轉(zhuǎn)席赂,縮放
    .矩陣類型


    這里寫圖片描述

    矩陣初始化
    只傳一個值:m=mat3(4.0);
    這里寫圖片描述

    以下三種寫法得到效果是一樣的:
    mat3 m=( 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0);
    ////
    vec3 f1=vec3(1.0,2.0,3.0);
    vec3 f2=vec3(4.0,5.0,6.0);
    vec3 f3=vec3(7.0,8.0,9.0);
    mat3 m=mat3( f1,f2,f3 );
    ////
    vec2 f1=vec2(1.0,2.0);
    vec2 f2=vec2(4.0,5.0);

    vec2 f3=vec2(7.0,8.0);
    mat3 m=mat3(f1,3.0,f2,6.0,f3 ,9.0
    GLSL首先填充列 然后填充行:


    這里寫圖片描述

(8)向量和矩陣內(nèi)的元素訪問
1吮铭、什么是分量?
聚合類型的元素
例如:vec3 xyz = vec3(1.0,1.0,1.0);
xyz.x:分量颅停,也是聚合類型的元素
2谓晌、分量名稱三種形式的集合

這里寫圖片描述

3、向量與矩陣中的元素訪問方式癞揉?
向量:使用分量的名稱
矩陣:可以以二維數(shù)組的方式進(jìn)行訪問
4纸肉、向量內(nèi)元素訪問(詳解)
例如:vect3 rgb = vec3(1.0,1.0,1.0);
float r = rgb.r;
float g = rgb.g;
數(shù)組方式獲取:
float r1 = rgb[0];
5喊熟、矩陣內(nèi)元素的訪問(詳解)
例如:mat4 m = mat4(2.0);
這里寫圖片描述

獲取矩陣的第二列:vect4 xyzw = m[2];
獲取具體的標(biāo)量:float f = m[2][2];//也可以這樣寫:m[2].z;
6柏肪、齊次坐標(biāo):就是將n維的向量用一個n+1維來表示。
(4,2,1)和(8,4,2)都表示的二維點(4,2)芥牌。
(9)結(jié)構(gòu)體和采樣器
什么是采樣器烦味?
專門來進(jìn)行紋理采樣的。
一般情況下一個采樣器代表了一套或者一副紋理壁拉。
這里寫圖片描述

注意:1谬俄、采樣器的變量不能在著色器中初始化。
一般情況下采樣器的變量都是用uniform這個限定符來修飾的弃理,從宿主語言(java)接收傳遞進(jìn)來的著色器的值凤瘦。
3、sampler3D并不是在所有的OpenGLES實現(xiàn)中都是支持的案铺,如果非要用蔬芥,在著色器代碼中打開相應(yīng)的拓展。
1控汉、結(jié)構(gòu)體:
就是從邏輯上將不同類型的數(shù)據(jù)組合到一個數(shù)據(jù)集合中笔诵。
結(jié)構(gòu)體的作用
簡化運算。
定義一個結(jié)構(gòu)體
struct info{ vec3 color;//顏色 vec3 xyz; //位置 vec3 st; //紋理 }
4姑子、怎么調(diào)用結(jié)構(gòu)體元素作為輸入?yún)?shù)
info cxs = info(vec3(1.0,2.0,3.0),vec3(4.0,5.0,6.0),vec3(7.0,8.0,9.0));
vec3 color = info.color;
(10)數(shù)組
1乎婿、數(shù)組:有限個類型相同的變量集合;
2街佑、GLSL數(shù)組特性以及注意事項
GLSL支持任意類型的數(shù)組谢翎,包括結(jié)構(gòu)體數(shù)組。
索引從零開始
沒有負(fù)數(shù)索引
數(shù)組可以定義為有大小或者沒有大小
數(shù)組數(shù)GLSL第一等類型
GLSL里面數(shù)組有構(gòu)造函數(shù)沐旨,并且用函數(shù)的參數(shù)作為返回類型森逮。
可以靜態(tài)初始化一個數(shù)組
float c[3] = float3;
GLSL有一個隱式的方法,可以返回元素個數(shù)(length)磁携。
int t = c.length;
多維數(shù)組:float c[3][5];

(11)類型修飾符
1褒侧、類型修飾符作用


這里寫圖片描述

這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闷供,更是在濱河造成了極大的恐慌烟央,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歪脏,死亡現(xiàn)場離奇詭異疑俭,居然都是意外死亡,警方通過查閱死者的電腦和手機婿失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門钞艇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人移怯,你說我怎么就攤上這事香璃。” “怎么了舟误?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵葡秒,是天一觀的道長。 經(jīng)常有香客問我嵌溢,道長眯牧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任赖草,我火速辦了婚禮学少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秧骑。我一直安慰自己版确,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布乎折。 她就那樣靜靜地躺著绒疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骂澄。 梳的紋絲不亂的頭發(fā)上吓蘑,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音坟冲,去河邊找鬼磨镶。 笑死,一個胖子當(dāng)著我的面吹牛健提,可吹牛的內(nèi)容都是我干的琳猫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矩桂,長吁一口氣:“原來是場噩夢啊……” “哼沸移!你這毒婦竟也來了痪伦?” 一聲冷哼從身側(cè)響起侄榴,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤雹锣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后癞蚕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕊爵,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年桦山,在試婚紗的時候發(fā)現(xiàn)自己被綠了攒射。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡恒水,死狀恐怖会放,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钉凌,我是刑警寧澤咧最,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站御雕,受9級特大地震影響矢沿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酸纲,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一捣鲸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闽坡,春花似錦栽惶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宪迟,卻和暖如春酣衷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背次泽。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工穿仪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人意荤。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓啊片,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玖像。 傳聞我的和親對象是個殘疾皇子紫谷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

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