OpenGLES 之紋理

紋理

? ? ? ? 紋理是一個用來保存圖像的顏色元素值的OpenGL ES 緩存。它可以控制一個渲染的三角形中每個像素的顏色枫甲。紋理可以使用任何圖像源武,包括樹木、云彩想幻、機器粱栖、人物。當把紋理應(yīng)用到幾何圖形中后脏毯,會使渲染的場景更顯自然,會使三角形的復(fù)雜組合像是真實的物體而不是只有顏色的面闹究。在紋理的緩存中保存的顏色值可能要耗費很多的內(nèi)存,所以食店,應(yīng)該盡量使用最小的圖像來產(chǎn)生可以接受的渲染結(jié)果渣淤。

紋素

? ? ? ? ? 當用一個圖片初始化一個紋理緩存后,在這個圖像中的每個像素變成了紋理中的一個紋素吉嫩。與像素類似价认。紋素保存顏色數(shù)據(jù)。要說區(qū)別自娩。就是像素有具體的尺寸大小用踩,而紋素沒有,紋素存在于一個沒有尺寸的數(shù)學(xué)坐標系中忙迁。

紋理坐標系

圖1-1(紋理坐標系)

? ? ? ? ?紋理坐標系中有一個命為 S 和 T 的2D軸(上面畫錯了脐彩,x當成是S,y當成是T)动漾。在一個紋理中無論有多少紋素丁屎,紋理的尺寸永遠在S軸上是從 0 - 1.0 ,在T 軸上 是從 0 - 1.0.比如:一張圖片寬是100像素旱眯,高是100像素晨川。那S軸的1.0就表示截取圖片的寬是100像素证九,如果S軸是0.5,則只會截取到圖片的寬是50像素共虑,圖片只會顯示一半愧怜。

片元

? ? ? ? ?每個頂點坐標的X、Y妈拌、Z坐標被轉(zhuǎn)換成視口坐標后拥坛,GPU會設(shè)置轉(zhuǎn)換生成的三角形內(nèi)的每個像素的顏色。轉(zhuǎn)換幾何形狀數(shù)據(jù)為幀緩存中的顏色像素的渲染步驟叫做點陣化(rasterizing)尘分,每個顏色像素叫做片元(franment)猜惋。

映射

? ? ? ? ? 程序需要指定怎么對齊紋理和頂點,以便讓GPU知道每個片元的顏色由哪些紋素來決定培愁。這個對齊又叫做映射(mapping)著摔。

? ? ? ? ?其實每個頂點除了給定的X、Y定续、Z坐標谍咆,每個頂點還給出了U和V的坐標值。U坐標會映射紋理中的S軸私股,V坐標會映射到T軸摹察。

取樣

? ? ? ? ?GPU會根據(jù)每個片元的U、V位置從綁定的紋理中選擇紋素倡鲸。這個過程叫做取樣供嚎。取樣會把紋理的S和T坐標系中與每個渲染的三角形的頂點的U、V坐標匹配起來峭状。例如:一個U查坪、V坐標為{0.5,0.5}的片元會被當前綁定的紋理中最接近中間位置的紋素著色宁炫。

取樣模式

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);


GL_TEXTURE_MIN_FILTER ? 多個紋素對應(yīng)一個片元時

GL_TEXTURE_MAG_FILTER 沒有足夠多的紋素來唯一性地映射一個片元,會有放大紋理的效果

GL_LINEAR? 當使用指定參數(shù) GL_TEXTURE_MIN_FILTER氮凝,會使用線性插法來混合這些顏色以得到片元最終的顏色羔巢,

GL_LINEAR當使用指定參數(shù)GL_TEXTURE_MAG_FILTER,會混合附近紋素的顏色來計算片元的顏色罩阵,會有一個放大紋理的效果竿秆,并會讓它模糊地出現(xiàn)在渲染的三角形上

GL_NEAREST? 與片元U、V坐標最接近的紋素的顏色會被取樣稿壁,當指定參數(shù)是 GL_TEXTURE_MAG_FILTER幽钢,會有一個放大紋理的效果

除了上面這放大和縮小的過濾選項之外,當U傅是、V坐標的值小于0或者大于1的時候匪燕,有以下兩種選擇蕾羊,要么盡可能多的重復(fù)紋理以填滿映射到幾何圖形的整個U、V區(qū)域帽驯,要么每當片元的U龟再、V坐標超出紋理的S、T坐標系范圍的時候尼变,取樣紋理邊緣的紋素利凑。

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);


GL_TEXTURE_WRAP_S 和 GL_TEXTURE_WRAP_T?分別代表紋理坐標系的S 和T軸

GL_REPEAT :代表重復(fù)紋理

GL_CLAMP_TO_EDGE:代表取邊緣紋理


代碼實現(xiàn)

1.定義一個結(jié)構(gòu)體


三角形頂點數(shù)據(jù)結(jié)構(gòu)體

2.設(shè)置上下文,創(chuàng)建綁定頂點緩存區(qū)域嫌术,分配內(nèi)存

創(chuàng)建綁定頂點緩存區(qū)域哀澈,分配內(nèi)存

3.創(chuàng)建綁定頂點索引緩存區(qū)域,分配內(nèi)存

創(chuàng)建綁定頂點索引緩存區(qū)域度气,分配內(nèi)存

4.設(shè)置屬性

5.添加紋理

6.繪制

7.最后進行銷毀

8.運行結(jié)果

在這個demo第二個例子中我們還用到了一個新的函數(shù)割按,這里說一下。

glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);

// 用來更新一個已有緩沖區(qū)對象中的一部分數(shù)據(jù)

@param target 用來指定需要更新的緩沖區(qū)對象的類型,如 GL_ARRAY_BUFFER

@param GLintptr 要從什么地方開始更新原來的數(shù)據(jù)(以字節(jié)為單位)

@param size 需要更新的數(shù)據(jù)量的大小

@param data 個指向新數(shù)據(jù)源的指針蚯嫌,將新的數(shù)據(jù)源拷貝到緩沖區(qū)對象中完成更新

GitHub:

https://github.com/weixin1/OpenGLES-Learn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哲虾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子择示,更是在濱河造成了極大的恐慌束凑,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅盲,死亡現(xiàn)場離奇詭異汪诉,居然都是意外死亡,警方通過查閱死者的電腦和手機谈秫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門扒寄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拟烫,你說我怎么就攤上這事该编。” “怎么了硕淑?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵课竣,是天一觀的道長。 經(jīng)常有香客問我置媳,道長于樟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任拇囊,我火速辦了婚禮迂曲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寥袭。我一直安慰自己路捧,他們只是感情好关霸,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鬓长,像睡著了一般谒拴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涉波,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天英上,我揣著相機與錄音,去河邊找鬼啤覆。 笑死苍日,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窗声。 我是一名探鬼主播相恃,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笨觅!你這毒婦竟也來了拦耐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤见剩,失蹤者是張志新(化名)和其女友劉穎杀糯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苍苞,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡固翰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羹呵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂际。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冈欢,靈堂內(nèi)的尸體忽然破棺而出歉铝,到底是詐尸還是另有隱情,我是刑警寧澤凑耻,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布犯戏,位于F島的核電站,受9級特大地震影響拳话,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜种吸,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一弃衍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坚俗,春花似錦镜盯、人聲如沸岸裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽降允。三九已至,卻和暖如春艺糜,著一層夾襖步出監(jiān)牢的瞬間剧董,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工破停, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翅楼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓真慢,卻偏偏與公主長得像毅臊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黑界,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

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