Я делаю 2D настольную игру. сетка игрового поля имеет размер 8×8, и каждая ячейка сетки является объектом. Таким образом, доска состоит из 64 клеточных объектов. Моя цель — выяснить, в какой ячейке находится мышь. Я пытаюсь это сделать, отслеживая координаты мыши и сравнивая ее с координатами сетки.
моя система координат выглядит следующим образом:
gluOrtho2D(-4,4,-4,4);
Я пытаюсь получить текущую позицию мыши с помощью следующего в моей функции обновления:
POINT p
if (GetCursorPos(&p)){
}
if (ScreenToClient(hWnd, &p))
{
}
Однако, хотя это отслеживание координат мыши, это не правильно отслеживание мировых координат, которые я установил с помощью gluOrtho2D. Как мне этого добиться?
Это зависит от вашего glViewPort
Допустим, у вас есть:
glViewport (0,0, 640, 640);
Положение мыши — (mousePos.x, mousePos.y), а позиция мира, которую вы хотите узнать, — (world.x, world.y)
И, дайте, чтобы верхний / левый угол вашего экрана был координатой (0, 0)
Тогда мы можем сделать следующее:
world.x = -4.0 + (mousePos.x / 640.0) * (4 * 2)
world.y = 4.0 — (mousePos.y / 640.0) * (4 * 2)
Здесь мы выполняем линейную интерполяцию, используя нормализацию положения мыши на экране (mousePos.x / 640), а затем умножаем это значение на ширину слова (4 * 2).
Учитывая, что верхний / левый угол сетки начинается с (-4, 4), мы добавляем смещение мировой позиции.
Других решений пока нет …