gpt4 book ai didi

opengl - OpenGL 'Bind' 函数背后的概念

转载 作者:行者123 更新时间:2023-12-02 07:26:51 25 4
gpt4 key购买 nike

我正在从this tutorial学习OpenGL 。我的问题是关于一般规范,而不是关于特定功能或主题。当看到如下代码时:

glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

我对在设置缓冲区数据之前和之后调用绑定(bind)函数的实用性感到困惑。由于我对 OpenGL 和计算机图形学缺乏经验,这对我来说似乎是多余的。

手册页说:

glBindBuffer lets you create or use a named buffer object. Calling glBindBuffer with target set to GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER or GL_PIXEL_UNPACK_BUFFER and buffer set to the name of the new buffer object binds the buffer object name to the target. When a buffer object is bound to a target, the previous binding for that target is automatically broken.

将某物“绑定(bind)”到“目标”的概念/用途到底是什么?

最佳答案

opengl 中的命令并不是孤立存在的。他们假设存在一个上下文。一种思考方式是,在后台隐藏着一个 opengl 对象,并且函数是该对象上的方法。

所以当你调用一个函数时,它的作用当然取决于参数,但也取决于 opengl 的内部状态 - 在上下文/对象上。

这对于bind来说非常清楚,它说“将其设置为当前的X”。然后后面的函数会修改“当前 X”(例如,其中 X 可能是缓冲区)。 [更新:]正如您所说,正在设置的东西(对象中的属性或“数据成员”)是绑定(bind)的第一个参数。因此 GL_ARRAY_BUFFER 命名您正在设置的特定事物。

并回答问题的第二部分 - 将其设置为 0 只是清除该值,这样您就不会意外地在其他地方进行计划外的更改。

关于opengl - OpenGL 'Bind' 函数背后的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758884/

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