茶壶里的指数是怎样排列的?ios的Glgravity示例



我是一名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调用。

最新更新