Вопросы 9.100 и 9.110 по здесь следующие:
9.100 Как найти экранные координаты для заданной координаты пространства объекта?
Вы можете использовать служебную программу библиотеки GLU gluProject()
, если вам нужно только найти ее для нескольких вершин.Для большого количества координат может быть более эффективно использовать механизм обратной связи.
Чтобы использовать gluProject()
, вам потребуется предоставить матрицу ModelView, матрицу проекции, видовой экран и координаты пространства входного объекта.,Координаты экранного пространства возвращаются для X, Y и Z, причем Z нормализуется (0 <= Z <= 1).</p>
9.110 Как найти координаты пространства объекта для пикселя на экране?
Библиотека GLU предоставляет для этой цели функцию gluUnProject()
.
Вам потребуется прочитать буфер глубины, чтобы получить значение Z координаты входного экрана в интересующем месте X, Y.Это может быть закодировано следующим образом:
GLdouble z;
glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_DOUBLE, &z);
Обратите внимание, что x и y являются OpenGL-центрированными с (0,0) в нижнем левом углу.
Вам нужно будет предоставитьзначения экранного пространства X, Y и Z в качестве входных данных для gluUnProject () с матрицей ModelView, матрицей проекции и окном просмотра, которые были актуальны на момент визуализации определенного интересующего пикселя. В руководстве по OpenGl рассказывается, как сбросить матрицу проекции с помощью следующего
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix