顶点转换不起作用

时间:2014-02-14 01:54:31

标签: matrix 3d directx projection

所以当我意识到因为我的所有顶点都在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)

0 个答案:

没有答案