为什么glDrawElements()需要顶点数和元素数?



根据OpenGL文档,

void glDrawElements(GLenum mode,
GLsizei count,
GLenum type,
const GLvoid * indices);

调用glDrawElements的第二个参数count, "指定要呈现的元素的数量。"我发现这个参数的有效值是顶点的数量而不是你想要渲染的面或元素的数量。也许我误解了"元素"这个词。我认为元素是一种连接性元素,例如你在元素缓冲对象中指定的三角形或四边形。

为什么第二个参数是必要的?我的意思是当顶点缓冲对象被定义时,你已经指定了顶点的数量;在定义元素缓冲对象时,还指定了元素或面的数量。在这个glDrawElements()调用中使用这种看似多余和令人困惑的方式来指定顶点的数量,其基本原理是什么?

我的意思是当顶点缓冲区对象被定义时,你已经指定了顶点的数量

不,你不需要;您可以指定缓冲区对象存储中的字节数。顶点有多大,对象中有多少顶点,完全取决于顶点的格式。此外,你可以(并且应该)在同一个缓冲区中有来自的多个对象的顶点,允许你在不改变顶点缓冲区绑定的情况下呈现多个对象。

当定义元素缓冲区对象时,还指定了元素或面数

见上图。OpenGL只知道字节数,而不是索引数。

相关内容

  • 没有找到相关文章

最新更新