Hello,
I do have problems with the glEdgeFlagPointer, it seams that I do something wrong. My goal is to render meshes in the wireframe-mode with reduced number of edges (glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)). I work with vbo-redering. I just made a small example to demonstrate my goal. The following square is rendered with 2 Triangles. In the wireframe-mode I want to see just the border edges:
My VBO is made like this: column 1, 2 and 3 are used for the normals, clumn 4, 5 and 6 for the vertex. To keep it simple I do not use uv-coordinates for textures:
In my point of view the edge-flag-array should made like this, but this might by my fault.
GLfloat g_pVertex[]=
{
0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,
};
unsigned int g_pTriangleIdx[] =
{
0,1,3,
1,2,3
};
GLboolean g_pEdgeArr[] =
{
1,0,1,
1,1,0
};
GLuint pIds[] = {0, 0, 0};
bool create()
{
...
glGenBuffers(3, pIds);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pIds[0]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, 4*6 * sizeof(GLfloat), g_pVertex, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, pIds[1]),
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 2*3 * sizeof(unsigned int), g_pTriangleIdx, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pIds[2]),
glBufferDataARB(GL_ARRAY_BUFFER_ARB, 2*3 * sizeof(GLboolean), g_pEdgeArr, GL_STATIC_DRAW_ARB);
...
}
void paint()
{
if (!create())
return false;
glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pIds[0]);
glNormalPointer(GL_FLOAT, 6 * sizeof(GLfloat), 0);
char* offset = 0;
offset = (char*)(sizeof(GLfloat) * 3);
glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), offset);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pIds[2]);
glEdgeFlagPointer(0, 0);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, pIds[1]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_EDGE_FLAG_ARRAY);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glDisableClientState(GL_EDGE_FLAG_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, NULL);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, NULL);
}
However, my final rendering looks like this:
Has anyone an idea where I do the mistake?
Thanks a lot!