문제

I have the following function code:

D3DXVECTOR3 Mouse::GetClickDirection(D3DXMATRIX projMatrix, D3DXMATRIX viewMatrix, D3DXVECTOR3 cameraPosition)
{
    POINT mousePoint;
    GetCursorPos(&mousePoint);

    ScreenToClient(hwnd, &mousePoint);

    float x = ((mousePoint.x * 2.0f) / (float)backBufferWidth) - 1.0f;
    float y = ((mousePoint.y * -2.0f) / (float)backBufferHeight) + 1.0f;

    D3DXVECTOR3 mouseClip = D3DXVECTOR3(x, y, 1.0f);

    D3DXMATRIX invViewMatrix;
    D3DXMatrixInverse(&invViewMatrix, 0, &viewMatrix);

    D3DXMATRIX invProjMatrix;
    D3DXMatrixInverse(&invProjMatrix, 0, &projMatrix);

    D3DXMATRIX inversedMatrix = invViewMatrix * invProjMatrix;

    D3DXVECTOR3 mouseWorldSpace;
    D3DXVec3TransformCoord(&mouseWorldSpace, &mouseClip, &inversedMatrix);

    D3DXVECTOR3 direction = mouseWorldSpace - cameraPosition;

    D3DXVec3Normalize(&direction, &direction);

    system("CLS");
    std::cout << "sX: " << x << std::endl;
    std::cout << "sY: " << y << std::endl;

    std::cout << "X: " << direction.x << std::endl;
    std::cout << "Y: " << direction.y << std::endl;
    std::cout << "Z: " << direction.z << std::endl;

    return direction;
}

I'm trying to calculate and create a directional ray based on the x and y screen point that the user has clicked on in my DirectX 3D app. So far, the printed results seems to indicate that my calculations are wrong as the Z value is always around 0.9 and I have no idea why. What exactly am I doing wrong here? Please help. Thanks

도움이 되었습니까?

해결책

I think your inverse matrix calculation is backwards.

D3DXMATRIX inversedMatrix = invProjMatrix * invViewMatrix;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top