OpenGL ES _ 著色器_紋理圖像

OpenGL ES _ 入門_01
OpenGL ES _ 入門_02
OpenGL ES _ 入門_03
OpenGL ES _ 入門_04
OpenGL ES _ 入門_05
OpenGL ES _ 入門練習_01
OpenGL ES _ 入門練習_02
OpenGL ES _ 入門練習_03
OpenGL ES _ 入門練習_04
OpenGL ES _ 入門練習_05
OpenGL ES _ 入門練習_06
OpenGL ES _ 著色器 _ 介紹
OpenGL ES _ 著色器 _ 程序
OpenGL ES _ 著色器 _ 語法
OpenGL ES_著色器_紋理圖像
OpenGL ES_著色器_預處理
OpenGL ES_著色器_頂點著色器詳解
OpenGL ES_著色器_片斷著色器詳解
OpenGL ES_著色器_實戰(zhàn)01
OpenGL ES_著色器_實戰(zhàn)02
OpenGL ES_著色器_實戰(zhàn)03

學習是一件開心的額事情

學習目標

  • 理解紋理圖像的概念
  • 掌握紋理采樣器的類型和作用
  • 在GLSL 中如何使用紋理
  • 紋理緩沖區(qū)

紋理圖像

玩過游戲的同學們,都知道在游戲人物身上穿的那個叫皮膚,專業(yè)點將那個就叫做紋理圖像抄谐。GLSL 支持在頂點和片段著色器使用紋理圖像。

紋理采樣器的類型和作用

下面的這個表解釋了每種采樣器的作用扰法,不需要記憶蛹含,使用時,進行查閱即可!

采樣器名稱 描述
sampler1D 訪問1D 紋理圖像
isampler1D 訪問1D 紋理圖像
usampler1D 訪問1D 紋理圖像
sampler2D 訪問2D 紋理圖像
isampler2D 訪問2D 紋理圖像
usampler2D 訪問2D 紋理圖像
sampler3D 訪問3D 紋理圖像
isampler3D 訪問3D 紋理圖像
usampler3D 訪問3D 紋理圖像
samplerCube 訪問立體紋理圖像
isamplerCube 訪問立體紋理圖像
sampler1DArray 訪問1D 紋理圖像數(shù)組
isampler1DArray 訪問1D 紋理圖像像數(shù)組
usampler1DArray 訪問1D 紋理圖像像數(shù)組
sampler2DArray 訪問2D 紋理圖像數(shù)組
isampler2DArray 訪問2D 紋理圖像像數(shù)組
usampler2DArray 訪問2D 紋理圖像像數(shù)組
sampler2DRect 訪問2D 紋理矩形
isampler2DRect 訪問2D 紋理矩形
usampler2DRect 訪問2D 紋理矩形
sampler1DShadow 訪問1D 陰影紋理
isampler1DShadow 訪問1D 陰影紋理
usampler1DShadow 訪問1D 陰影紋理
samplerCubeShadow 訪問立體紋理
samler1DArrayShadow 訪問1D陰影紋理的一個數(shù)組
samler2DArrayShadow 訪問2D陰影紋理的一個數(shù)組
samler2DRectShadow 訪問2D陰影紋理矩陣
samplerBuffer 訪問紋理緩沖區(qū)
isamplerBuffer 訪問紋理緩沖區(qū)
usamplerBuffer 訪問紋理緩沖區(qū)

如何使用

第一步.采樣器必須在著色器中聲明為uniform塞颁,切記他們的賦值必須來自應用程序中浦箱,采樣器也可以作為函數(shù)的參數(shù),但必須是類型匹配的采樣器
第二步.采樣器在著色器中使用之前必須分配一個紋理單元祠锣,并且只能通過glUniformli()酷窥、glUniformliv() 進行初始化(把采樣器應該使用的紋理單元的索引作為參數(shù))

Glint texsampler;
texSampler = glGetUniformLocation(program,"tex ");
glUniformli(texSampler,2);

第三步 .在著色器內(nèi)部對一副問題圖片進行采樣時,需要使用已經(jīng)聲明且與一個紋理單元相關(guān)聯(lián)的采樣器變量伴网。舉個例子: 我們對一個與Sampler 2D 變量tex 相關(guān)聯(lián)的二維紋理圖像進行采樣蓬推,并把采樣結(jié)果和片段顏色進行組合,提供與在紋理環(huán)境下使用GL_MODULATE 模式相同的結(jié)果:

