背景:我刚刚开始。我甚至没有触及Direct3D 11 API,而是在了解管道等等。
通过查看网络上的文档和信息,似乎应用程序正在处理一些计算。那就是,不是简单地将矩阵与GPU相乘,而是通过在 CPU 上运行的数学库来完成计算。我没有任何特定的资源可以指出,虽然我想我可以指向XNA Math Library或二月DX SDK中提供的样本。当您看到mViewProj = mView * mProj;
之类的代码时,将在CPU上计算该投影。或者我错了吗?
如果你正在编写一个程序,你可以在屏幕上有10个立方体,你可以在哪里移动或旋转立方体,以及视点,你会在CPU上做什么计算?我想我会存储单个立方体的几何,然后转换表示实际实例的矩阵。然后我似乎会使用XNA数学库或我选择的另一个来转换模型空间中的每个立方体。然后获取世界空间中的坐标。然后将信息推送到GPU。
这是对CPU的大量计算。我错了吗?
答案 0 :(得分:4)
“我是否根据太少的信息和理解得出结论?”
不像我们所有人那样做坏事,但总而言之:是的。
GPU正在做的事情通常取决于GPU驱动程序和您的访问方法。大多数时候你真的不在乎或不需要知道(除了好奇心和一般理解)。
对于mViewProj = mView * mProj;这很可能发生在CPU上。但它没有太大的负担(最多计算在100个循环中)。真正的诀窍是在“世界”上应用新的视图矩阵。每个顶点都需要或多或少地与阴影,纹理,光照等一起进行转换。如果这项工作将在GPU中完成(如果在CPU上完成,那么事情将会非常快地减速)。
通常,您可以对世界进行高级别更改,可能需要20次CPU绑定计算,GPU会根据更改来处理渲染世界所需的数百万或数十亿次计算。
在10个立方体示例中:您为每个多维数据集提供转换,您创建转换所需的任何数学都是CPU绑定的(有异常)。您还为视图提供了变换,再次创建变换矩阵可能是CPU绑定的。一旦你有了11个新的矩阵,就可以应用于世界。从硬件的角度来看,需要将11个矩阵复制到GPU ......这将非常非常快速地发生...一旦复制CPU完成并且GPU根据新数据重新计算世界,将其渲染到一个缓冲区并在屏幕上显示它。因此,对于10个立方体,CPU绑定计算是微不足道的。
查看XNA项目的一些反射代码,您将看到计算结束和XNA开始的位置(XNA将在GPU中完成所有操作)。