OpenGL ES基礎(一)

著色器語言
(一)名詞解釋:
1.圖元:
圖形軟件用來描述各種圖形的函數
簡單版:圖元就是組成圖像的基本單元
2.OpenGL渲染管線(重點)
渲染流水線:是顯卡芯片內部處理圖形信號相互獨立的并行處理單元芙扎。
簡單版:也就是把數據轉化到openGL并且生成最終圖像的一個過程唆阿!
3,GLSL是什么:
GLSL是一門專門為圖形開發(fā)設計的編程語言

,4盐类,可編程管線的編程階段(重點)(流水線都干了啥呢挤茄?烘挫?)

5.分析簡單的頂點著色器
案例:

version 330 core //版本號

in vec4 vPosition;//in數據入口 恳邀,vec4 (x,y颂砸,z噪奄,w)向量(w叫做齊次坐標) vPosition變量名//頂點
//矩陣 來做矩陣變換
unifrom mat4 modelViewProjectionMAtrix ;

void main(){
//內置變量
glPosition = modelViewProjectionMAtrix * vPosition;
}
基本語法
注釋:// /.../
main沒有返回值
每一行的結尾都要有分號

(二)GLSL變量認識:(不要思考C/C++和java)
1.GLSL支持的基本數據類型:
類型 描述
float IEEE 32浮點值
int 32位整數
bool 布爾值
uint double

2.什么是標量:只有大小沒有方向

3.變量命名規(guī)范:
1.數字和“_”不能作為開頭
2.變量名不能包含連續(xù)的下劃線
3.用戶變量不能用“gl”開頭
4.見名識意
4.變量的初始化:
float f=1.0;
bool b=true人乓;
int i=15勤篮;
5.類型轉換(win):
float f=1.0;
bool b=bool(f)
(三)聚合類型——向量

1.什么是向量 :有方向的量
2.向量在著色器中的作用
位置色罚,顏色碰缔,紋理
3.基本類型
基本類型(標量) 2d向量 3D向量 4D向量
float vec2 vec3 vec4
int ivec2 ivec3 ivec4
bool bvec2 bvec3 bvec4
1.向量初始化
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;

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);

(四)聚合類型——矩陣
1.矩陣在3D開發(fā)中的作用
位移什黑,旋轉,縮放
2.矩陣類型

double dmat2 dmat3 dmat4
float mat2 mat3 mat4
22的浮點數矩陣 33的浮點數矩陣 4*4的浮點數矩陣
1.0,1.0
1.0,1.0 1.0,1.0,1.0
1.0,1.0,1.0
1.0,1.0,1.0 1.0,1.0,1.0,1.0
1.0,1.0,1.0,1.0
1.0,1.0,1.0,1.0
1.0,1.0,1.0,1.0

3.矩陣初始化
4.0 0 0
0 4.0 0
0 0 4.0
構建方式:
只傳一個值
m=mat3(4.0);

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

1.0 4.0 7.0
2.0 5.0 8.0
3.0 6.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首先填充列 然后填充行:

(五)向量和矩陣內的元素訪問
1,什么是分量
聚合類型 的元素
例如 vec3 xyz=vec3(1.0,1.0,1.0)堪夭;
xyz.x
2,分量名稱三種形式的集合
分量訪問符
(x,y,z,w) 位置坐標
(r,g,b,a) 顏色
(s,t,p,q) 紋理坐標

3,向量與矩陣中的元素訪問方式愕把?
1向量:使用分量的名稱
2矩陣:可以以二維數組的方式進行訪問(索引)
4,向量內元素訪問(詳解)
例如:vec3 rgb=vec3(1.0,1.0森爽,1.0);
float r=rgb.r;
float g=rgb.g;
數組方式獲取
float r1=rgb[0];

5,矩陣內元素的訪問
2.0 0 0 0
0 2.0 0 0
0 0 2.0 0
0 0 0 2.0
例如:mat4 m=mat4(2.0);

我要獲取矩陣的第二列
vec4 xyzw = m[1];
獲取具體的標量
float f=m[2][2];
//也可以這樣寫 m[2].z;

齊次坐標:就是將n維的向量用一個n+1維來表示恨豁!
定義:所謂齊次坐標就是將一個原本是n維的<u>向量</u>用一個n+1維向量來表示。

例如爬迟,二維點(x,y)的齊次坐標表示為(hx,hy,h)橘蜜。由此可以看出,一個向量的齊次表示是不唯一的付呕,齊次坐標的h取不同的值都表示的是同一個點计福,比如齊次坐標(6,4,2)、(3,2,1)表示的都是二維點(3,2)徽职。

給出點的齊次表達式[X Y H]象颖,就可求得其二維笛卡爾坐標,

即:[X Y H]→= [x y 1]姆钉, 這個過程稱為正乘刀化處理。

在幾何意義上育韩,相當于把發(fā)生在三維空間的變換限制在H=1的平面內克蚂。

那么引進齊次坐標有什么必要,它有什么優(yōu)點呢筋讨?

許多圖形應用涉及到幾何變換埃叭,主要包括平移、旋轉悉罕、縮放赤屋。以矩陣表達式來計算這些變換時立镶,平移是矩陣相加,旋轉和縮放則是矩陣相乘类早,綜合起來可以表示為p' = p m1+ m2(m1旋轉縮放矩陣媚媒, m2為平移矩陣, p為原向量 涩僻,p'為變換后的向量)缭召。引入齊次坐標的目的主要是合并矩陣運算中的乘法和加法,表示為p' = pM的形式逆日。即它提供了用矩陣運算把二維嵌巷、三維甚至高維空間中的一個點集從一個坐標系變換到另一個坐標系的有效方法。

其次室抽,它可以表示無窮遠的點搪哪。n+1維的齊次坐標中如果h=0,實際上就表示了n維空間的一個無窮遠點坪圾。對于齊次坐標(a,b,h)晓折,保持a,b不變,|V|=(x1x1兽泄,y1y1,z1*z1)^1/2的過程就表示了標準坐標系中的一個點沿直線ax+by=0 逐漸走向無窮遠處的過程漓概。

(六)結構體和采樣器
1.什么是采樣器
專門來進行紋理采樣的;
一般情況下 一個采樣器代表了一套或者一副紋理
采樣器類型 說明
sampler2D 用來訪問2維紋理的
sampler3D 用來訪問3維紋理的
samplerCube 立體貼圖的紋理
注意:1.采樣器的變量不能在 著色器中初始化
2.一般情況下 采樣器的變量都是用 uniform 限定符來修飾的已日,從宿主語言(java)接收傳遞遞進來的著色器的值垛耳;
3.sampler3D并不是在所有的OpenGLES實現中都是支持的,(如果非要用飘千,在著色器代碼中代開相應的拓展)
1,什么是結構體
簡單版:就是從邏輯上將 不同類型的數據組合到一個數據集合中堂鲜。
2,結構體的作用
簡化運算
3,怎么定義一個結構體
struct info{
vec3 color;//顏色
vec3 xyz; //位置
vec2 st; //紋理
}
4,怎么調用結構體元素做為輸入參數
info ttt=info ( vec3(,护奈,)缔莲,vec3(,霉旗,)痴奏,vec2(,))厌秒;
vec3 color=ttt.color;

(七)數組
1,什么是數組
有限個類型相同的變量集合读拆;
2,GLSL數組特性以及注意事項
1.GLSL支持任意類型的數組,包括結構體數組
2.索引從零開始
3.沒有負數索引鸵闪,索引也不能超出范圍
4.數組可以定義為有大小檐晕,或者沒有大小
float c[3];//有三個float元素
float [3]c;
float c[ ];//未定義位數,稍后可以聲明
5.數組數GLSL第一等類型
1辟灰,GLSL里面數組有構造函數个榕,并且用函數的參數做返回類型。
2芥喇,可以靜態(tài)初始化一個數組
float c[3]=float[3](1.0,1.0,1.0);
6.GLSL有個隱式的方法 可以返回元素個數(length)
float c[3]=float[3](1.0,1.0,1.0);
int t=c.length西采;
7.多維數組
float c[3][5];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市继控,隨后出現的幾起案子械馆,更是在濱河造成了極大的恐慌,老刑警劉巖武通,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狱杰,死亡現場離奇詭異,居然都是意外死亡厅须,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門食棕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朗和,“玉大人,你說我怎么就攤上這事簿晓】衾” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵憔儿,是天一觀的道長忆植。 經常有香客問我,道長谒臼,這世上最難降的妖魔是什么朝刊? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蜈缤,結果婚禮上拾氓,老公的妹妹穿的比我還像新娘。我一直安慰自己底哥,他們只是感情好咙鞍,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趾徽,像睡著了一般续滋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上孵奶,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天疲酌,我揣著相機與錄音,去河邊找鬼拒课。 笑死徐勃,一個胖子當著我的面吹牛事示,可吹牛的內容都是我干的。 我是一名探鬼主播僻肖,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肖爵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臀脏?” 一聲冷哼從身側響起劝堪,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揉稚,沒想到半個月后秒啦,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡搀玖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年余境,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌诅。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芳来,死狀恐怖,靈堂內的尸體忽然破棺而出猜拾,到底是詐尸還是另有隱情即舌,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布挎袜,位于F島的核電站顽聂,受9級特大地震影響,放射性物質發(fā)生泄漏盯仪。R本人自食惡果不足惜紊搪,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望全景。 院中可真熱鬧嗦明,春花似錦、人聲如沸蚪燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馆纳。三九已至诗良,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲁驶,已是汗流浹背鉴裹。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人径荔。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓督禽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親总处。 傳聞我的和親對象是個殘疾皇子狈惫,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容