前言
現(xiàn)實(shí)生活中,紋理最通常的作用是裝飾我們的物體模型,它就像是貼紙一樣貼在物體表面,使得物體表面擁有圖案。但實(shí)際上在OpenGL中,紋理的作用不僅限于此,它可以用來(lái)存儲(chǔ)大量的數(shù)據(jù),一個(gè)典型的例子就是利用紋理存儲(chǔ)地形信息。
紋理常用 API簡(jiǎn)介
1.讀取TGA紋理
GLbyte *gltReadTGABits(constchar*szFileName, GLint *iWidth, GLint *iHeight, GLint *iComponents, GLenum *eFormat);
參數(shù)1:szFileName,紋理文件名稱(chēng)
參數(shù)2:iWidth,紋理文件寬度地址
參數(shù)3:iHeight,紋理文件高度地址
參數(shù)4:iComponents,紋理文件組件地址
參數(shù)5:eFormat,紋理文件格式地址
返回值: 指向圖像數(shù)據(jù)的指針
2.設(shè)置紋理參數(shù)
glTexParameteri (GLenum target,GLenum pname,GLint param); //最后一個(gè)參數(shù)是int類(lèi)型
glTexParameterf (GLenum target,GLenum pname,GLfloat param); //最后一個(gè)參數(shù)是float類(lèi)型
glTexParameteriv (GLenum target,GLenum pname,const GLint *params); //最后一個(gè)參數(shù)是*int類(lèi)型
glTexParameterfv (GLenum target,GLenum pname,const GLfloat *params); //最后一個(gè)參數(shù)是*float類(lèi)型
參數(shù)1: target,指定參數(shù)要應(yīng)用到哪個(gè)紋理模式(紋理模式:,GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D)
參數(shù)2: pname,指定需要設(shè)置紋理參數(shù)
參數(shù)3: param,指定需要設(shè)置紋理參數(shù)的值
3.設(shè)置紋理對(duì)象
void glGenTextures(GLsizei n,GLuint * textTures);
參數(shù)1:n,指定紋理對(duì)象個(gè)數(shù)
參數(shù)2:textTures,指針(指針指向一個(gè)無(wú)符號(hào)整形數(shù)組,由紋理對(duì)象標(biāo)識(shí)符填充)
作用:使用函數(shù)分配紋理對(duì)象
void glBindTexture(GLenum target,GLunit texture);
參數(shù)1:target,綁定紋理的紋理模式
參數(shù)2:texture,需要綁定的紋理對(duì)象
作用:綁定紋理狀態(tài)
void glDeleteTextures(GLsizei n,GLuint *textures);
參數(shù)1:n,紋理對(duì)象個(gè)數(shù)
參數(shù)2:textures,紋理對(duì)象指針
作用:刪除綁定紋理對(duì)象
GLboolean glIsTexture(GLuint texture);
參數(shù)1:texture,綁定的紋理對(duì)象
作用:如果texture是一個(gè)已經(jīng)分配空間的紋理對(duì)象,那么這個(gè)函數(shù)會(huì)返回GL_TRUE,否則會(huì)返回GL_FALSE
紋理坐標(biāo)
將紋理覆蓋到物體表面,最終是通對(duì)齊坐標(biāo)來(lái)實(shí)現(xiàn)的。而OpenGL中二維紋理的坐標(biāo)與計(jì)算機(jī)圖像的坐標(biāo)并不一致,因此,首先對(duì)比下兩者的不同。

可見(jiàn),兩者的差別在于繞橫軸翻轉(zhuǎn)180度。另外,OpenGL ES支持的紋理不必是正方形,但每個(gè)維度都必須是2的冪。
當(dāng)我們要使用紋理貼到一個(gè)面上時(shí),可以理解為要把墻紙貼到墻上,從哪個(gè)角開(kāi)始貼可以自己選擇,下圖表示為其中一種:

當(dāng)然,坐標(biāo)不可以交叉:
