在利用非固定管線進行紋理渲染的時候,經(jīng)常要用到紋理和頂點坐標的映射關系,這里從三維角度介紹下二維的紋理坐標映射:
頂點坐標:
首先得明確:
頂點坐標是在世界坐標系上(可參考:從渲染過程來理解opengl坐標系和坐標變換投影),這里的世界坐標系投影的屏幕坐標系(可參考:從渲染過程來理解opengl坐標系和坐標變換投影)上,
x、y如上圖所示,z正方向是從屏幕向外,人眼的位置則是在原點(0,0,0),因此只要固定z為-1或者0, 然后繪制一個如上圖坐標的四邊形,后續(xù)就是將紋理貼在這個四邊形上。
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 度(下面一節(jié)samplerExternalOES的紋理映射會講解到這種方法),就可以實現(xiàn)紋理的旋轉90度了。當然旋轉還可以利用矩陣來實現(xiàn)。
————————————————
版權聲明:本文為CSDN博主「Lammyzp」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhangpengzp/article/details/89543108