我是一名学习OpenGL ES的iOS程序员,可以添加在我的应用程序中显示3D模型的功能。我正在研究GLGravity示例并且一直在使用teapot.h模型。我试图理解这个模型中数据的组织方式:顶点和顶点法线是有意义的(虽然我更习惯于3d网格模型的facet法线)。我没有关注指数。
我期待看到整数的三元组来定义三角形面的定义。我无法弄清楚索引是如何排列在这里的,因为它们看起来像是一组数字。此外,我在那里看到-1,这作为索引没有意义。当然,我也没有遵循索引的行程编码(RLE)版本。
有人可以帮助我。
非常感谢, 甲
答案 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个索引,并且发出了适当的绘制调用。