我是一名 iOS 程序员,正在学习 OpenGL ES 以便在我的应用中添加显示 3D 模型的功能。我正在研究 GLGravity 示例,并且一直在玩 teapot.h 模型。我试图了解数据在此模型中的组织方式:顶点和顶点法线是有意义的(尽管我更习惯于 3d 网格模型的小平面法线)。我没有关注指数。
我期待看到整数的三元组来定义什么定义了三角形面。我无法弄清楚索引在这里是如何排列的,因为它们看起来就像一组数字。另外,我在那里看到 -1 并且作为索引没有意义。当然,我也没有遵循游程编码 (RLE) 版本的索引。
谁能帮我解决这个问题。
非常感谢, 一个
最佳答案
那些是三角形带,因此索引被解释为 described here — 前三个索引定义一个三角形,然后每个后续索引都添加一个额外的三角形,重用前一个三角形的一条边,但在顶点排序方面略有复杂。
-1
表示 strip 的结尾,不会传递给 OpenGL。您始终可以通过使用退化三角形使用单个三角形带绘制任意形状 - 您通过发明的具有零表面积的三角形连接带,然后为显示器贡献零像素 - 但不是每个人都这样做。
在 Apple 的示例中,您会看到他们实际上并没有使用 teapot_indices
,而是更喜欢 new_teapot_indicies
(原文如此),它将每个 strip 的顶点数拉到前面,而不是而不是要求您遍历寻找 -1
。
例如来自 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 个索引组成了这个 strip ;这些索引是 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 个索引,并发出适当的绘图调用。
关于ios - teapot.h 中的索引是如何排列的? iOS 的 glgravity 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22544170/