1

可能重复:
VBO - 没有索引的索引

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

我已经为这个模型自己生成了一个纹理,纹理的每个区域都必须应用于每个三角形。我无法正确展开模型,因为它会花费太多时间,所以一个顶点可以有多个纹理坐标。

没有 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)来做到这一点?

4

1 回答 1

3

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

于 2012-12-21T17:15:00.243 回答