Преобразование координат окна в координаты оси в OpenGL - PullRequest
2 голосов
/ 23 декабря 2010

Я создаю простую программу в OpenGL для рисования прямоугольников с помощью мыши. Моя цель - щелкнуть где-нибудь, перетащить мышью и создать прямоугольник, как вы делаете это в рисовании или любой другой программе дизайна.

У меня есть вид, определенный как:

glMatrixMode(GL_PROJECTION);
glOrtho(AXIS_X_MIN, AXIS_X_MAX, AXIS_Y_MIN, AXIS_Y_MAX, AXIS_Z_MIN, AXIS_Z_MAX);

и окно, определенное следующим образом:

glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);

Как я могу преобразовать координаты окна, которые идут от 0 до WINDOW_WIDTH и от 0 до WINDOW_HEIGHT, в координаты оси и соответствующие квадранты?

Ответы [ 3 ]

5 голосов
/ 23 декабря 2010

Попробуйте:

double x = x_mouse / (double) WINDOW_WIDTH 
           * (AXIS_X_MAX - AXIS_X_MIN) + AXIS_X_MIN;
double y = (1 - y_mouse / (double) WINDOW_HEIGHT)
           * (AXIS_Y_MAX - AXIS_Y_MIN) + AXIS_Y_MIN;
0 голосов
/ 11 ноября 2015

gluUnProject - преобразовывает координаты окна карты в координаты объекта.Честно говоря, я понятия не имею, как это работает.Вы можете проверить это здесь: OpenGL - gluUnProject

Также, если вы попробуете это, оно должно работать:

float coorX = mouseX * width / WINDOW_WIDTH + AXIS_X_MIN;  
float coorY = mouseY * heigth/ WINDOW_HEIGHT + AXIS_Y_MIN;
0 голосов
/ 29 мая 2012

Если вы не хотите выполнять вычисления «вручную», вы всегда можете проверить эту небольшую статью, которая использует функцию из библиотеки GLU, которая должна делать это внутри.

http://steinsoft.net/index.php?site=Programming/Code%20Snippets/OpenGL/no8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...