Opengl_13_紋理貼圖-創(chuàng)新互聯(lián)

1,創(chuàng)建定點(diǎn)位置和紋理值
紋理值范圍[0,1],如果一張圖長(zhǎng)寬為512*256,則紋理點(diǎn)(0.5, 0.3)表示圖片(512*0.5, 256*0.3)處位置。



glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glFrontFace()函數(shù)告訴OpenGL三角形的頂點(diǎn)是按照順時(shí)針順序定義的,也就是當(dāng)你看向三角形的正面時(shí),會(huì)發(fā)現(xiàn)緩沖器中的三角形頂點(diǎn)是順時(shí)針順序排列的。
glCullFace()告訴GPU剔除三角形的背面,也就是物體的內(nèi)表面不需要渲染,只渲染外表面。
最后是開(kāi)啟面剔除本身(默認(rèn)是關(guān)閉的)

創(chuàng)新互聯(lián)主營(yíng)銀川網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開(kāi)發(fā),銀川h5重慶小程序開(kāi)發(fā)搭建,銀川網(wǎng)站營(yíng)銷推廣歡迎銀川等地區(qū)企業(yè)咨詢

5,創(chuàng)建紋理對(duì)象,加載原始紋理數(shù)據(jù)
glGenTextures(1, &m_textureObj);
glBindTexture(m_textureTarget, m_textureObj);
glTexImage2D(m_textureTarget, 0, GL_RGBA, m_image.columns(), m_image.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, m_blob.data());
glTexParameterf(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

5,告訴片元使用哪一個(gè)紋理對(duì)象單元
sampler_location = glGetUniformLocation(shader_program, "gsampler");

glUseProgram(ID);
glUniform1i(sampler_location, 0);//GL_TEXTURE0
glUniform1i(sampler_location2, 1);//GL_TEXTURE1
先將要使用的紋理單元的索引放到shader中的取樣器一致變量里。


6,激活指定紋理單元,綁定紋理對(duì)象。紋理對(duì)象的數(shù)據(jù)由紋理數(shù)據(jù)指定。

glActiveTexture(GL_TEXTURE0);
void GLAPIENTRY glBindTexture (GLenum target, GLuint texture);
//與glUniform1i(sampler_location, 0);對(duì)應(yīng),激活0號(hào)紋理單元,供紋理對(duì)象 texture使用。
//glUniform1i(sampler_location, i);glActiveTexture(GL_TEXTUREi);

7 ,
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(VertexText), 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(VertexText), (const GLvoid*)12);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);

glActiveTexture(GL_TEXTURE0);//對(duì)應(yīng)上面glUniform1i(sampler_location, 0);
glBindTexture(GL_TEXTURE_2D, m_textureObj);
glActiveTexture(GL_TEXTURE1);//對(duì)應(yīng)上面glUniform1i(sampler_location2, 1);
glBindTexture(GL_TEXTURE_2D, m_textureObj2);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0);

glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
主渲染循環(huán)中的代碼有所添改,在之前啟用的用于頂點(diǎn)位置的頂點(diǎn)屬性0之后,這里我們啟動(dòng)一個(gè)頂點(diǎn)屬性1用于紋理坐標(biāo)。這個(gè)和頂點(diǎn)著色器中的layout變量聲明是一一對(duì)應(yīng)的。
然后我們調(diào)用glVertexAttribPointer函數(shù)來(lái)定義頂點(diǎn)緩沖器中紋理坐標(biāo)的位置。

8,




9,
// texture samplers
uniform sampler2D gsampler;
uniform sampler2D gsampler2;

void main()
{
   // linearly interpolate between both textures (80% gsampler, 20% gsampler2)
   FragColor = mix(texture(gsampler, TexCoord), texture(gsampler2, TexCoord), 0.2);
}

本文名稱:Opengl_13_紋理貼圖-創(chuàng)新互聯(lián)
文章鏈接:http://muchs.cn/article46/cddceg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站制作軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司