gpt4 book ai didi

opengl - glDrawArrays 如何知道要绘制什么?

转载 作者:行者123 更新时间:2023-12-01 20:26:05 30 4
gpt4 key购买 nike

我正在关注一些初学者 OpenGL 教程,并且对这段代码有点困惑:

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); //Bind GL_ARRAY_BUFFER to our handle
glEnableVertexAttribArray(0); //?
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); //Information about the array, 3 points for each vertex, using the float type, don't normalize, no stepping, and an offset of 0. I don't know what the first parameter does however, and how does this function know which array to deal with (does it always assume we're talking about GL_ARRAY_BUFFER?

glDrawArrays(GL_POINTS, 0, 1); //Draw the vertices, once again how does this know which vertices to draw? (Does it always use the ones in GL_ARRAY_BUFFER)

glDisableVertexAttribArray(0); //?
glBindBuffer(GL_ARRAY_BUFFER, 0); //Unbind

我不明白glDrawArrays如何知道要绘制哪些顶点,以及与glEnableVertexAttribArray相关的所有内容是什么。有人可以阐明一下情况吗?

最佳答案

glBindBuffer的调用告诉OpenGL在需要GL_ARRAY_BUFFER时使用vertexBufferObject

glEnableVertexAttribArray表示您希望OpenGL使用顶点属性数组;如果没有此调用,您提供的数据将被忽略。

glVertexAttribPointer,正如您所说,告诉 OpenGL 如何处理提供的数组数据,因为 OpenGL 本身并不知道该数据将采用什么格式。

glDrawArrays 使用上述所有数据来绘制点。

请记住,OpenGL 是一个大型状态机。大多数对 OpenGL 函数的调用都会修改您无法直接访问的全局状态。这就是代码以 glDisableVertexAttribArrayglBindBuffer(..., 0) 结尾的原因:使用完后必须将全局状态放回原处。

关于opengl - glDrawArrays 如何知道要绘制什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102180/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com