Я просто пытаюсь преобразовать координаты окна в координаты объекта в OpenGL, используя gluUnproject().Почему glUnProject (...) возвращает -1.0?
Я ловлю X и координаты Y (Winx и винным) окна GLUT правильно используя:
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)
Любые идеи?
Добро пожаловать в SO! Ваша проекцияM должна отображать усечку (левый, правый, верхний, нижний, ближний, дальний) на [-1,1] x [-1,1] x [-1,1]. Теперь посмотрим на область значений проекцииM * world_vector, если projectM = diag (1,1,1,1). Вы также можете найти статью [SongHo Projection Matrix article] (http://www.songho.ca/opengl/gl_projectionmatrix.html). –
Спасибо за ответ. Отладка программы, я вижу, что мое матричное значение projectionM 4x4 - это единичная матрица. То же, что и матрица modelviewM 4x4. Я использую glOrtho() вместо glFrustum(). – FranSto
Дело не в том, что это усечка или куб; Дело в том, что вы не сопоставляете его с [-1,1] x [-1,1] x [-1,1] с матрицей тождественного проектирования. Просто прочитайте статью, на которую я указал. –