Программы на C++. Форум разработчиков
Anonymous
Неправильный расчет лучей мыши
Сообщение
Anonymous » 14 фев 2025, 11:33
Я работаю над игрой C ++ OpenGL Game и использую iMgui для редактора UI . Для выбора объекта мне нужен Mouse Ray из сцены Viewport. Я пытался вычислять лучу мыши таким образом.
Код: Выделить всё
ImVec2 mousePos = ImGui::GetMousePos();
ImVec2 windowPos = ImGui::GetWindowPos();
ImVec2 windowSize = ImGui::GetWindowSize();
ImVec2 mousePosInWindow = { mousePos.x - windowPos.x, mousePos.y - windowPos.y };
float ndcX = (2.0f * mousePosInWindow.x / windowSize.x) - 1.0f;
float ndcY = 1.0f - (2.0f * mousePosInWindow.y / windowSize.y);
float ndcZ = 1.0f;
glm::vec4 ndc(ndcX, ndcY, ndcZ, 1.0f);
glm::vec4 worldPos = glm::inverse(Camera::m_proj * Camera::m_view) * ndc;
worldPos /= worldPos.w;
mouseRayDirection = glm::normalize(glm::vec3(worldPos));
Какова проблема в этом коде, что мышиный луч не рассчитывается правильно?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... alculation
1739522019
Anonymous
Я работаю над игрой C ++ OpenGL Game и использую iMgui для редактора UI . Для выбора объекта мне нужен Mouse Ray из сцены Viewport. Я пытался вычислять лучу мыши таким образом. [code]ImVec2 mousePos = ImGui::GetMousePos(); ImVec2 windowPos = ImGui::GetWindowPos(); ImVec2 windowSize = ImGui::GetWindowSize(); ImVec2 mousePosInWindow = { mousePos.x - windowPos.x, mousePos.y - windowPos.y }; float ndcX = (2.0f * mousePosInWindow.x / windowSize.x) - 1.0f; float ndcY = 1.0f - (2.0f * mousePosInWindow.y / windowSize.y); float ndcZ = 1.0f; glm::vec4 ndc(ndcX, ndcY, ndcZ, 1.0f); glm::vec4 worldPos = glm::inverse(Camera::m_proj * Camera::m_view) * ndc; worldPos /= worldPos.w; mouseRayDirection = glm::normalize(glm::vec3(worldPos)); [/code] Какова проблема в этом коде, что мышиный луч не рассчитывается правильно? Подробнее здесь: [url]https://stackoverflow.com/questions/79438618/incorrect-mouse-ray-calculation[/url]