opengl如何用顶点数组处理多张纹理图

Dloud 2014-09-29 06:48:23
我有一个比较大的模型,有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这个方法来渲染。
一张纹理比较好弄一点,但是如果有多张纹理图的话怎么办呢?
...全文
1252 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lion.Kuo 2016-07-01
  • 打赏
  • 举报
回复
只能一个对象一个对象画,真想不出其他更好的方法
asdln 2016-01-20
  • 打赏
  • 举报
回复
我也遇到这个问题,不知道楼主解决没有
SiGoYi 2014-09-30
  • 打赏
  • 举报
回复
先帮顶一下! 然后,想问一下楼主,你的模型建模后会得到很多三角面片的数组和法向量的数组,之后你在画一个三角面片时想给一个三角面片加上纹理。由于三角面片和纹理都很多,所以你不知道有什么办法把这些纹理画到三角面片上是这样么?请回复!

19,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