我是一名iOS程序员,学习OpenGL ES在我的应用程序中添加显示3D模型的功能。我正在制作GLGravity样本,并一直在玩茶壶.h模型。我试图理解数据在这个模型中是如何组织的:顶点和顶点法线是有意义的(尽管我更习惯3d网格模型的面法线)。我没有跟着指数走。
我期望看到整数三元组来定义三角面的定义。我不知道这些下标是怎么排列的,因为它们看起来就像一个数字数组。而且,我在这里看到了-1,这并不是一个有意义的指标。当然,我也没有遵循运行长度编码(RLE)版本的索引。
有人能帮我一下吗?
很多谢谢,
这些是三角形带,所以索引的解释如下-前三个索引定义了一个三角形,然后每个后续索引添加一个额外的三角形,重用前一个三角形的一个边,顶点排序稍微复杂。
-1
表示条带的结束,不传递给OpenGL。你总是可以通过使用简并三角形来使用单个三角形条绘制任意形状——你通过发明的零表面积三角形将条连接起来,这样就可以为显示贡献零像素——但并不是每个人都这样做。
在Apple的示例中,您将看到他们实际上没有使用teapot_indices
,而是使用new_teapot_indicies
(sic),它将每个条带的顶点计数拉到前面,而不是要求您遍走寻找-1
s。
例如,从new_teapot_indicies
第一行是:
26, 1122, 1243, 1272, 1242, 1273, 1241, 1274, 1240, 1275, 1239, 1276, 1238,
1277, 1205, 1278, 1204, 1279, 1203, 1280, 1202, 1281, 1201, 1282, 1200, 1283,
1199
表示"26个索引组成这个条带;这些索引是1122、1243等"。
与原来的
相比1122, 1243, 1272, 1242, 1273, 1241, 1274, 1240,
1275, 1239, 1276, 1238, 1277, 1205, 1278, 1204,
1279, 1203, 1280, 1202, 1281, 1201, 1282, 1200,
1283, 1199, -1
因此,代码将不得不运行整个数组,直到遇到-1
,然后发现它在这样做时传递了26个索引,并发出适当的draw调用。