DirectX11 动态缓存 & 水波演示Demo
1. 动态缓存是什么?
到目前为止,我们一直使用的是静态缓存(static buffer),它的内容是在初始化时固定下来的。相比之下,动态缓存(dynamic buffer)的内容可以在每一帧中进行修改。当实现一些动画效果时,我们通常使用动态缓存区。例如,我们要模拟一个水波效果,并通过函数f(x ,z ,t)来描述水波方程,计算当时间为t时,xz平面上的每个点的高度。在这一情景中,我们必须使用“山峰与河谷”中的那种三角形网格,将每个网格点代入f(x, z , t)函数得到相应的水波高度。由于该函数依赖于时间t(即,水面会随着时间而变化),我们必须在很短的时间内(比如1/30秒)重新计算这些网格点,以得到较为平滑的动画。所以,我们必须使用动态顶点缓存区来实时更新三角形网格顶点的高度。
2. 如何创建动态缓存?
前面提到,为了获得一个动态缓存区,我们必须在创建缓存区时将Usage标志值指定为D3D11_USAGE_DYNAMIC;同时,由于我们要向缓存区写入数据,所以必须将CPU访问标志值指定为D3D11_CPU_ACCESS_WRITE。
D3D11_BUFFER_DESC vbd