在利用非固定管線進行紋理渲染的時候,經常要用到紋理和頂點座標的映射關係,這裏從三維角度介紹下二維的紋理座標映射:
頂點座標:
首先得明確:
- 頂點座標是在世界座標系上(可參考:從渲染過程來理解opengl座標系和座標變換投影),這裏的世界座標系投影的屏幕座標系(可參考:從渲染過程來理解opengl座標系和座標變換投影)上,
- x、y如上圖所示,z正方向是從屏幕向外,人眼的位置則是在原點(0,0,0),因此只要固定z爲-1或者0, 然後繪製一個如上圖座標的四邊形,後續就是將紋理貼在這個四邊形上。
sampler2D紋理座標
紋理的生成是由圖片像素來生成的,而圖像的存儲是從左上角開始的,對應於上圖,就是圖像左上角像素生成的紋理部分就在紋理左下角處,即 上下顛倒。
映射
爲了能夠讓圖像正確的顯示,就必須將生成紋理的對應點再顛倒一次,負負得正,哈哈。
最終,在寫頂點座標 和 紋理映射座標的時候,就直接將 頂點座標的矩形 於 上圖 右邊圖 對應位置 對應起來即可。
// //頂點座標
public float pos[] = {
-1.0f, 1.0f,
-1.0f, -1.0f,
1.0f, 1.0f,
1.0f, -1.0f,
};
public float coor[] = {
0.0f , 0.0f,
0.0f , 1.0f,
1.0f , 0.0f,
1.0f , 1.0f
};
爲了正確的渲染我們的紋理,因此在映射的時候,將頂點座標的左上角,對應在紋理座標的左下角,即 左上對左下,右上對右下,,這樣紋理就可以 正確的渲染出來。
當然也可以通過,對其後的紋理進行旋轉,如左上對左下,右上對右下 後再將對應好的紋理映射座標旋轉 90 度(下面一節samplerExternalOES的紋理映射會講解到這種方法),就可以實現紋理的旋轉90度了。當然旋轉還可以利用矩陣來實現。