【问题标题】:DirectX world view matrix multiplications - GPU or CPU the placeDirectX 世界视图矩阵乘法 - GPU 或 CPU 的地方
【发布时间】:2011-06-16 20:15:11
【问题描述】:

我是 Directx 的新手,但令我感到惊讶的是,我看到的大多数示例世界矩阵和视图矩阵都作为顶点着色器的一部分相乘,而不是与 CPU 相乘并将结果传递给着色器。

对于刚性对象,这意味着您将相同的两个矩阵对对象的每个顶点相乘一次。我知道 GPU 可以在多个顶点上并行执行此操作(实际上不知道有多少),但这不是效率低下,还是我只是错过了什么?我还是个新手,一无所知。

【问题讨论】:

    标签: directx effects gpu shader


    【解决方案1】:

    通常,您希望在 CPU 上执行此操作。但是,DirectX 9 有“preshaders”的概念,这意味着这种乘法将在 CPU 上预先完成。对于较新的 API,这已被删除,但它可能与您正在查看的示例非常相关。

    此外,与内存访问相比,现代 GPU 在 ALU 操作方面的速度非常快。拥有一个适度复杂的顶点着色器(可能带有纹理提取)意味着进行矩阵乘法所需的数学运算是免费的,因此作者可能甚至都不会费心。

    无论如何,最佳做法是在 CPU 上预乘所有常量。同样适用于将工作从像素着色器移动到顶点着色器(如果三角形上的某些东西是恒定的,则不要按像素计算它。)

    【讨论】:

      【解决方案2】:

      嗯,这对我来说一点也不无知,你是绝对正确的!

      我不确切知道您一直在查看哪些示例,但通常您会尽可能多地传递预先计算的矩阵,这就是语义WORLDVIEW(更适合于简单着色器,WORLDVIEWPROJECTION)是for

      例外情况可能是着色器代码也需要访问单独的矩阵(但即便如此,我通常也会传递组合矩阵)......或者可能是那些关于说明矩阵乘法的示例。 :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 2013-01-11
        • 2018-12-22
        • 2014-02-08
        相关资源
        最近更新 更多