我正在学习opengl。
我来了一个像drawXXXXXXX这样的函数,其中一个参数是大步......
我不知道使用情况,也不知道步幅的含义。
anyoe可以告诉我吗?
答案 0 :(得分:5)
如果要将更多信息传递给顶点着色器而不仅仅是顶点的位置,可以使用所谓的interwinded数组。例如:
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教程
答案 1 :(得分:2)
Stride允许顶点数组在数组中以固定间隔访问其所需数据。例如,为了仅引用交织数组中的颜色值,以下调用从数组的开头(也可以作为& 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