我正在尝试使用 OpenGL 对 WRL (VRML) 文件中描述的对象进行建模。
我并不真正关心解析文件,我认为这部分会相当简单。在这个阶段,我只是尝试在顶点数组和索引数组中进行硬编码,以便我可以很好地理解它是如何工作的,以便我可以概括任何 WRL 输入文件。
我首先尝试一个基本的盒子(矩形棱镜)模型。我目前有这个顶点数组:
GLfloat vertices[] = {
-0.200000, -0.025000, -0.050000,
-0.200000, -0.025000, 0.050000,
-0.200000, 0.025000, -0.050000,
-0.200000, 0.025000, 0.050000,
0.200000, -0.025000, -0.050000,
0.200000, -0.025000, 0.050000,
0.200000, 0.025000, -0.050000,
0.200000, 0.025000, 0.050000
};
这个索引数组:
GLubyte indices[] = {
7, 3, 5, -1, 5, 3, 1, -1,
6, 2, 7, -1, 7, 2, 3, -1,
4, 0, 6, -1, 6, 0, 2, -1,
5, 1, 4, -1, 4, 1, 0, -1,
2, 0, 3, -1, 3, 0, 1, -1,
4, 6, 5, -1, 5, 6, 7, -1
};
它直接来自 WRL 文件Coordinate3 {point []}
和IndexedFaceSet {coordIndex []}
.
然后我通过调用启用顶点数组功能:
glEnableClientState(GL_VERTEX_ARRAY);
并设置 glVertexPointer:
glVertexPointer(3, GL_FLOAT, 0, vertices);
最后我使用 glDrawElements 函数来绘制盒子:
glDrawElements(GL_POLYGON, 24, GL_UNSIGNED_BYTE, indices);
然后停用顶点数组功能:
glDisableClientState(GL_VERTEX_ARRAY);
因此,在此之后,我希望绘制一个框,当我使用glDrawElements(GL_POINTS, 24, GL_UNSIGNED_BYTE, indices);
它时,它会显示 8 个顶点,如果正确的顶点与线连接,将代表预期的框(除了中间有一个点,但是当我使用 26 作为计数参数时,中间的点就会消失)
但是,当我在 glDrawElements 的第一个参数中使用 GL_POLYGON 或 GL_LINE_LOOP 时,我得到了垃圾。8 个顶点显然在那里,但它们以非常奇怪的方式连接起来。
我现在很困惑,我什至不确定我这样做是否正确。也许有人至少可以让我朝着正确的方向前进?