0

我正在向各位 Direct3D 专家寻求帮助。坦率地说,我被 HLSL 的一个非常奇怪的行为弄疯了。这是我指定矩阵的方式。

现在我的问题 D3DX 9 功能:

D3DXMatrixOrthoOffCenterRH 和其他...

他们是否返回以这种形式使用的矩阵: v' = v * M // 主要列

或 v' = M * v // 主行 ???

我注意到 D3DXMatrixTrnaslate 在 Column major 中,我假设所有功能都相同。

现在 D3DX Project 和 Unproject 函数是否采用上述函数返回的相同形式?

有没有人经历过 HLSL 矩阵乘法的疯狂?

谢谢。

4

1 回答 1

0

我会保持简短。RH 函数返回列优先(http://en.wikipedia.org/wiki/Column_vector,供参考)矩阵,并且不是 HLSL(或适当优化的程序集)着色器的选择布局,因为它们不能执行使用点积对矢量进行 3D 变换。因此,在上传到着色器常量内存之前,请使用 LH 或行优先(实际上是 V'= M * V)布局或至少转置。

有关动手示例,请参阅 DirectX 文档,查找 D3DXMatrixLookAtLH() 和 D3DXMatrixLookAtRH()。在该页面上给出了矩阵的布局,您可以比较布局,并了解为什么用 X,Y,Z,1 向量对每一行进行 dot4'ing 分别执行 X、Y、Z 和 W 的仿射变换(给定您使用 LH/行主矩阵)。

于 2011-07-14T15:13:46.890 回答