DirectX - VertexBuffer如何工作?

时间:2012-11-13 19:26:18

标签: c++ windows directx directx-11

我正在学习DirectX,我读了很多关于VertexBuffer的内容。既然只是通过阅读就无法从编程中学习,那我就用DX11制作了一个小型引擎(我的问题不是真的依赖于版本)

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

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

1 个答案:

答案 0 :(得分:7)

  
    

我的意思是在游戏中或其他什么地方,我什么时候有不变的顶点?

  

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

  
    

想象一下地形编辑器

  

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