Android OpenGl有什么跨度?

时间:2015-02-24 05:58:00

标签: android graphics opengl-es

我正在学习opengl。

我来了一个像drawXXXXXXX这样的函数,其中一个参数是大步......

我不知道使用情况,也不知道步幅的含义。

anyoe可以告诉我吗?

2 个答案:

答案 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)。下面的图片有帮助

enter image description here

有关更多信息,请查看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

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