opengl 頂點坐標和sampler2D紋理坐標

在利用非固定管線進行紋理渲染的時候,經(jīng)常要用到紋理和頂點坐標的映射關系,這里從三維角度介紹下二維的紋理坐標映射:

頂點坐標:
image.png

首先得明確:

頂點坐標是在世界坐標系上(可參考:從渲染過程來理解opengl坐標系和坐標變換投影),這里的世界坐標系投影的屏幕坐標系(可參考:從渲染過程來理解opengl坐標系和坐標變換投影)上,
x、y如上圖所示,z正方向是從屏幕向外,人眼的位置則是在原點(0,0,0),因此只要固定z為-1或者0, 然后繪制一個如上圖坐標的四邊形,后續(xù)就是將紋理貼在這個四邊形上。
sampler2D紋理坐標


image.png

紋理的生成是由圖片像素來生成的,而圖像的存儲是從左上角開始的,對應于上圖,就是圖像左上角像素生成的紋理部分就在紋理左下角處,即 上下顛倒。

映射
為了能夠讓圖像正確的顯示,就必須將生成紋理的對應點再顛倒一次,負負得正,哈哈。


image.png

最終,在寫頂點坐標 和 紋理映射坐標的時候,就直接將 頂點坐標的矩形 于 上圖 右邊圖 對應位置 對應起來即可。

//    //頂點坐標
    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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容