我正在制作2D棋盘游戏。游戏板网格为8x8,网格的每个单元格都是一个对象。所以一块板由64个单元对象组成。我的目标是确定鼠标所在的单元格。我通过跟踪鼠标坐标并将其与网格坐标进行比较来尝试此操作。
我的坐标系如下:
gluOrtho2D(-4,4,-4,4);
我试图通过在更新功能中使用以下内容来获取当前鼠标位置:
POINT p
if (GetCursorPos(&p)){
}
if (ScreenToClient(hWnd, &p))
{
}
然而,尽管这是跟踪鼠标的坐标,但它没有正确跟踪我使用gluOrtho2D设置的世界坐标。我怎样才能做到这一点?
答案 0 :(得分: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)
world.y = 4.0 - (mousePos.y / 640.0)*(4 * 2)
我们在这里做的是使用鼠标在屏幕内的标准化位置(mousePos.x / 640)进行线性插值,然后将该值乘以单词的宽度(4 * 2)。 鉴于网格的上/左角从(-4,4)开始,我们添加世界位置的偏移量。