У меня есть квадроцикл на плоскости y = -50. На данный момент все, что мне нужно сделать, это получить координаты щелчка мышью по квадрату. Мне удалось сделать это в ограниченной степени. Проблема в том, что преобразования, которые я применил при рисовании четырехугольника, не учитываются. Я могу добавить некоторые константы и заставить его работать, но я позволяю пользователю вращать сцену вокруг осей x и y с помощью glRotatef (), поэтому координаты меняются, как только происходит вращение.
Вот что я сейчас делаю:
Я вызываю gluUnProject () дважды, один раз с z = 0 и один раз с z = 1.
gluUnProject( mouseX, WINDOW_HEIGHT - mouseY, 0, modelView, projection, viewport, &x1, &y1, &z1);
gluUnProject( mouseX, WINDOW_HEIGHT - mouseY, 1, modelView, projection, viewport, &x2, &y2, &z2);
Нормализованный вектор луча:
x = x2 - x1;
y = y2 - y1;
z = z2 - z1;
mag = sqrt(x*x + y*y + z*z);
x /= mag;
y /= mag;
z /= mag;
Параметрическое уравнение:
float t = -(camY) / y;
planeX = camX + t*x;
planeY = camY + t*y;
planeZ = camZ + t*z;
где (camX, camY, camZ) - позиция камеры, переданная в gluLookAt ().
Я хочу, чтобы planeX, planeY и planeZ были координатами щелчка по четырехугольнику в той же системе координат, которую я использовал для рисования четырехугольника. Как я могу этого добиться?
glRotatef()
? - person genpfault   schedule 02.12.2010