OpenGL ES 编程指南讨论了应该避免未对齐的顶点数据,并给出了将数据对齐到 4 字节块的示例。
OpenGL ES 编程指南 http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html#//apple_ref/doc/uid/TP40008793-CH107-SW1
然而,在我在网上找到的大多数演示材料和教程中,我没有看到有人这样做。下面的示例来自 71 Squared 上的演示项目:
static const SSTexturedVertexData3D EnemyFighterVertexData[] = {
{/*v:*/{1.987003, -0.692074, -1.720503}, /*n:*/{0.946379, -0.165685, -0.277261}, /*t:*/{0.972816, 0.024320}},
无论如何你会怎么做呢?将虚拟 0.0 添加到 v 和 n,并将其中的 2 添加到 t?
我的猜测是,如果每个应用程序只加载一次顶点数据,那并不重要,但如果您在每个渲染帧上绑定和重新绑定到不同的数组,那就很重要了。我的计划是无论如何将所有阵列合并为一个,但我很好奇。
一般一个顶点是由floats
它们将保持一致,因此您无需太担心这一点。其实很多书都用普通的struct
s 来保存顶点数据,由于填充问题,不能保证这些数据是连续的,但如果你拥有的只是浮点数,那也没关系,因为你不太可能有填充。当然,有些人(包括我自己)更喜欢使用STLvector
来自 C++,但如果你在 iOS 上,虽然你可以使用 C++,但你可能正在使用 Objective-C,因此非结构方式的连续性将涉及普通的 C 数组,而使用起来并不那么有趣。
如果您创建自定义结构来保存可绘制对象的顶点数据以及其他数据,并且您使用short
s 或其他类型,您可能会发现填充成为一个问题。但如果你只坚持float
你会没事的,而且你会有很好的伙伴,因为大多数关于 OpenGL 的教育资源都是这样做的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)