紋理映射到轉換后的頂點
紋理映射到轉換后的頂點
紋理
- 概念:紋理是一個用來保存圖像顏色元素值的OpenGL ES緩存。
應該盡量使用最小的圖像來產生可以接受的渲染結果,因為嵌入式系統的可用內存相對較小
紋素(texel)
- 概念:當用一個圖像初始化一個紋理緩存后,在這個圖像中的每個像素變成了紋理中的一個紋素。
- 紋素保存顏色數據
- 紋素存在于一個虛擬的沒有尺寸的數學坐標系中
紋理坐標系有一個命名為S何T的2D軸。在一個紋理中無論有多少紋素,紋理的尺寸永遠是S、T上從0.0-1.0。從一個1像素高64像素寬的圖像初始化來的紋理會沿著整個T軸有1紋素,沿著S軸有64紋素。
像素
- 概念:像素通常表示計算機屏幕上的一個實際的顏色點
視口(viewport)
- 概念:在渲染時,GPU會轉換純數學OpenGL ES坐標系中的每個頂點的X、Y、Z坐標為幀緩存中所對應的真實像素位置,而這個像素位置就叫做視口。
頂點坐標被轉換為視口坐標后,GPU會設置轉換生成的三角形內的每個像素的顏色
點陣化/光柵化(rasterizing)
- 概念:轉換幾何形狀數據為幀緩存中的顏色像素的渲染步驟叫做點陣化。
片元(fragment)
- 概念:光柵化得到的每個顏色像素叫做片元。
映射(mapping)
- 概念:程序需要指定怎么對齊紋理和頂點,以便讓GPU知道每個片元的顏色由哪些紋素決定,這個對齊就叫做映射。
取樣(sampling)
- 概念:每個頂點的U和V坐標會附加到每個頂點在視口坐標中的最終位置。然后GPU會根據計算出來的每個片元的U、V位置從綁定的紋理中選擇紋素。這個選擇過程就叫做取樣。
glTexParameteri()函數:
- 解釋:配置每個綁定的紋理,使OpenGL ES知道怎么處理可用紋素的數量與需要被著色的片元的數量之間的不匹配。
- 配置不同的取樣模式參數:
- GL_TEXTURE_MIN_FILTER:存在多個可用紋素對應一個片元時配置取樣。
- GL_TEXTURE_MAG_FILTER:沒有足夠的可用紋素唯一性的映射一個或者多個紋素到每個片元上時配置取樣。
- GL_NEAREST:鄰近差值取樣模式
- GL_LINEAR:線性內插法取樣
- 指定當U、V坐標小于0/大于1時的參數
- GL_TEXTURE_WRAP_S:S軸
- GL_TEXTURE_WRAP_T:T軸
- GL_GLAMP_TO_EDGE:當片元U、V坐標超出紋理的S、T坐標系范圍,取樣紋理邊緣的紋素
- GL_REPEAT:盡可能多的重復紋理以填滿映射到幾何圖形的整個U、V區域
MIP貼圖
- 拉丁語:Multum In Parvo-放置很多東西的小空間
- 為紋理存儲多個細節級別的技術,與取樣密切相關。
使用MIP貼圖通常會減少GPU取樣數量來提高渲染性能,但是MPI貼圖使每個紋理所需要的內存增加了1/3。在iOS設備上,內存限制可能優先于渲染性能。最好的策略是測試使用MIP和不使用的性能來決定用不用。