OpenGL渲染管線之紋理(三)

2021-09-28 20:39:18 字數 1518 閱讀 8721

概述:

紋理時乙個2d(也可以是1d或者3d),用來讓圖形看起來更真實。是一種很簡單就能夠模擬真實的方法,因為如果不使用紋理,那麼我們就必須為所有細節構建頂點和圖形,這樣的開銷會非常大,有了紋理後,我們就只需要少很多的頂點,然後把紋理貼上去就可以了,及時有些不真實,但是也看不出來。

紋理座標:

紋理座標的原點在左下角;

s、t、r 對應 x、y、z

但是在儲存的時候資料是從左上角開始存,這樣導致讀取的座標y軸被反轉。

opengl預設開啟4位元組對齊,如果在讀取的資料不是4位元組對齊的,在將資料轉換到紋理物件後再使用會導致影象傾斜,因為資料使用一維陣列儲存,同時使用width和height查詢畫素的具體位置。可以使用glpixelstorei(gl_unpack_alignment, 1)設定位元組對齊方式。

紋理環繞方式:

gl_repeat:紋理的預設行為,重複紋理圖形

gl_mirrored_repeat:映象重複

gl_clamp_to_edge:約束到邊緣

gl_clamp_border:約束到指定邊框,可以通過 gltexparameterfv(gl_texture_2d, gl_texture_border_color, bordercolor)設定邊框顏色

eg: gltexparameteri(gl_texture_2d, gl_texture_wrap_s, gl_mirrored_repeat);//設定x軸方向為映象重複

紋理過濾:紋理過濾指的是在取樣階段,當需要取樣的座標不存在時,採用怎樣的策略使用待取樣座標附近的顏色來推算待取樣座標的顏色(很顯然,絕大部分情況下都是無法直接命中的)。

gl_nearest:最近鄰過濾,看起來銳利,使用靠近目標座標的的紋理座標處的顏色。建議用在當minify(縮小)的情況下。

gl_linear:線性過濾,看起來模糊,使用目標座標附近的紋理顏色線性插值。建議用在magnify(放大)的情況下。

為了進一步讓紋理再使用時看起來更真實,使用了多級漸遠紋理(mipmap)。mipmap是一套紋理,他們從第0個紋理(原始紋理)開始,後面乙個紋理的邊長都為前乙個的二分之一,用以模擬紋理在所有縮放尺寸的紋理。由於使用二分之一作為倍數,所以還是會出現不真實的邊屆,所以也可以對mipmap使用多種紋理過濾方式,例如:

gl_nearest_mipmap_nearest:使用最鄰近的多級漸遠紋理來匹配畫素大小,並使用鄰近插值進行紋理取樣

gl_linear_mipmap_nearest:使用最鄰近的多級漸遠紋理級別,並使用線性插值進行取樣

gl_nearest_mipmap_linear:在兩個最匹配畫素大小的多級漸遠紋理之間進行線性插值,使用鄰近插值進行取樣

gl_linear_mipmap_linear:在兩個鄰近的多級漸遠紋理之間使用線性插值,並使用線性插值進行取樣。

紋理單元:乙個紋理的位置通常稱為乙個紋理單元。我們使用glactivetexture啟用指定紋理,後面的對紋理的操作都是在該啟用的紋理上。

opengl渲染管線

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。首先要知道幾個opengl的術語 渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 verte...

高階OpenGL渲染管線之幀緩衝(三)

幀緩衝包括之前學的 用於寫入顏色值的顏色緩衝 用於寫入深度資訊的深度緩衝和允許我們根據一些條件對齊特定片段的模板緩衝。他們都儲存在記憶體中,我們也可以定義自己的幀緩衝。在繫結到gl framebuffer目標之後,所有的讀取和寫入幀緩衝的操作將會影響當前繫結的幀緩衝。我們也可以使用gl read f...

opengl渲染管線理論

opengl 渲染管線理論 這幾天稍微看了一些關於glsl的頂點著色以及片元著色的一些相關知識.目前來講還有乙個著色器則是geometry shader.我的顯示卡用不了這個功能.當然有點遺憾 在看了一些之後,大概了解了一些關於opengl渲染管線的知識.看了這個之後對於opengl的學習我想應當是...