ios - teapot.h 中的索引是如何排列的? iOS 的 glgravity 示例

标签 ios 3d xcode5 opengl-es-2.0

我是一名 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/

相关文章:

ios - 在 UITabBarControllerDelegate 中获取当前事件的 viewController

ios - 如何在可见的 Scrollview 中获取 Button 位置?

ios - 在 iOS 设备上写入描述符 BLE

ios - 如何确定应用程序是否已启动以进行后台获取

ios - 在 Xcode 中通过 IB 选择自定义字体

algorithm - 计算球体的旋转矢量

OpenGL 将 VBO 保存到文件(Obj 或其他文件)

javascript - 如何使用按钮触发器在javascript中旋转css 3d立方体

ios - Xcode 5 单元测试看到错误的类

ios - iPhone corebluetooth central Manager向外设发送数据