2010-11-27 2 views
4

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

Если я понимаю 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

Это не скомпилируется. Вы смешиваете операторы * и &. – 2010-11-27 22:14:55

+0

Исправлено. Благодаря! – MattheW 2010-11-27 22:20:54

ответ

2

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