Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Opengl es 在OpenGL | ES中,步幅意味着什么_Opengl Es_Stride - Fatal编程技术网

Opengl es 在OpenGL | ES中,步幅意味着什么

Opengl es 在OpenGL | ES中,步幅意味着什么,opengl-es,stride,Opengl Es,Stride,我正在检查glvertexpinter方法的签名,它是 void glVertexPointer(闪烁大小、格伦类型、GLsizei步幅、const GLvoid*指针) 有人能帮我理解第三个参数stride的作用吗 在谷歌上搜索后,我得到了这个定义 从一个元素开始到下一个元素开始的字节数。如果你跨过一个零,这意味着他们挤得很紧。如果你有一个浮动数组,其中包含像这样的顶点,x1,y1,z1,x2,y2,z2。。。依此类推,您可以将步幅设置为0(紧凑排列)或12(从顶点一开始到顶点二开始的3个浮点

我正在检查
glvertexpinter
方法的签名,它是

void glVertexPointer(闪烁大小、格伦类型、GLsizei步幅、const GLvoid*指针)

有人能帮我理解第三个参数
stride
的作用吗

在谷歌上搜索后,我得到了这个定义

从一个元素开始到下一个元素开始的字节数。如果你跨过一个零,这意味着他们挤得很紧。如果你有一个浮动数组,其中包含像这样的顶点,x1,y1,z1,x2,y2,z2。。。依此类推,您可以将步幅设置为0(紧凑排列)或12(从顶点一开始到顶点二开始的3个浮点*4个字节)。

我无法理解这意味着什么?如果有人用一个例子来解释它,那将非常有帮助


谢谢。

简单的情况是,阵列仅包含顶点坐标数据。假设我们只有两个坐标,因此有6个浮点数:

{x1,y1,z1, x2,y2,y2}
指针(第四个参数)指向数组中第一个顶点的起点(即零,指向x1)。步幅应该是12,这意味着要从一个顶点移动到下一个顶点,OpenGL需要移动12个字节(因为每个顶点的3个坐标中的每一个都占用4个字节)。通过移动12个字节,我们得到了x2,第二个顶点的开始

这是一个紧密压缩的示例,因为数组只包含一种类型的数据-您可以将步长设置为零,OpenGL将愉快地通过数组一次一个浮点。但是,阵列不必仅包含坐标数据-也可以将法线和颜色数据存储在阵列中的坐标旁边:

{x1,y1,z1,nx1,ny1,nz1,r1,g1,b1,a1, x2,y2,z2,nx2,ny2,nz2,r2,g2,b2,a2}
这不再是紧密的压缩-坐标数据在数组中不再是连续的(它们由法线值和颜色值分隔)。在这种情况下,步幅为40。要从一个顶点开始移动到下一个顶点,OpenGL需要移动40个字节:(3个坐标数据浮点+3个普通数据浮点+4个颜色数据浮点)x每个浮点4个字节