每个三角形的顶点缓冲区对象+纹理

时间:2012-12-21 16:58:02

标签: opengl glsl textures vbo

  

可能重复:
  VBO - Indexation without indexation

这是我的问题,我想渲染一个巨大的模型(一百万个脸),我有一个面部的索引缓冲区。

我自己为这个模型生成了一个纹理,并且纹理的每个区域都必须应用于每个三角形。我无法正确展开模型,因为它需要花费太多时间,因此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)做到这一点?

1 个答案:

答案 0 :(得分:3)

我已经告诉过你,你必须将多个纹理坐标三角形角的共享位置分解为多个顶点。顶点在给定纹理上始终只有一个纹理坐标。如果纹理坐标存在差异,但在同一位置上,则会有不同的顶点。