我有一个相机视图矩阵,是从GL程序中获取的。我知道这个矩阵是右手坐标系,因为这是GL工作的方式,但我该如何以编程方式检查这个矩阵是右手坐标系还是左手坐标系?
对于投影矩阵,我检查矩阵[3][4](行主序)是否为正数,以查看它是否是左手坐标系。这正确吗?
谢谢。
编辑:
我尝试了行列式解法,但不幸的是它并不正确(至少根据我的实验结果是这样的):
我使用DX9数学函数进行测试(以避免我的代码中可能存在的任何错误)。我运行了以下代码:
对于投影矩阵,我检查矩阵[3][4](行主序)是否为正数,以查看它是否是左手坐标系。这正确吗?
谢谢。
编辑:
我尝试了行列式解法,但不幸的是它并不正确(至少根据我的实验结果是这样的):
我使用DX9数学函数进行测试(以避免我的代码中可能存在的任何错误)。我运行了以下代码:
D3DXVECTOR3 vEye(0,0,0);
D3DXVECTOR3 vTarget(6,3,0);
D3DXVECTOR3 vUp(0,0,1);
D3DXMATRIX matViewLH;
D3DXMATRIX matViewRH;
D3DXMatrixLookAtLH(&matViewLH, &vEye, &vTarget, &vUp);
D3DXMatrixLookAtRH(&matViewRH, &vEye, &vTarget, &vUp);
float fLHDet = D3DXMatrixDeterminant(&matViewLH);
float fRHDet = D3DXMatrixDeterminant(&matViewRH);
两个决定因素相等(均为0.99999994),显然具有相同的符号。
至于我的问题-由于我得到了视图矩阵和投影矩阵,而且很容易测试投影矩阵是LH还是RH-我使用这些信息来确定坐标系。
MatrixLookAtLH()
和MatrixLookAtRH()
矩阵之间的区别应该是绕结果y轴旋转180度--矩阵本身应该始终具有(正如您发现的)行列式为1。也许问题在于您试图将D3DX约定应用于GL系统,而这并不适用? - comingstorm