Неправильно рассчитано направление сбора лучей

У меня есть следующий код функции:

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

Я пытаюсь рассчитать и создать направленный луч на основе точек экрана x и y, по которым пользователь щелкнул в моем приложении DirectX 3D. Пока что результаты печати указывают на то, что мои расчеты неверны, поскольку значение Z всегда составляет около 0,9, и я не знаю почему. Что именно я здесь делаю не так? Пожалуйста помоги. Спасибо

1

Решение

Я думаю, что ваш обратный матричный расчет обратный.

D3DXMATRIX inversedMatrix = invProjMatrix * invViewMatrix;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]