2016-10-08 5 views
0

Я делаю двумерную настольную игру. сетка игрового поля равна 8x8, и каждая ячейка сетки является объектом. Таким образом, плата состоит из 64 объектов ячейки. Моя цель - определить, в какой ячейке находится мышь. Я пытаюсь это отслеживать координаты мыши и сравнивать ее с координатами сетки.OpenGL - координаты координат мыши

моей системе координат выглядит следующим образом:

gluOrtho2D(-4,4,-4,4); 

Я пытаюсь получить текущее положение мыши, используя следующие в моей функции обновления:

POINT p 

if (GetCursorPos(&p)){ 

} 

if (ScreenToClient(hWnd, &p)) 
{ 

} 

Однако, хотя это отслеживает координаты мыши неправильно отслеживает мировые координаты, которые я установил с gluOrtho2D. Как я могу это достичь?

ответ

0

Это зависит от вашего 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)

мир. y = 4,0 - (mousePos.y/640,0) * (4 * 2)

Что мы делаем здесь, это линейная интерполяция, использующая нормализованное положение мыши внутри экрана (mousePos.x/640), а затем умножая это значение на ширину слова (4 * 2). Учитывая, что верхний/левый угол сетки начинается с (-4, 4), мы добавляем смещение позиции мира.