uniform sampler2D tex;
void main(){
    gl_fragColor = gl_color *texture2D(tex,gl_texCoord[0].st)
}
  • 依賴性紋理讀取
    先解釋一下,在一個使用紋理貼圖的著色器執(zhí)行過程中澡腾,需要使用紋理坐標在紋理圖像中指定位置沸伏,并提取相應的紋理單元的值。
    我們看看代碼怎么寫:
uniform sampler1D coords;
uniform sampler3D volume;
void main()
{
 vec3 texCoords = texture1D(coords,gl_TexCoord[0].s);
 vec3 volumeColor = texture3D(volume,texCoords);
}

紋理緩沖區(qū)

有個問題先說一下:盡管GLSL 使得數(shù)組可用动分,不管是在著色器中使用靜態(tài)初始值毅糟,還是作為值得集合呈現(xiàn)為uniform變量中的一個數(shù)組,在這兩個情況下长赞,都有可能出現(xiàn)超出可用大小限制的數(shù)組.我們可能把這樣一個值得表存儲在一個紋理圖像中弦讽,然后撩轰,在紋理中操作紋理坐標來訪問想要訪問的值。對于這個問題迹辐,更加直接的解決方案是紋理緩沖區(qū),為什么這樣說呢甚侣?紋理緩沖區(qū)是緩沖對象的一種特定的類型右核,類似于一維紋理,可以在說色器中使用一個整數(shù)值來索引渺绒,但是贺喝,它提供了較為昂貴的紋理內(nèi)存的資源,因此支持較大的數(shù)據(jù)集合宗兼。
創(chuàng)建紋理緩沖區(qū)的步驟:
1.初始化數(shù)據(jù)
glBufferData()
2.把該緩沖區(qū)綁定到一個紋理緩沖區(qū)中
glTexBuffer()

void glTexBuffer(GLenum target,GLenum internalFormat,GLuint buffer)

把緩沖區(qū)對象buffer 和target 關(guān)聯(lián)起來躏鱼,這導致buffer 中的數(shù)據(jù)格式被解釋為擁有internalFormat 的格式.
target:必須為GL_TEXTURE_BUFFER
interalFormat 紋理格式:
GL_R8,GL_R16,GL_R16F,GL_R32F,GL_R81,GL_R16I,GL_R32I,GL_R81UI,GL_R16UI,GL_R32UI,GL_RG8,GL_RG16,GL_RG16F,GL_RG32F,GL_RG81,GL_RG16I,GL_RG32I,GL_RG8UI,GL_RG16UI,GL_RG32UI,GL_RGBA8,GL_RGBA16,GL_RGBA16F,GL_RGBA32F,GL_RGBA8I,GL_RGBA16I,GL_RGBA32I,GL_RGBA8UI,GL_RGBA16UI,GL_RGBA32UI
通過調(diào)用glActiveTexture() 來指定那個紋理單元和紋理緩沖區(qū)相關(guān)聯(lián)。

總結(jié)

紋理的使用在OpenGL 中是比較重要的一塊內(nèi)容殷绍,必須要掌握!
如有疑問:請加群:578734141

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末染苛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茶行,老刑警劉巖躯概,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畔师,居然都是意外死亡娶靡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門看锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姿锭,“玉大人,你說我怎么就攤上這事伯铣∩氪耍” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵腔寡,是天一觀的道長焚鲜。 經(jīng)常有香客問我,道長放前,這世上最難降的妖魔是什么恃泪? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮犀斋,結(jié)果婚禮上贝乎,老公的妹妹穿的比我還像新娘。我一直安慰自己叽粹,他們只是感情好览效,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虫几,像睡著了一般锤灿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辆脸,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天但校,我揣著相機與錄音,去河邊找鬼啡氢。 笑死状囱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的倘是。 我是一名探鬼主播亭枷,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搀崭!你這毒婦竟也來了叨粘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎升敲,沒想到半個月后答倡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡驴党,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年瘪撇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼻弧。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡设江,死狀恐怖锦茁,靈堂內(nèi)的尸體忽然破棺而出攘轩,到底是詐尸還是另有隱情,我是刑警寧澤码俩,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布度帮,位于F島的核電站,受9級特大地震影響稿存,放射性物質(zhì)發(fā)生泄漏笨篷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一瓣履、第九天 我趴在偏房一處隱蔽的房頂上張望率翅。 院中可真熱鬧,春花似錦袖迎、人聲如沸冕臭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辜贵。三九已至,卻和暖如春归形,著一層夾襖步出監(jiān)牢的瞬間托慨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工暇榴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厚棵,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓蔼紧,卻偏偏與公主長得像窟感,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子歉井,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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