Положение точки OpenGL после рендеринга (3d -> 2d) - PullRequest
4 голосов
/ 23 ноября 2010

У меня есть сцена OpenGL с несколькими фигурами на ней.Можете ли вы сказать мне, что мне нужно сделать, чтобы вычислить позиции вершин фигур после «рендеринга»?Я знаю, что, возможно, мне нужно вручную умножить некоторые матрицы, но я не знаю, какие из них и как.

Заранее благодарен за любую помощь!

Ответы [ 2 ]

6 голосов
/ 23 ноября 2010

Взгляните на функцию gluProject().

Редактировать: Также можно найти в FAQ по OpenGL :
9.100 Как я могунайти экранные координаты для заданной координаты пространства объекта?
(Тот же ответ, хотя.)

2 голосов
/ 23 ноября 2010

Хотите знать максимальные экстенты на экране в пикселях?

Если это так, самый простой способ - вызвать gluProject для всех ваших вершин и сохранить максимальные и минимальные положения x и y.

Может выглядеть так:

GLdouble modelview[16], projection[16]
GLint viewport[4];

glGetDoublev(GL_MODELVIEW_MATRIX, *modelView);
glGetDoublev(GL_PROJECTION_MATRIX, *projection);
glGetIntegerv(GL_VIEWPORT, *viewport);

double tx, ty, tz;

for(i = 0; i < VertexCount; i++)
{
  glProject(vertices[i].x, vertices[i].y, vertices[i].z, 
    modelview, projection, viewport,
    *tx, *ty, *tz);

  //  now, the 2d position of the ith Vertex is stored in tx, ty, tz.
  // you can now use these values to determine the 2d-extends on your screen

}
...