所以当我意识到因为我的所有顶点都在z = 0上时,我正在建立一个通用光线拾取算法,我可以很容易地通过投影找到点的位置。我这样做了,它工作得很好。我试图将它放在一个单独的函数中,以使代码更具可读性,但是没有用,然后我将代码放回到原始函数中,它根本不起作用。
我的代码:
D3DXVECTOR3 dir = D3DXVECTOR3(mousex, mousey, ((float)-game->camera->actualposition.z/CAM_DEPTH));
D3DXMATRIX projInverse;
D3DXMATRIX mult = manager->m_projectionMat;
D3DXMatrixInverse(&projInverse, 0, &mult);
D3DXVec3TransformCoord(
&dir,
&dir,
&projInverse);
D3DXMATRIX viewInverse;
D3DXMATRIX mult2 = manager->m_viewMat;
D3DXMatrixInverse(&viewInverse, 0, &mult2);
D3DXVec3TransformCoord(
&dir,
&dir,
&viewInverse);
convert << dir.x << " : " << ((float)manager->mouse.y/WINDOW_HEIGHT) << " : " << dir.z;
最后一行是我用来在屏幕上显示变量的东西,所以忽略它。 当我用鼠标注释掉代码的第二部分并用dir控制z时,看起来z是抛物线的。直到原来的z真的非常接近1,它甚至更接近零。任何人都有任何想法发生了什么?如果你们需要更多的代码发布,那么只需发表评论即可。 编辑:我再做了一次测试,其中dir =(0,0,0),在变换之后(没有视图矩阵)它是(0,0,0.1)