紋理坐標配置函數,先看定義:
void glTexCoord2f (GLfloat s, GLfloat t);
1、glTexCoord2f()函數
有兩個參數:GLfloat s, GLfloat t
第一個參數代表X坐標。 0.0f 是紋理的左側。 0.5f 是紋理的中點, 1.0f 是紋理的右側。
第二個參數代表Y坐標。 0.0f 是紋理的底部。 0.5f 是紋理的中點, 1.0f 是紋理的頂部。
一個完全紋理的四個頂點的坐標分別是(0.0f, 0.0f)、(0.0f, 1.0f)、(1.0f, 1.0f)、(1.0f, 0.0f),分別對應左下、左上、右上、右下角。
可以這么認為,紋理一個挨着一個粘在坐標軸上,顯示多個、顯示那部分完全由四個頂點坐標決定。
比如顯示3行2列個位圖(共6個),坐標可以這樣:(0.0f, 0.0f)、(0.0f, 3.0f)、(2.0f, 3.0f)、(2.0f, 0.0f)。
該函數主要與glVertex3f()配合使用,glTexCoord2f()是配置紋理坐標,glVertex3f()是配置圖形坐標。
注意:載入的位圖大小必須是M*M,M是2的某次方,如32,64,128等。
2、如果貼圖左右或者上下貼反了什么情況?
為了將紋理正確的映射到四邊形上,必須將紋理的右上角映射到四邊形的右上角,紋理的左上角映射到四邊形的左上角,紋理的右下角映射到四邊形的右下角,紋理的左下角映射到四邊形的左下角。如果映射錯誤的話,圖像顯示時可能上下顛倒,側向一邊或者什么都不是。
紋理的左上坐標是X:0.0,Y:1.0f,四邊形的左上頂點是X:-1.0,Y:1.0。其余三點依此類推。下面是一個具體的例子。
glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, -1.0, 1.0 );
glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 );
glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0, 1.0, 1.0 );
最后附上一些博主寫的關於紋理映射的文章:
