【问题标题】:What is stride in glVertexPointer, glTexCoordPointer in VBO什么是glVertexPointer中的步幅,VBO中的glTexCoordPointer
【发布时间】:2013-03-10 11:50:23
【问题描述】:

您好,我在使用 VBO 绘图时遇到问题。所以我问了一个问题here。我找不到我的问题的答案。但是通过讨论那里给出的一个答案,我现在有另一个关于 VBO 进展的问题。我对它是什么以及做什么感到困惑。

here我发现有人回答了

如果您将所有顶点数据放在一个数组中(数组:读作 malloc''ed 指针),另一个数组中的所有法线等。然后你的 步幅为 0。例如,如果顶点、法线等是这样存储的 :

[顶点0][顶点1][顶点2]...

[正常0][正常1][正常2]...

[texcoord0][texcoord1][texcoord2]...

如果你的顶点、法线等是这样包装的:

[vertex0][normal0][texcoord0][vertex1][normal1][texcoord1][vertex2][normal2][texcoord2]...

那么你应该设置一个非空步幅,它对应于偏移量 需要从一个元素切换到下一个元素。 (这个步幅被计算在内 顺便说一句)

从那个解释中,我认为步幅实际上是指缓冲区中一个顶点的结束与另一个顶点的开始之间的距离。在第一种情况下,它的值为 0,因为所有顶点都是连续存储的。纹理也是如此。但后来我在同一个线程中阅读了另一个关于跨步定义的答案。

关于 VBO 步幅往往有些混乱,主要是 因为它对 0 的特殊意义。

在这种情况下,“步幅”是指一个起点之间的距离 内存中的值,以及内存中下一个值的开始。这是 不是一个结束和下一个开始之间的距离。 因此,在作为结构数组的 VBO 中,每个 该结构的元素将是整个结构的大小。 请记住,结构填充会影响这一点。

这与另一个答案所说的相反。或者我对第一个答案的含义有误?谁能帮我解决这个问题。如果有人能举例回答,我将不胜感激。我在这个尚未解决的问题的开头给出了我实现 VBO 的链接。谢谢。

【问题讨论】:

    标签: c++ opengl-es vbo blackberry-10 stride


    【解决方案1】:

    第一个答案是试图说的是两个元素之间的“步幅”是一个元素的开头和下一个元素的开头之间的字节偏移量。
    然而,如果您传递的元素是连续的(即它们之间没有空格),您可以为 stride 参数传递 0。

    我会说在这种情况下声称“步幅为 0”是错误的 - 步幅 sizeof(element),但值 0 得到特殊处理并被认为是 sizeof(element) .
    这样做很可能是为了让可怜的程序员不必在常见情况下使用两个(容易出错的)sizeof 参数,因为它们是相同的。

    【讨论】:

    • offset 这个词是什么意思?我看到它在很多地方被多次使用。但没有人给出它的定义。谢谢。
    • 如果我这样存储“顶点,纹理,顶点,纹理”,步幅值是多少。 glVertexPointerglTexCordPointer 中的步幅值是多少?
    • @kalkin Offset 的意思和距离差不多。
    • @kalkin 在这种特殊情况下,步幅为sizeof(vertex) + sizeof(texture),因为这是从一个顶点(或纹理)的起点到下一个顶点的距离。
    • 非常感谢您的解释。现在清楚了:) 你能看看我原来的问题吗?这让我疯狂。 stackoverflow.com/questions/15310777/…
    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 2015-01-17
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多