Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS中opengl顶点数据的对齐有多重要_Iphone_Ios_Ipad_3d_Opengl Es 2.0 - Fatal编程技术网

Iphone iOS中opengl顶点数据的对齐有多重要

Iphone iOS中opengl顶点数据的对齐有多重要,iphone,ios,ipad,3d,opengl-es-2.0,Iphone,Ios,Ipad,3d,Opengl Es 2.0,OpenGL ES编程指南讨论了应避免未对齐的顶点数据,并给出了将数据对齐到4字节块的示例 然而,在我在网上找到的大多数演示材料和教程中,我没有看到有人这样做。以下示例来自71平方米的演示项目: static const SSTexturedVertexData3D EnemyFighterVertexData[] = { {/*v:*/{1.987003, -0.692074, -1.720503}, /*n:*/{0.946379, -0.165685, -0.277261},

OpenGL ES编程指南讨论了应避免未对齐的顶点数据,并给出了将数据对齐到4字节块的示例

然而,在我在网上找到的大多数演示材料和教程中,我没有看到有人这样做。以下示例来自71平方米的演示项目:

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


我的猜测是,如果每个应用程序只加载一次顶点数据,这不会有多大影响,但如果绑定并重新绑定到每个渲染帧上的不同阵列,则会有多大影响。我的计划是将所有数组合并成一个数组,但我很好奇。

一般来说,顶点是由将要对齐的
浮动组成的,所以你不必太在意。事实上,很多书都使用普通的
struct
s来保存顶点数据,由于填充问题,这些数据不能保证是连续的,但是如果所有的数据都是浮点数,那也没关系,因为不太可能有填充。当然,有些人(包括我自己)喜欢使用C++中的STL <代码>向量< />,但是如果你在iOS上,而你可以使用C++,你可能使用Objto-C,因此非结构的连接将涉及到正常的C数组,这些C数组工作起来不太有趣。
如果创建自定义结构来保存顶点数据以及可绘制对象的其他数据,并使用
short
s或其他类型,则可能会发现填充成为一个问题。但是如果你只使用
float
s,你会很好,而且你会有很好的同伴,因为OpenGL上的大多数教育资源都是这样做的。

你确定上面的内容没有与4字节的边界对齐吗?如果您显示的代码使用glfloat,则这些是32位(4字节)数据类型,因此无论有多少个数据类型,它们始终与4字节边界对齐。该指南指的是空头和其他数据类型。我想知道。谢谢你应该把它作为一个答案,这样我就可以选中它。我可以,但它没有回答更基本的问题,即顶点数据的字节对齐对性能有多重要。这可能需要一些基准来充分说明。我是iOS,但我避免在任何opengl中使用objective c结构。我通常使用“static const GLfloat Vertex[]”,然后将其加载到VBO中。奇怪的是,对于2d精灵,我实际上使用定制的excel文档来创建所有顶点数据。对于3d,我导入obj文件并将其保存为二进制文件,以便在游戏中快速加载。我愿意为你的努力打勾。Brad Larson在对我的问题的评论中的观点是,如果没有测试,它是不可回答的。可能是一个正确的观点。另一个注释。。我讨厌stackoverflow,你想回答一个问题,然后搜索。。然后精心设计你的答案,直到你意识到这个问题已经有一两年了。所以很明显,我用的答案是Brad的,我已经在4字节的范围内了。。。一年前。:)@出于好奇,您在iOS中使用什么技术导入obj,然后序列化为二进制?您是利用GLKit或其他库进行转换,还是自己转换OBJ文本数据?那么你用什么方法创建二进制文件呢?我根本不用glkit。我写了我自己的引擎。这里很难解释,但如果你给badweasel.com的michael发电子邮件,我会告诉你怎么做,然后把项目文件发给你。这真是个骗局。