DirectX - 顶点缓存(VertexBuffer)是如何工作的?

5
我现在正在学习DirectX,我读了很多有关VertexBuffer的东西。由于你不能仅仅通过阅读来学习编程,所以我正在使用DX11制作一个小引擎(好吧,我的问题实际上与版本无关)。
据我理解,在VertexBuffer中,我会存储顶点,并且实际上我将其存储在图形卡上。我读到过动态和静态缓冲区。因此,如果我理解正确,则静态缓冲区是用顶点初始化的,而初始化的顶点不会更改。好的,但是我真正需要它的时候是什么时候。我的意思是,在游戏或其他情况下,何时会有恒定的顶点?也许对于一些UI对象..?-但即使这些对象也不总是恒定的..你可以移动它们的2D位置等等..
下一个要点是关于动态顶点缓冲区的,例如:我有一个带有一些顶点的缓冲区,这些顶点被绘制出来。然后我想添加或删除一些顶点。现在怎么办..所以我只需“更新”缓冲区。但是这真的对性能有好处吗?想象一下地形编辑器。您必须更新大量的顶点。
1个回答

7
其实,一直都有常量顶点。例如,静态几何体,你提到的UI对象等等。你对移动物体有些误解,所以才会感到困惑——你不是通过更改顶点来移动物体。相反,你将顶点传递到着色器管道中。在顶点着色器中,你可以对顶点应用任意变换。因此,例如,如果你有一个树木被某种原因移动到世界上(可能是在浮动岛上),而不是更改组成树木的顶点,你要更改应用于顶点的变换。
想象一下地形编辑器
这取决于你的地形编辑器的预期功能,但通常情况下,你也不会更改顶点。也就是说,在编辑高度时,你会写入高度图(大多数情况下是灰度纹理),并在着色器管道中计算变换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接