Преобразовать положение мыши в мировые координаты в 2D openGL после изменения размера окна - PullRequest
0 голосов
/ 28 сентября 2010

Когда запускается написанная мною программа, у меня есть несколько вершин в окне. Окно просмотра настроено на все окно. При щелчке мыши рассчитывается расстояние от положения мыши до каждой из вершин. Если какой-либо из них находится в пределах определенного порога (скажем, 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);

Где слева, справа, снизу и сверху - пределы моего нового окна просмотра. Я пытался сделать это как до, так и после настройки нового окна просмотра. Похоже, не решить проблему.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

Проверьте это:

screenHeight = h;
screenWidth = w;

// ...

widthBound = width;
heightBound = height;

Используете ли вы screen*** или ***Bound для преобразования координат мыши?это может быть проблемой, так как они имеют разные размеры с применением соотношения сторон и равны в противном случае.

0 голосов
/ 28 сентября 2010

Из комментариев видно, что ваша проблема пересчитывает ваш прогноз при изменении размера вашего окна.

Просто позвоните glOrtho() после изменения размера (убедитесь, что для матричного режима установлено значение GL_PROJECTION), и все будет хорошо.

...