OpenGL gluProject () - странные результаты - PullRequest
4 голосов
/ 28 ноября 2010

Я пытаюсь использовать функцию gluProject, чтобы получить координаты точки в 2d окне после «рендеринга».Проблема в том, что я получаю странные результаты.Например: у меня есть точка с х = 16,5.Когда я использую gluProject, я получаю x = -6200.0.

Если я понимаю gluProject ОК, я должен получить положение пикселя этой точки на моем экране после «рендеринга» - я прав?Как я могу преобразовать этот странный результат в пиксельные координаты на экране?

Спасибо за любую помощь!

Код, который я использую (от "sum1stolemyname"):

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++)
{
  gluProject(vertices[i].x, vertices[i].y, vertices[i].z, 
    modelview, projection, viewport,
    &tx, &ty, &tz)
}

1 Ответ

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

Да, к сожалению, он делает это настолько далеко, насколько далеко, чтобы вы могли создать «луч» в мир. Это не дает вам фактическое положение пикселя, который вы рисуете в трехмерном пространстве. Что вы можете сделать, так это провести линию от экрана до точки, которую вы получите от gluProject, а затем использовать ее, чтобы найти точку пересечения с вашей геометрией, чтобы получить точку в трехмерном пространстве. Или другой вариант - изменить входные матрицы и область просмотра так, чтобы дальняя плоскость была более разумной.

...