????????紋理常用API簡介????

載入紋理

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);

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

相關(guān)閱讀更多精彩內(nèi)容

  • 一、紋理基礎(chǔ) 3D圖形渲染中最基本的操作就是對一個(gè)表面應(yīng)用紋理。紋理可以表現(xiàn)只從網(wǎng)格的幾何形狀無法得到的附加細(xì)節(jié)。...
    cain_huang閱讀 9,193評論 0 7
  • http://blog.csdn.net/wangdingqiaoit/article/details/51457...
    jerryhigh閱讀 5,565評論 0 8
  • 1 紋理基礎(chǔ) 紋理是一種結(jié)構(gòu)化的存儲(chǔ)形式(Textures are a structured form of st...
    RichardJieChen閱讀 16,581評論 0 10
  • 一、紋理綜述 物理世界中,視域內(nèi)的顏色會(huì)發(fā)生快速的變化。你可以看到很多物體表面都會(huì)呈現(xiàn)出豐富的顏色,并且在狹小的面...
    凡幾多閱讀 1,124評論 1 5
  • OpenGL: 紋理 1. 原始圖像數(shù)據(jù) 像素包裝圖像存儲(chǔ)空間 = 圖像width * 圖像height * 每個(gè)...
    Neal_f閱讀 1,366評論 0 2

友情鏈接更多精彩內(nèi)容