OpenGL ES编程指南讨论了应避免错位的顶点数据,并给出了将数据与4字节块对齐的示例。
然而,在我发现的大多数演示材料和教程中,我没有看到有人这样做。以下示例来自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}},
你怎么会这样做?在v和n中添加一个虚拟0.0,向t?
添加其中的两个我的猜测是,如果你只是每个应用程序加载一次顶点数据,那么无关紧要,但如果你的绑定和重新绑定到每个渲染帧上的不同数组,那就很重要了。我的计划是将我的所有阵列组合成一个,但我很好奇。
答案 0 :(得分:2)
一般来说,一个顶点由floats
组成,它们将被对齐,所以你不需要过于关注它。实际上很多书都使用普通的struct
来保存顶点数据,由于填充问题,这些数据不能保证是连续的,但如果你只有浮点数,那很好,因为你不太可能有填充。当然,有些人(包括我自己)更喜欢使用C ++中的STL vector
,但是如果你在iOS上,你可以使用C ++,你可能使用Objective-C,因此非结构方式的连续性会涉及到正常的C数组,使用起来不是那么有趣。
如果您创建自定义结构以保存顶点数据以及可绘制对象的其他数据,并且使用short
或其他类型,则可能会发现填充成为问题。但是,如果你只坚持使用float
s,那么你会很好,因为大多数OpenGL教育资源都会这样做。