Почему glUnProject (…) возвращает -1.0?

Я просто пытаюсь преобразовать координаты окна в координаты объекта в OpenGL, используя gluUnproject ().

Я правильно улавливаю координаты X и Y (winX и winY) окна перенасыщения, используя:

glutPassiveMotionFunc(mouseMove);

а потом я устанавливаю WinZ с помощью

glReadPixels(int (winX), int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ)

Затем я устанавливаю posX, posY и posZ (координаты объекта), используя

gluUnProject(winX, winY, winZ, modelviewM, projectionM, viewportA, &posX, &posY, &posZ);

от:

glGetDoublev(GL_MODELVIEW_MATRIX, modelviewM);
glGetDoublev(GL_PROJECTION_MATRIX, projectionM);
glGetIntegerv(GL_VIEWPORT, viewportA);

Я не изменяю значение матрицы в любой момент.
Проблема в том, что возвращаемые значения gluUnProject для posX, posY и posZ равны -1.0

Кроме того, я должен сказать, что значения modelviewM и projectionM являются единичной матрицей, а значение viewportA равно (0, 0, 1440, 720).

Есть идеи?

0

Решение

Наверно, я считаю, gluUnProject Функция принимает значения в диапазоне -1 .. + 1, а не 0..width и 0..height. Так,

gluUnProject(
((double) winX + 0.5) / (double) width * 2.0 - 1.0,
((double) winY + 0.5) / (double) height * 2.0 - 1.0,
winZ,
modelviewM,
projectionM,
viewportA,
&posX, &posY, &posZ);
0

Другие решения

ПРОБЛЕМА РЕШЕНА: моя глупая ошибка заключалась в том, что я вызывал gluUnProject () в функции main ().
Я заменил его сразу после назначения winZ в функции mouseMove ().
Оно работает!
Единственное сомнение, которое у меня есть сейчас, это то, почему значение posZ не меняется. я использую
glReadPixels(int (winX), int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
чтобы получить значение winZ.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector