2013-10-29 4 views
1

나는 다음과 같은 기능 코드가 : 나는 사용자가에서 클릭했다고 x와 y 화면 시점을 기준으로 방향 선을 계산하고 만들려고 해요레이 따기 방향은 계산을 제대로 수행하지 않는

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; 
} 

을 내 DirectX 3D 앱. 지금까지 인쇄 된 결과는 Z 값이 항상 0.9 근처에 있기 때문에 계산이 잘못되었음을 나타냅니다. 이유는 알 수 없습니다. 여기 정확히 내가 뭘 잘못하고 있니? 도와주세요. 감사합니다

+0

당신은 [D3DXVec3Unproject 기능]이 있음을 알고 (http://msdn.microsoft.com/en-us/library/windows/desktop/bb205526 (V = VS.85)에서 .aspx) 그 수행 기본적으로? –

답변

2

나는 당신의 역행렬 계산이 거꾸로 생각합니다.

D3DXMATRIX inversedMatrix = invProjMatrix * invViewMatrix; 
관련 문제