Когда запускается написанная мною программа, у меня есть несколько вершин в окне. Окно просмотра настроено на все окно. При щелчке мыши рассчитывается расстояние от положения мыши до каждой из вершин. Если какой-либо из них находится в пределах определенного порога (скажем, 5 единиц), вершина выбирается. Эта часть работает без проблем.
Однако после изменения размера окна я ограничиваю область просмотра нового окна, чтобы сохранить соотношение сторон. Это также работает.
Однако после изменения размера попытка щелкнуть по вершинам приводит к странному поведению, поскольку положение мыши больше не соответствует мировым координатам. Как я могу преобразовать положение мыши в мировую систему координат, в которой хранятся значения x / y этих вершин?
Я видел этот вопрос ранее, но в трехмерном контексте. Решением для этого, кажется, является использование gluUnproject. Я не уверен, применимо ли это к 2D-программе. Любая помощь будет оценена!
Вот код моей функции изменения размера:
//resize function; used to maintain aspect ratio
void resize(int w, int h)
{
screenHeight = h;
screenWidth = w;
int width, height;
//taller
if ((float)(w/h) < R)
{
width = w;
height = w/R;
}
//wider
else
{
width = h*R;
height = h;
}
widthBound = width;
heightBound = height;
glViewport(0, 0, width, height);
} //end resize
Я попытался сбросить матрицу проекции внутри кода, выполнив:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(left, right, bottom, top);
Где слева, справа, снизу и сверху - пределы моего нового окна просмотра. Я пытался сделать это как до, так и после настройки нового окна просмотра. Похоже, не решить проблему.