如何安排teapot.h中的指数?适用于ios的glgravity样本

时间:2014-03-20 20:19:40

标签: ios 3d xcode5 opengl-es-2.0

我是一名学习OpenGL ES的iOS程序员,可以添加在我的应用程序中显示3D模型的功能。我正在研究GLGravity示例并且一直在使用teapot.h模型。我试图理解这个模型中数据的组织方式:顶点和顶点法线是有意义的(虽然我更习惯于3d网格模型的facet法线)。我没有关注指数。

我期待看到整数的三元组来定义三角形面的定义。我无法弄清楚索引是如何排列在这里的,因为它们看起来像是一组数字。此外,我在那里看到-1,这作为索引没有意义。当然,我也没有遵循索引的行程编码(RLE)版本。

有人可以帮助我。

非常感谢, 甲

1 个答案:

答案 0 :(得分:1)

这些是三角形条带,因此索引被解释为described here - 前三个索引定义一个三角形,然后每个后续索引添加一个额外的三角形,重复使用前一个三角形的一个边缘,顶点排序有一些轻微的复杂性

-1表示条带的结束,不会传递给OpenGL。您总是可以通过使用退化三角形使用单个三角形条绘制任意形状 - 您可以通过具有零表面区域的发明三角形链接条带,然后为显示器提供零像素 - 但不是每个人都这样做。

在Apple的示例中,您会看到他们实际上并没有使用teapot_indices,更喜欢new_teapot_indicies(原文如此),它将每个条带的顶点数量拉到前面而不是要求您走过寻找-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个索引,并且发出了适当的绘制调用。