C++ DirectX-VertexBuffer是如何工作的?

C++ DirectX-VertexBuffer是如何工作的?,c++,windows,directx,directx-11,C++,Windows,Directx,Directx 11,我现在正在学习DirectX,我读了很多关于VertexBuffer的书。因为你不能仅仅通过阅读来学习编程,所以我用DX11制作了一个小型引擎(我的问题并不真正依赖于版本) 据我所知,在VertexBuffer中我存储顶点,实际上我将其存储在图形卡上。我读过关于动态和静态缓冲区的书。如果我理解正确,静态缓冲区是用顶点初始化的,初始化的顶点不会改变。好吧,但我什么时候真的需要它。我的意思是在游戏中,什么时候我有常数顶点?可能对于某些UI对象…?-但即使是这些也不是每次都是恒定的。。你可以移动他们的

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

据我所知,在VertexBuffer中我存储顶点,实际上我将其存储在图形卡上。我读过关于动态和静态缓冲区的书。如果我理解正确,静态缓冲区是用顶点初始化的,初始化的顶点不会改变。好吧,但我什么时候真的需要它。我的意思是在游戏中,什么时候我有常数顶点?可能对于某些UI对象…?-但即使是这些也不是每次都是恒定的。。你可以移动他们的二维位置。。。等等

下一点是关于动态顶点缓冲区,例如:我有一个缓冲区,其中有一些顶点,这些顶点是绘制的。然后我想添加或删除一些顶点。 现在怎么办。。因此,我只需“更新”缓冲区。但这真的对性能有好处吗?想象一个地形编辑器。在那里你必须更新成吨的顶点

我的意思是在游戏中,什么时候我有常数顶点

实际上一直都是这样。例如,静态几何体、您提到的UI对象等。您对移动对象有一点误解,因此会产生混淆-您不会通过更改对象的顶点来移动对象。相反,您将通过着色器管道放置顶点。在顶点着色器中,可以对顶点应用任意变换。因此,例如,如果有一棵树由于某种原因(可能在浮岛上或其他地方)在世界各地移动,而不是更改组成树的顶点,则可以更改应用于顶点的变换

想象一个地形编辑器

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