【发布时间】:2011-09-02 15:10:39
【问题描述】:
我正在尝试使用顶点数组来绘制一个相当大的网格,其中包含大量顶点。纹理已根据这些确定,并且很容易在立即模式下沿以下线条绘制:
glBegin(GL_TRIANGLES) {
for ( int faceIdx = 0; faceIdx < nFaces; ++faceIdx )
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
}
}
glEnd();
但是为了可读性、速度和其他方面,我想使用顶点数组(以转向 VBO)。有没有办法将一个顶点多次放入数组中?
据我所知,有必要指定网格的每个顶点与它在网格面上出现的次数一样多,因为每个顶点都标识多个纹理坐标(纹理是从真实世界中捕获的)网格近似的对象的图像),即我的顶点/tex坐标数组读起来就像我在立即模式下填充它一样。
有没有办法使用顶点数组,同时指定纹理坐标,而不使用冗余(我的意思是重复)顶点?
【问题讨论】:
-
几天前我问了一个(远程)类似的问题:stackoverflow.com/questions/7232915/fewer-colors-than-vertices
-
我在上面的代码中没有看到你的问题。顶点位置和纹理坐标可能共享索引,但您正在推进每个顶点的索引。顺便说一句,我认为您的调用顺序搞砸了:在设置了所有其他属性之后,您调用了 glVertex。在 glBegin...glEnd 块中,最后一个 OpenGL 命令应该是 glVertex