我无法让glDrawElements工作。我目前正在使用一个网格类来读取文档中的值,并将顶点,面和规范读入它们的数组中。对于顶点,我给出的代码改进了用途:
Class Point3{
public:
GLfloat x,y,z;
and other functions here...
}
我将每个顶点存储在这个类中,我有一个这些类的数组,存储了所有可供使用的东西,称为pt。给我的文件没有给出索引,但确实有规范和面孔所以我使用给定的工具来创建索引列表
indices = new GLubyte[numIndices];
for(int f = 0; f < numFaces; f++){
for(int v = 0; v < face[f].nVerts; v++){
int in = face[f].vert[v].normIndex ; // index of this normal
assert(in >= 0 && in < numNormals);
int iv = face[f].vert[v].vertIndex ; // index of this vertex
indices[i] = iv;
i++;
}
我使用它来创建一个索引列表,虽然我不是百分百肯定这是正常的。然后我有一个名为drawVertexArray的函数来获取该信息,并且假设在完成时和/或当另一个函数调用它时绘制对象。
Mesh::drawVertexArray(){
glEnableClientstate(GL_Vertex_Array);
glVertexPointer(3,GL_FLOAT,sizeof(Point3),&pt[0].x);
glDrawElements(GL_TRIANGLES,numIndices,GL_UNSIGNED_BYTE,&indices[0]);
glDisableClientState(GL_VERTEX_ARRAY);
glFlush();
我也尝试过使用glDrawArrays(GL_TRIANGLE,0,numVerts),但这并没有为我打印任何内容。我不知道我是如何将信息输入VertexPointer的,这是问题,还是在我不知道的过度函数的背景中还有另一个问题。