Android OpenGl 什么是步幅?

Android OpenGl What is a stride?

正在学习opengl

我遇到了一个函数,例如 drawXXXXXXX,其中一个参数是 stride...

我不知道它的用法,也不知道步幅的意思。

有人能告诉我吗?

Stride 允许顶点数组以规则的间隔访问数组中的所需数据。例如,要仅引用 intertwined 数组中的颜色值,以下调用从数组的开头开始(也可以作为 &intertwined[0] 传递)并向前跳转 6 * sizeof(GLfloat) 字节,这是颜色和顶点坐标值的大小。此跳转足以到达下一个顶点的数据开头。

glColorPointer (3, GL_FLOAT, 6 * sizeof(GLfloat), 交织在一起);

您可以点击以下链接----

https://msdn.microsoft.com/en-us/library/windows/desktop/aa473780(v=vs.85).aspx

http://www.glprogramming.com/red/chapter02.html

当您想将更多信息传递给顶点着色器而不仅仅是顶点的位置时,您可以使用所谓的缠绕数组。例如:

struct Information {
    GLfloat position[3];
    GLfloat color[3];
    GLfloat texture[2];
};

因此,此结构的一种可能实例化是:

struct Information vertices[] = { 
   // Positions          // Colors           // Texture Coords
   {{0.5f,  0.5f, 0.0f},   {1.0f, 0.0f, 0.0f},   {1.0f, 1.0f}},
   {{0.5f, -0.5f, 0.0f},   {0.0f, 1.0f, 0.0f},   {1.0f, 0.0f}},
   {{-0.5f, -0.5f, 0.0f},   {0.0f, 0.0f, 1.0f},   {0.0f, 0.0f}},
   {{-0.5f,  0.5f, 0.0f},   {1.0f, 1.0f, 0.0f},   {0.0f, 1.0f}}
};

为了将其正确传递给着色器属性,您需要准确地告知它如何提取位置信息等。这就是 stride 发挥作用的地方。

跨度是您需要跳转以在此数组上开始新索引的字节数。在本例中为 sizeof(struct Information)。下图有帮助

有关详细信息,请查看 learnopengl 教程