C++ 传递到顶点着色器之前的矩阵转置

C++ 传递到顶点着色器之前的矩阵转置,c++,matrix,directx-11,C++,Matrix,Directx 11,我对将矩阵传递给顶点着色器非常困惑,据我所知,在将矩阵传递给顶点着色器之前,必须对矩阵进行转置 但当我将世界矩阵传递给顶点着色器时,它并没有正常工作,缩放和旋转效果很好,但平移导致了奇怪的视觉故障。因此,通过反复试验,我发现这个问题可以通过在将世界矩阵传递给顶点着色器之前不转置世界矩阵来解决,但当我尝试使用视图和投影矩阵时,没有任何效果 我不明白为什么我很困惑,我必须转置除世界矩阵以外的所有矩阵吗?这取决于着色器的代码 如果没有任何/Zpr或/ZpcHLSL编译器选项,当您的HLSL代码显示po

我对将矩阵传递给顶点着色器非常困惑,据我所知,在将矩阵传递给顶点着色器之前,必须对矩阵进行转置

但当我将世界矩阵传递给顶点着色器时,它并没有正常工作,缩放和旋转效果很好,但平移导致了奇怪的视觉故障。因此,通过反复试验,我发现这个问题可以通过在将世界矩阵传递给顶点着色器之前不转置世界矩阵来解决,但当我尝试使用视图和投影矩阵时,没有任何效果


我不明白为什么我很困惑,我必须转置除世界矩阵以外的所有矩阵吗?

这取决于着色器的代码

如果没有任何
/Zpr
/Zpc
HLSL编译器选项,当您的HLSL代码显示
pos=mul(矩阵,向量)
时,矩阵应为列主。当HLSL代码表示
pos=mul(向量,矩阵)
时,矩阵应为行主矩阵

列主矩阵在GPU上的处理速度稍快,原因如下

  • 乘法的HLSL编译成四条
    dp4
    指令。点产品在GPU上运行速度很快,在任何地方都被广泛使用,尤其是在像素着色器中

  • VRAM访问模式稍好一些。如果你想知道更多,关键词是“内存合并”,大多数来源都是关于CUDA的,但这同样适用于图形

  • 这就是为什么Direct3D默认为列主布局