我正在向你们所有的Direct3D专家寻求帮助。坦率地说,HLSL的一个非常奇怪的行为让我发疯。这是我指定矩阵的方式。
现在我的问题是D3DX 9的功能:
D3DXMatrixOrthoOffCenterRH和其他人...
它们是否返回以下形式的矩阵: v‘=v*M // Column major
或v‘=M*v //行长?
我注意到D3DXMatrixTrnaslate在major列中,我假设所有函数都是一样的。
现在,D3DX项目和非项目函数是否采用上述函数返回的相同形式?
有人经历过HLSL矩阵乘法的疯狂吗?
谢谢。
发布于 2011-07-14 23:13:47
我就长话短说。RH函数返回column major (http://en.wikipedia.org/wiki/Column_vector,用于参考)矩阵,并且不是HLSL (或适当优化的集合)着色器的首选布局,因为它们不能使用点积执行向量的3D变换。因此,在上传到着色器常量内存之前,请使用LH或row-major (V'= M* V,实际上)布局或至少转置。
要获得实际操作示例,请查看DirectX文档,查找D3DXMatrixLookAtLH()和D3DXMatrixLookAtRH()。在该页面上给出了矩阵的布局,您可以比较布局,并了解为什么用X,Y,Z,1向量对每行进行dot4‘分别对X,Y,Z和W执行仿射变换(假设您使用LH/行较多矩阵)。
https://stackoverflow.com/questions/4813607
复制相似问题