我是 directx 的新手,但令我惊讶的是,我看到的大多数示例中,世界矩阵和视图矩阵都是作为顶点着色器的一部分相乘,而不是与 CPU 相乘并将结果传递给着色器。
对于刚性对象,这意味着您为对象的每个顶点将相同的两个矩阵相乘一次。我知道 GPU 可以在多个顶点上并行执行此操作(实际上不知道有多少个顶点),但这不是效率很低,还是我只是错过了一些东西?我还是个新手,一无所知。
一般来说,您希望在 CPU 上执行此操作。然而,DirectX 9 有“预着色器 http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series3/Preshaders.php”,这意味着该乘法将预先在 CPU 上完成。这已在较新的 API 中删除,但它可能与您正在查看的示例非常相关。
此外,与内存访问相比,现代 GPU 的 ALU 操作速度非常快。拥有一个适度复杂的顶点着色器(可能带有纹理获取)意味着进行矩阵乘法所需的数学是免费的,因此作者可能甚至没有打扰。
无论如何,最佳实践是预乘 CPU 上的所有常量。这同样适用于将工作从像素着色器移动到顶点着色器(如果某个东西在三角形上是恒定的,则不要按像素计算它。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)