这是我的问题,我想渲染一个巨大的模型(一百万个脸),我有一个面部的索引缓冲区。
我自己为这个模型生成了一个纹理,并且纹理的每个区域都必须应用于每个三角形。我无法正确展开模型,因为它需要花费太多时间,因此Vertice可以有多个纹理坐标。
没有VBO我的渲染器是这样的:
glBegin(GL_TRIANGLES);
for (unsigned int i = 0; i < g_pModel->GetNbTriangle(); i++)
{
glTexCoord2f(TextCoord[6*i+0],TextCoord[6*i+1]);
glNormal3f(Normal[3*Triangle[i].x],Normal[3*Triangle[i].x+1],Normal[3*Triangle[i].x+2]);
glVertex3f(Vertex[Triangle[i].x].x,Vertex[Triangle[i].x].y,Vertex[Triangle[i].x].z);
glTexCoord2f(TextCoord[6*i+2],TextCoord[6*i+3]);
glNormal3f(Normal[3*Triangle[i].y],Normal[3*Triangle[i].y+1],Normal[3*Triangle[i].y+2]);
glVertex3f(Vertex[Triangle[i].y].x,Vertex[Triangle[i].y].y,Vertex[Triangle[i].y].z);
glTexCoord2f(TextCoord[6*i+4],TextCoord[6*i+5]);
glNormal3f(Normal[3*Triangle[i].z],Normal[3*Triangle[i].z+1],Normal[3*Triangle[i].z+2]);
glVertex3f(Vertex[Triangle[i].z].x,Vertex[Triangle[i].z].y,Vertex[Triangle[i].z].z);
}
glEnd();
使用我的VBO我不能使用glTexCoordPointer,因为它需要与顶点一样多的纹理坐标,而不是我的情况。
有没有办法用VBO和我的着色器(我使用GLSL)做到这一点?
答案 0 :(得分:3)
我已经告诉过你,你必须将多个纹理坐标三角形角的共享位置分解为多个顶点。顶点在给定纹理上始终只有一个纹理坐标。如果纹理坐标存在差异,但在同一位置上,则会有不同的顶点。