在對(duì)紋理使用的時(shí)候 首先我們要對(duì)理解上圖 坐標(biāo)的說(shuō)明夺颤。三角形的三個(gè)頂點(diǎn)分別對(duì)應(yīng)了坐標(biāo)(0,0)(1,0)(0.5,1), 這個(gè)圖就說(shuō)明 在我們添加紋理的時(shí)候 一定要把圖片的頂點(diǎn)映射到坐標(biāo)系里面。當(dāng)然 這個(gè)映射關(guān)系不是固定的。但是也要注意把圖片鋪開(kāi)心俗。
紋理使用的流程:我們?cè)貱hangeSize(),方法中的代碼 還是和之前的一樣井仰。我們?cè)龠@個(gè)方法里面設(shè)定視口大小峰尝。生成透視投影儒旬。在SetupRC()中會(huì)和之前繪制有所不同。
1.需要設(shè)置背景 和初始化ShaderManager秸滴。
2.生成紋理坐標(biāo) glFenTextures(TEXTURE_COUNT, textures);參數(shù)1 紋理對(duì)象的數(shù)量武契。參數(shù)2 紋理對(duì)象標(biāo)識(shí)數(shù)組,
3. 綁定紋理對(duì)象(每繪制一個(gè)面 都要進(jìn)行紋理綁定) glBindTexture(GL_TEXTURE_2D,texttures[i]), 參數(shù)1紋理模式?GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D荡含,參數(shù)2需要綁定的紋理對(duì)象咒唆,
4.加載tga文件 pBytes=gltReadTGABits(szTextureFiles[i],&iWidth,&iHeight,&iComponents,&eFromat);參數(shù)1.紋理文件名稱(chēng)(tag文件的名字),參數(shù)2.文件寬度變量地址释液,參數(shù)3.文件高度變量地址全释,參數(shù)4.文件組件變量地址,參數(shù)5文件格式變量地址误债,返回值pBytes浸船,指向圖像數(shù)據(jù)的指針.
5.加載紋理妄迁,設(shè)置過(guò)濾器和包裝模式 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST);GL_TEXTURE_MAG_FILTER(放大過(guò)濾器 GL_TEXTURE_MIN_FILTER(縮小過(guò)濾器),GL_NEAREST(最鄰近過(guò)濾),設(shè)置環(huán)繞模式?glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);GL_TEXTURE_WRAP_S(s軸環(huán)繞)GL_TEXTURE_WRAP_T(T軸環(huán)繞),GL_CLAMP_TO_EDGE(環(huán)繞模式強(qiáng)制對(duì)范圍之外的紋理坐標(biāo)沿著合法的紋理單元的最后一行或一列進(jìn)行采樣)李命,我們需要把放大過(guò)濾器 和縮小過(guò)濾器都設(shè)置登淘。同樣也要把S軸環(huán)繞和T軸環(huán)繞設(shè)置。
6.載入紋理项戴,glTextImage2D(GL_TEXTURE_2D,0,iComponents,iWidth,iHeight,0,eFormat,GL_UNSIGNED_BYTE,pBytes). 參數(shù)1.紋理緯度,參數(shù)2.mip貼圖的層次,參數(shù)3.紋理單元存儲(chǔ)的顏色成分(從讀取像素圖中獲得),參數(shù)4.加載紋理寬度槽惫,參數(shù)5.加載紋理高度周叮,參數(shù)6.加載紋理的深度,參數(shù)7.像素?cái)?shù)據(jù)的數(shù)據(jù)類(lèi)型,GL_UNSIGNED_BYTES無(wú)符號(hào)整型界斜,參數(shù)8.指向紋理圖像數(shù)據(jù)的指針仿耽。
7.為紋理對(duì)象生成一組完整的mip貼圖 glGenerateMipmap(GL_TEXTURE_2D);
8.釋放原始紋理數(shù)據(jù)。不在需要紋理原始數(shù)據(jù)了 ?free(pBytes);
9.設(shè)置幾何圖像頂點(diǎn)/紋理坐標(biāo) GLTools庫(kù)中的容器各薇,GBatch void GLBatch::Begin(GLenum primitive,GLuint nVerts,GLuint nTextureUnits = 0); 參數(shù)1.圖元枚舉值项贺,參數(shù)2.頂點(diǎn)數(shù),參數(shù)3.紋理坐標(biāo)的組數(shù)峭判、floorBatch.Begin(GL_TRIANGLE_STRIP,28,1); //頂點(diǎn)坐標(biāo)和紋理的映射floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);參數(shù)1.是表示圖層开缎。參數(shù)2.x軸。參數(shù)3.Y軸 ?floorBatch.Vertex3f(-10.0f, -10.0f, z);參數(shù)1.X軸林螃。參數(shù)2.Y軸奕删,參數(shù)3.Z軸?floorBatch.End();結(jié)束?
以上步驟是我們需要在SetupRC()中的流程。接下來(lái)我們需要在RenderScene()方法里面進(jìn)行繪制
1.首先 我們要清空緩沖區(qū)疗认,模型視圖壓棧完残,軸平移
2.紋理替換矩陣著色器,shaderManager.UseStockShader(GLT_SHADER_TEXTURE_REPLACE, transformPipeline.GetModelViewProjectionMatrix(), 0);參數(shù)1.著色器標(biāo)簽 在這里我們使用的是紋理替換矩陣著色器横漏,參數(shù)2.模型視圖投影矩陣谨设,參數(shù)3.紋理層
3.綁定紋理 glBindTexture(GL_TEXTURE_2D,texttures[1]);參數(shù)1.紋理模式,參數(shù)2.需要綁定的紋理 缎浇。?繪制?floorBatch.Draw();
4.交換緩沖區(qū)扎拣,glutSwapBuffers();,當(dāng)由于我們之前進(jìn)行了壓棧 所以要注意 先出棧 在進(jìn)行交換緩沖區(qū)素跺。
至此我們就可以繪制把圖片繪制到我們想要添加的 位置上鹏秋。