Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Direct3D 11中使用OpenGL列_主MVP矩阵_C++_Opengl_Direct3d - Fatal编程技术网

C++ 如何在Direct3D 11中使用OpenGL列_主MVP矩阵

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

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

此外,这表明HLSL默认使用列_主格式

所以我有一个右手坐标系,opengl的主要MVP矩阵

我试图在DirectX中使用相同的矩阵。由于它是一个右手系统,我确保我设置了
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使用我的矩阵所需的全部

我在这里错过了什么


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

在每个中间步骤中,您需要再次检查您的假设是否正确。用手习惯的问题在于,只要你有一个偶数,如果你犯了错误,事情就会看起来是正确的。试错法只会让你得到最接近的偶数,但如果你只需要一些变换(例如,确定世界空间法线),你会遇到麻烦。你需要在每一个中间步骤都仔细检查你的假设是否正确。用手习惯的问题在于,只要你有一个偶数,如果你犯了错误,事情就会看起来是正确的。尝试和错误只会使您得到最接近的偶数,但如果您只需要一些变换(例如,确定世界空间法线),那么您将遇到麻烦。