C++ 如何在Direct3D 11中使用OpenGL列_主MVP矩阵
我试图为OpenGL和Direct3D API使用一个矩阵堆栈。根据我在本网站上的所有研究和其他文章: , 除其他外,我的理解是,只要处理某些细微差别并保持一致性,这应该是相当容易的 此外,这表明HLSL默认使用列_主格式 所以我有一个右手坐标系,opengl的主要MVP矩阵 我试图在DirectX中使用相同的矩阵。由于它是一个右手系统,我确保我设置了C++ 如何在Direct3D 11中使用OpenGL列_主MVP矩阵,c++,opengl,direct3d,C++,Opengl,Direct3d,我试图为OpenGL和Direct3D API使用一个矩阵堆栈。根据我在本网站上的所有研究和其他文章: , 除其他外,我的理解是,只要处理某些细微差别并保持一致性,这应该是相当容易的 此外,这表明HLSL默认使用列_主格式 所以我有一个右手坐标系,opengl的主要MVP矩阵 我试图在DirectX中使用相同的矩阵。由于它是一个右手系统,我确保我设置了rasterizerDesc.front逆时针=true 我的HLSL着色器中包含以下内容: output.position = mul(u_mv
rasterizerDesc.front逆时针=true代码>
我的HLSL着色器中包含以下内容:
output.position = mul(u_mvpMatrix, input.position);
请注意,在上面的代码中,我使用了一个post乘法,因为我的mvp矩阵是column major,我将它发送到着色器,而不进行转置。因此,它应该将其作为列major发送,因此是post乘法
注意:我确实尝试过使用mvp的转置进行预乘法以及后乘法和预乘法
在计算投影矩阵时,如上面第2条所建议的,我确保DX的深度范围为0-1,openGl的深度范围为-1-1
我甚至针对DirectXMath库中的XMMatrixPerspectiveFovRH
函数测试了生成的矩阵,我的矩阵与该函数生成的矩阵匹配
现在设置了光栅化标志->front逆时针=true
,右列主MVP矩阵,具有正确的深度缩放,我希望这就是让D3D使用我的矩阵所需的全部
我在这里错过了什么
注:我相信我在这里提供了所有信息,但如果需要更多信息,请告诉我。在每个中间步骤中,您需要再次检查您的假设是否正确。用手习惯的问题在于,只要你有一个偶数,如果你犯了错误,事情就会看起来是正确的。试错法只会让你得到最接近的偶数,但如果你只需要一些变换(例如,确定世界空间法线),你会遇到麻烦。你需要在每一个中间步骤都仔细检查你的假设是否正确。用手习惯的问题在于,只要你有一个偶数,如果你犯了错误,事情就会看起来是正确的。尝试和错误只会使您得到最接近的偶数,但如果您只需要一些变换(例如,确定世界空间法线),那么您将遇到麻烦。