如何在Direct3D 11中使用OpenGL Column_Major MVP Matrix

时间:2016-03-01 04:37:16

标签: c++ opengl direct3d

我正在尝试为OpenGL和Direct3D API使用单个矩阵堆栈。从我对本网站的所有研究和其他文章: Article 1Article 2除其他外,我的理解是,只要处理某些细微差别并保持一致性,这应该相当容易。

此外,此MSDN Article表示HLSL默认使用column_major格式。

所以我有一个工作的右手坐标系统,Column_Major MVP矩阵用于opengl。

我试图在DirectX中使用相同的矩阵。由于它是一个右手系统,我确保我设置了rasterizerDesc.FrontCounterClockwise = true;

我的HLSL着色器中有以下内容:

output.position = mul(u_mvpMatrix, input.position);

请注意,在上面的代码中我使用了后乘法,因为我的mvp-matrix是专业列,我将它发送到着色器而不转置它。所以它应该将它作为列主要发送,因此,后乘。

注意:我确实尝试过预乘,以及使用mvp的转置进行后置和预乘。

在计算投影矩阵时,如上文第2条所述,我确保DX的深度范围是0-1,而openGl的深度范围是-1到1!

我甚至在DirectXMath库中针对XMMatrixPerspectiveFovRH函数测试了我的结果矩阵,我的矩阵与该函数生成的矩阵匹配。

现在设置光栅化标志 - > FrontCounterClockwise = true,RH列主要MVP矩阵,具有正确的深度缩放,我原本预计这将是让D3D与我的Matrix一起工作所需的全部内容。

我在这里失踪的是什么?

P.S:我相信我在这里提供了所有信息,但如果需要更多信息,请告诉我。

0 个答案:

没有答案