我试着将着色器中的变换矩阵与矢量直接相乘,而不做不必要的运输。据HLSL的mul
文档:HLSL mul和D3DXMATRIX顺序不匹配
mul(x, y)
乘以x
和y
使用矩阵数学。内部维度x-columns和y-rows必须相等。
x [in]
该输入值为x
。如果x
是矢量,则将其视为一行 矢量。
y [in]
该输入值为y
。如果y
是一个向量,则将其视为列 向量。
我在C++代码:
const D3DXMATRIX viewProjection = view * projection;
...
const D3DXMATRIX modelViewProjection = model * viewProjection;
其中modelViewProjection
是被复制到一个恒定缓冲行优先顺序矩阵,未调换。然而,对于这个在HLSL工作,我需要的位置矢量乘以转换矩阵:
output.position = mul(transformation, position);
这是什么mul
文档说的相反。
有人可以解释这里的不匹配吗?
谢谢!我发现这个指令['#pragma pack_matrix(row_major)'](https://msdn.microsoft.com/en-us/library/windows/desktop/dd607354(v = vs.85).aspx)和['D3DCOMPILE_PACK_MATRIX_ROW_MAJOR '](https://msdn.microsoft.com/en-us/library/windows/desktop/gg615083(v = vs.85).aspx)编译器常量。但是有没有提到改变订单的效率?我查看了生成的字节码,唯一不同的是使用了一些'dcl_temps'([details](https://gist.github.com/anonymous/57b59374f51e29de928a2cb5bd3ae044))。 – user367035