【发布时间】:2018-01-01 09:57:51
【问题描述】:
This tutorial on shadow-mapping in OpenGL 简要提到了使用深度缓冲区和深度纹理之间的区别(编辑:存储每个像素的深度信息以进行深度测试或其他目的,例如阴影映射),并声明:
深度纹理。比深度缓冲区慢,但您可以稍后在着色器中对其进行采样
但是,这让我想知道为什么会这样。毕竟,两者似乎都不过是一个包含一些数据的二维数组,并且微软关于图形的注释中的定义以非常相似的术语定义它们(这些注释在评论中指出,不是在 OpenGL 上,而是另一个图形引擎,但深度缓冲区/纹理的目的似乎非常相似——我还没有找到对 OpenGL 深度缓冲区/纹理的两个相同的描述——为此我决定保留这些文章。如果有人有描述 OpenGL 中深度缓冲区和深度纹理的文章的链接,欢迎您将其发布在 cmets 中)
A depth buffer contains per-pixel floating-point data for the z depth of each pixel rendered.
和
当然,这两种方法之间存在一些差异——值得注意的是,深度纹理可以稍后采样,这与深度缓冲区不同。
尽管存在这些差异,但我看不出为什么深度缓冲区应该比深度纹理更快使用,因此我的问题是:为什么这两种存储相同数据的方法不能同样快(编辑:使用时用于存储深度数据以进行深度测试)。
【问题讨论】:
-
请注意,这两篇文章都指的是 XNA,而不是 OpenGL。 XNA 的最后一个版本于 2011 年发布。XNA 的功能与 OpenGL 之间存在显着差异。例如,完全可以使用
GL_DEPTH_STENCIL格式将模板信息存储在纹理中。 -
我认为,但我可能弄错了,深度渲染缓冲区允许进行一些额外的优化,例如深度纹理无法支持的分层 Z 缓冲区。
标签: opengl depth-buffer