載入紋理
void glTexImage1D(GLenum target,GLint level,GLint?internalformat,GLsizei width,GLint border,GLenum? format,GLenum type,void *data);
void glTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void * data);
void glTexImage3D(GLenum target,GLint level,GLint internalformat,GLSizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
*?target:`GL_TEXTURE_1D`、`GL_TEXTURE_2D`、`GL_TEXTURE_3D`。
*?Level:指定所加載的mip貼圖層次。?一般我們都把這個(gè)參數(shù)設(shè)置為0。
*?internalformat:每個(gè)紋理理單元中存儲(chǔ)多少顏?色成分。
*?width、height、depth參數(shù):指加載紋理理的寬度、?高度、深度。==注意!==這些值必須是2的整數(shù)次?方。(這是因?yàn)镺penGL?舊版本上的遺留留下的?一個(gè)要求。當(dāng)然現(xiàn)在已經(jīng)可以?支持不不是2的整數(shù)次?方。但是開發(fā)者們還是習(xí)慣使?用以2的整數(shù)次?方去設(shè)置這些參數(shù)。)
*?border參數(shù):允許為紋理理貼圖指定?一個(gè)邊界寬度。
*?format、type、data參數(shù):與我們在講glDrawPixels?函數(shù)對于的參數(shù)相同
更新紋理
void glTexSubImage1D(GLenum target,GLint level,GLint xOffset,GLsizei width,GLenum ? ?format,GLenum type,const GLvoid *data);
void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei
width,GLsizei height,GLenum format,GLenum type,const GLvoid *data);void glTexSubImage3D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLint zOffset,GLsizei width,GLsizei height,GLsizei depth,Glenum type,const GLvoid * data);
插入替換紋理
void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsize
width);void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint x,
? ? GLint?y,GLsizei width,GLsizei height);void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yOffset,GLint
? ? ?zOffset,GLint x,GLint y,GLsizei width,GLsizei height);
使?顏色緩存區(qū)加數(shù)據(jù),形成新的紋理
void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformt,GLint x,GLint y,GLsizei width,GLint border);
void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformt,GLint x,GLint y,GLsizei width,GLsizei height,GLint border);
x,y?在顏?緩存區(qū)中指定了開始讀取紋理數(shù)據(jù)的位置; 緩存區(qū)里的數(shù)據(jù),是源緩存區(qū)通過glReadBuffer設(shè)置的。
注意:不不存在glCopyTextImage3D?,因?yàn)槲覀?無法從2D?顏?色緩存區(qū)中獲取體積 數(shù)據(jù)。
紋理對象
//使用函數(shù)分配紋理對象 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//指定紋理對象的數(shù)量 和 指針(指針指向一個(gè)無符號整形數(shù)組,由紋理對象標(biāo)識(shí)符填充)。 ? ? ? ? ? ? ? ? ? ? ? ? void glGenTextures(GLsizei n,GLuint * textTures);
//綁定紋理狀態(tài) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //參數(shù)target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//參數(shù)texture:需要綁定的紋理對象 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void glBindTexture(GLenum target,GLunit texture);
//刪除綁定紋理對象 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//紋理對象 以及 紋理對象指針(指針指向?一個(gè)無符號整形數(shù)組,由紋理對象標(biāo)識(shí)符填充)。 ? ? ? ? ? ? ?void glDeleteTextures(GLsizei n,GLuint *textures); //測試紋理理對象是否有效
//如果texture是一個(gè)已經(jīng)分配空間的紋理對象,那么這個(gè)函數(shù)會(huì)返回GL_TRUE,否則會(huì)返回GL_FALSE。GLboolean glIsTexture(GLuint texture);
設(shè)置紋理參數(shù)
glTexParameterf(GLenum target,GLenum pname,GLFloat param); ? ? ? ? ? ? ? ? ? ? ? ? glTexParameteri(GLenum target,GLenum pname,GLint param); ? ? ? ? ? ? ? ? ? ? ? ? ?glTexParameterfv(GLenum target,GLenum pname,GLFloat *param); ? ? ? ? ? ? ? ? glTexParameteriv(GLenum target,GLenum pname,GLint *param);
參數(shù)1:target,指定這些參數(shù)將要應(yīng)用在那個(gè)紋理模式上,?如GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?參數(shù)2:pname,指定需要設(shè)置那個(gè)紋理參數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 參數(shù)3:param,設(shè)定特定的紋理參數(shù)的值
設(shè)置紋理過濾方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)紋理縮小時(shí),使用鄰近過濾
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)紋理放大時(shí),使用線性過濾
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
設(shè)置環(huán)繞方式
參數(shù)1:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D
參數(shù)2:GL_TEXTURE_WRAP_S、GL_TEXTURE_T、GL_TEXTURE_R,針對s,t,r坐標(biāo)
?參數(shù)3:GL_REPEAT、GL_CLAMP、GL_CLAMP_TO_EDGE、GL_CLAMP_TO_BORDER
GL_REPEAT:OpenGL?在紋理坐標(biāo)超過1.0的方向上對紋理進(jìn)行重復(fù);
GL_CLAMP:所需的紋理單元取自紋理邊界或TEXTURE_BORDER_COLOR.
GL_CLAMP_TO_EDGE環(huán)繞模式強(qiáng)制對范圍之外的紋理坐標(biāo)沿著合法的紋理單元的最后一行或者最后?列來進(jìn)行采樣。
GL_CLAMP_TO_BORDER:在紋理坐標(biāo)在0.0到1.0范圍之外的只使用邊界紋理單元。邊界紋理單元是作為圍繞基本圖像的額外的行和列,并與基本紋理圖像一起加載的。
glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_S,GL_CLAMP_TO_EDGE);
glTextParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAR_T,GL_CLAMP_TO_EDGE);