我有一個比較大的模型,有40張紋理圖。按照一般的方法來渲染的話效率比較慢,比如下面的代碼:
glBindTexture(GL_TEXTURE_2D, texName[texFileNameIdx]); //texFileNameIdx is the indice of different texture
glBegin(GL_TRIANGLES);
glTexCoord2f(...);
glVertex3f(...);
glTexCoord2f(...);
glVertex3f(...);
glTexCoord2f(...);
glVertex3f(...);
glEnd();
因為每一個三角形可能是不同的紋理圖來渲染的,所以我呼叫glBindTexture來系結不同的紋理到當前紋理單元中。這樣如果模型的點數目多的話速度就會比較慢,所以我采用紋理陣列的方法,頂點和法向量的頂點陣列比較容易,我的代碼在下面:
glGenBuffers(3, this->buffers);
glBindBuffer(GL_ARRAY_BUFFER, this->buffers[VERTEXBUFFER]);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*3*objInfo->points3d.size(), this->vertexs, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, this->buffers[NORMALBUFFER]);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*3*objInfo->points3d.size(), this->normals, GL_STATIC_DRAW);
glNormalPointer(GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState(GL_NORMAL_ARRAY);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->buffers[INDICEBUFFER]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*3*objInfo->faces.size(), this->indices, GL_STATIC_DRAW);
這個代碼是使用緩沖物件來存盤頂點陣列的。最后使用glDrawElements這個方法來渲染。
一張紋理比較好弄一點,但是如果有多張紋理圖的話怎么辦呢?
uj5u.com熱心網友回復:
先幫頂一下!然后,想問一下樓主,你的模型建模后會得到很多三角面片的陣列和法向量的陣列,之后你在畫一個三角面片時想給一個三角面片加上紋理。由于三角面片和紋理都很多,所以你不知道有什么辦法把這些紋理畫到三角面片上是這樣么?請回復!
uj5u.com熱心網友回復:
我也遇到這個問題,不知道樓主解決沒有uj5u.com熱心網友回復:
只能一個物件一個物件畫,真想不出其他更好的方法轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/132511.html
標籤:圖形處理/算法
