DirectX – VertexBuffer如何工作?

我现在正在学习DirectX,我读了很多VertexBuffer。 既然你不能通过阅读来学习编程,我正在用DX11制作一个小型引擎(嗯,我的问题并不是真的依赖于版本)

就我所了解的VertexBuffer而言,我存储了Vertices,实际上我将它存储在Graphic卡上。 那么我读了关于dynamic和静态缓冲区。 所以,如果我理解正确,一个静态缓冲区初始化与顶点和初始化的顶点不会改变。 好吧,但是什么时候我真的需要它。 我的意思是在一个游戏或其他任何东西,我什么时候有恒定的顶点? 也许对于一些UI对象..? – 但即使这些都不是每时每刻..你可以移动他们的2D位置…等等。

下一点是关于dynamic顶点缓冲区,例如:我有一个带有一些顶点的缓冲区,这些顶点被绘制。 然后我想添加或删除一些顶点。 现在什么..所以我只是“更新”缓冲区。 但这真的是对的,有益于performance? 想象一下地形编辑器。 你必须更新大量的顶点。

我的意思是在一个游戏或其他任何东西,我什么时候有恒定的顶点?

所有的时间实际上。 例如,静态几何,你提到的用户界面对象等等。你对移动对象有一些误解,因此混乱 – 你不能通过改变它们的顶点来移动对象。 相反,你会把你的顶点通过着色器管道。 在顶点着色器中,可以对顶点应用任意变换。 所以,举个例子,如果你有一棵由于某种原因在世界各地移动的树(也许它是在一个浮岛上),而不是改变组成树的顶点,你改变了应用到顶点的变换。

想象一下地形编辑器

这取决于你的地形编辑器应该做什么,但通常你不会在这里改变顶点。 也就是说,当编辑高度,而不是上下移动顶点时,您会写入高度图(大部分时间是灰度纹理),然后再在着色器管线中计算GPU上的变换。