У меня квадрат на плоскости y = -50. На данный момент все, что я хочу сделать, это получить координаты щелчка мыши на квадроцикле. Мне удалось сделать это в ограниченной степени. Проблема в том, что преобразования, которые я применял при рисовании квадроцикла, не учитываются. Я могу добавить некоторые константы и заставить их работать, но я разрешаю пользователю поворачивать сцену вокруг осей x и y с помощью glRotatef(), поэтому координаты становятся беспорядочными, как только происходит поворот.Выбор луча с gluUnProject()
Вот что я делаю сейчас:
Я называю gluUnProject() дважды, один раз с г = 0, и один раз с г = 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().
Я хочу, чтобы плоскости X, planeY и planeZ были координатами щелчка на квадроцикле, в той же системе координат, что и для рисования квадроцикла. Как я могу это достичь?
Когда вы получаете матрицу modelView? До или после `glRotatef()`? – genpfault 2010-12-02 16:52:17