我现在正在学习DirectX,我读了很多有关VertexBuffer的文章。因为您不能仅通过阅读来学习编程,所以我正在用DX11做一个小型引擎(好吧,我的问题不是真的取决于版本)

据我了解,我在VertexBuffer中存储顶点,实际上我将其存储在图形卡上。好吧,我读了有关动态和静态缓冲区的信息。因此,如果我正确理解,将使用顶点初始化静态缓冲区,并且初始化的顶点不会更改。好的,但是我什么时候真正需要它。我的意思是在游戏中或什么时候,什么时候我有恒定的顶点?也许一些UI对象..? -但即使这些并非每次都保持不变。您可以移动其2D位置...等。

下一点是关于动态顶点缓冲区的,例如:我有一个带有一些顶点的Buffer,这些顶点被绘制。然后,我想添加或删除一些顶点。
现在怎么办..因此,我将简单地“更新”缓冲区。但是,这真的正确并对性能有好处吗?想象一下地形编辑器。在那里,您必须更新大量的顶点。

最佳答案



一直都在。例如,静态几何图形,您提到的UI对象等。在移动对象方面,您可能会有一些误解,因此会产生混淆-您不能通过更改对象的顶点来移动对象。取而代之的是,将顶点通过着色器管线。在顶点着色器中,可以将任意变换应用于顶点。因此,例如,如果您有一棵因某种原因在世界范围内移动的树(也许它在浮岛上或某物上),而​​不是更改构成树的顶点,则更改应用于顶点的变换。



这取决于您的地形编辑器应该执行的操作,但是通常您不会再次在此处更改顶点。 IE。当编辑高度时,而不是上下移动顶点,您将写入高度图(大多数情况下是灰度纹理),然后再次在着色器管道中的GPU上计算变换。

关于c++ - DirectX-VertexBuffer如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13367337/

10-12 14:56