【发布时间】:2015-07-13 01:22:02
【问题描述】:
我正在遵循在线教程来帮助我创建我的第一个游戏,到目前为止,我了解 Direct3D 11 必须向我提出的每一个概念。
但是有一个概念我似乎还不能完全掌握;深度/模板缓冲区。
我了解深度/模板缓冲区用于“比较”游戏中不同对象的像素深度。如果两个对象相互重叠,则像素深度较小的对象将显示在更靠近相机的位置。然后通过填写 D3D11_TEXTURE2D_DESC.. 来定义深度/模板缓冲区。
但我的问题是;如果我填写了 D3D11_TEXTURE2D_DESC 结构,那么我是在告诉 directXHOW 在游戏中比较不同对象的像素吗?
如果您不理解我的问题,请尽量简单地解释深度/模板缓冲区的概念。另外请尝试通过填写 D3D11_TEXTURE2D_DESC 结构来解释我到底定义了什么
谢谢。
【问题讨论】:
-
从文档看,
D3D11_TEXTURE2D_DESC是用来描述纹理的内容和布局的。因为它告诉 Direct3D 如何读取纹理。宽度、高度、颜色通道、每个颜色通道有多少位,以及它们的顺序(RGBA、BGRA、RGB 无 A、BGR 无 A,存储在浮点数中?可能是无符号整数?等) -
我现在正在自学 OpenGL,所以我可能错了。但我的理解是深度缓冲区有助于确定最终图像中将显示哪个像素。如果您有多边形重叠,并且首先绘制后面的多边形,那么当其他多边形绘制时,其深度值将与前一个多边形的深度值进行比较。如果它在顶部,则该像素将被写入颜色缓冲区。否则结果会被丢弃
-
所以不,如果您填写描述结构,您就是在告诉 Direct3D 如何读取和存储结果(多少位,什么数据类型)。现在怎么比较。我不知道 D3D 的等价物是什么,但在 OpenGL 中,
glDepthFunc()可以改变 OpenGL 比较深度值的方式。您可以将其设置为GL_LESS、GL_GREATER等。这是 MS 关于深度模板缓冲区的文档。似乎他们使用D3D11_COMPARISON_FUNC枚举:msdn.microsoft.com/en-us/library/windows/desktop/… 我认为这可能相当于glDepthFunc() -
我仍然不明白为什么我需要填写 D3D11_TEXTURE2D_DESC 结构来创建深度/模板缓冲区。这个结构与深度/模板缓冲区有什么关系?例如,如果我将 300 分配给 Width 成员,将 300 分配给 height 成员,那么我是在告诉 direct3D “比较”屏幕高度和宽度中所有 300 个像素的深度吗?
-
您需要填写它,因为深度/模板缓冲区本质上是纹理。像素/颜色数据数组。一个图像。通过填写它,您可以指定显卡需要为该缓冲区分配多少空间,以及深度/像素值占用多少位。 GPU 需要知道为了知道位置 (x, y) 的像素在内存中的位置。它指定缓冲区的布局
标签: c++ direct3d direct3d11