G’day!
Скажем, у меня есть щелчок мыши, представленный его целочисленными значениями в окне (с изменяемым размером окна), поэтому его домен будет (0,0) -> (current_width, current_height). Есть ли простой способ «нормализовать» или преобразовать эту позицию щелчка мыши в вершину в земле OpenGL? то есть точка в R ^ 2 с доменом [-1,1] ^ 2?
Например: если бы текущие ширина и высота окна составляли 400 и 600 соответственно, и я нажал 400 600, я бы хотел легко преобразовать это в [1, -1].
Существует ли эта функциональность в OpenGL, или мне придется написать саму функцию?
Приветствия.
Вам придется написать функцию самостоятельно, но она тривиальна:
x_ogl = 2.0 * (x_mouse - width / 2) / width
y_ogl = -2.0 * (y_mouse - height / 2) / height
Отрицание во второй формуле заключается в преобразовании из «+ ve Y down» в координатах мышь / экран в более нормальное декартово из «+ ve Y up».
Кроме того, было бы более обычным поддерживать соотношение сторон 1: 1 между координатами X и Y, причем большая ось поддерживает диапазон [-1, 1], а меньшая ось имеет меньший диапазон.
Если это то, что вы действительно предпочитаете, то замените правую часть внешнего деления на max(width, height)
в обоих приведенных выше выражениях, а не как показано.
Других решений пока нет …