我正在尝试用 openGl 编写一个 obj 查看器。这个程序必须只绘制模型的面线,所以我需要加载:
- 顶点:有时是 3D,有时是 4D;
- faces:索引列表,长度随机;
现在我只加载 obj 文件,每个面有 3 个元素,所以我可以在 GL_TRIANGLE 模式下绘制元素,但是我在某些模型上遇到了一些问题:
http://people.sc.fsu.edu/~jburkardt/data/obj/icosahedron.obj
加载阶段似乎运行良好,我认为问题出在 render() 函数中:
static void render(void)
{
glClearColor( 0.0f, 0.0f, 0.0, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, g_resources.vertex_buffer);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(
3, /* size */
GL_FLOAT, /* type */
3*sizeof(GLfloat), /* stride */
(void*)0 /* array buffer offset */
);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_resources.element_buffer);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glDrawElements(
GL_TRIANGLES, /* mode */
theModel->face.size(), /* count */
GL_UNSIGNED_INT, /* type */
(void*)0 /* element array buffer offset */
);
glDisableClientState(GL_VERTEX_ARRAY);
glutSwapBuffers();
}
我还有一些问题:
- 索引从 1 或 0 开始?
- indeces 枚举是怎么回事?是顺时针样式吗?
- 用超过 3 个 indeces 对面进行三角测量是一个很好的解决方案吗?