什么是计算机图形学中的缓冲区

46qrfjad  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(118)

在计算机图形学中,给我一个简短、清晰的缓冲区定义,然后给我一个简短的缓冲区描述。

互联网上的大多数定义都是“帧缓冲区”,但在OpenGL中,计算机图形学中还有其他类型的缓冲区。

q3qa4bjr

q3qa4bjr1#

有人能给我一个简短、清晰的计算机图形学中缓冲区的定义吗

一个都没有。“缓冲区”是一个过载的术语,在不同的上下文中可能有不同的含义。

“帧缓冲区”(一个词)基本上与许多其他类型的“缓冲区”没有关系。在OpenGL中,“帧缓冲区”是一个对象,它附加了您可以渲染的图像。

作为一个概念,“缓冲”通常意味着使用多个通常大小相同的存储区域,以防止您在某个区域被其他进程占用时写入该区域。OpenGL中的默认帧缓冲区可以是双缓冲的。这意味着有一个正面图像和一个背面图像。渲染到背景图像,然后交换图像以渲染下一帧。当您交换它们时,背面图像变为正面图像,这意味着它现在是可见的。然后渲染到不再可见的旧正面图像,现在是背面图像。这可以防止看到不完整的渲染产品,因为您永远不会写入可见的图像。

您将注意到,虽然“帧缓冲区”可能涉及“缓冲”,但“缓冲”的概念可以用于不是“帧缓冲区”的内容。这两者是正交的,不相关的。

“缓冲区”最宽泛的定义可能是“一些用于存储大容量数据的内存”。但这也包括“纹理”,这在大多数API中不被认为是“缓冲区”。

OpenGL(和Vulkan)作为API有更严格的定义。“buffer object”是一个连续的、未格式化的内存区域,可由各种GPU进程读取或写入。这与“texture”对象不同,“texture”对象具有实现内部的特定格式。因为您不知道纹理的格式,所以不允许直接操作纹理存储的字节。您上传到它或从中读取的任何字节都是通过API完成的,该API允许实现处理它们。

对于缓冲区对象,您可以将任意字节加载到缓冲区对象的存储中,而无需API(直接)知道这些字节的含义。您甚至可以Map存储并像指向CPU内存的常规指针一样访问它。

8mmmxcuj

8mmmxcuj2#

缓冲区”,您可以简单地将其视为一个内存块。但你必须在这里说明上下文,因为它意味着很多事情。

例如在OpenGL VBO概念中。这意味着顶点缓冲区对象,我们使用它来存储顶点数据。像这样,我们可以做很多事情,我们可以在缓冲区中存储索引,纹理等,

而对于您提到的FrameBuffer,这是一个完全不同的主题。在OpenGL或Vulkan中,除了默认的帧缓冲区之外,我们还可以创建自定义帧缓冲区,称为帧缓冲区对象(FBO)。我们可以绑定FBO并在其上绘制东西&通过添加纹理作为附件,我们可以将我们在FBO上绘制的任何内容更新为该纹理。

所以缓冲区在这里有很多含义,

相关问题