Как получить правильные координаты точки, используя glReadPixels и gluUnproject?
Я использую QGLWidget и QtOpenGL для отображения облаков точек, а также glReadPixels и gluUnProject для выбора точки из облака точек. Проблема в том, что glReadPixels, похоже, не выбирает пиксели моих очков.
Я пытался использовать разные размеры точек, а также разные размеры блоков в glReadPixels, но "луч", кажется, проходит через точки. Мне интересно, если мне нужно рассчитать точку закрытия луча, так как почти невозможно щелкнуть вправо по точке.
Точки нарисованы с помощью (как раз и пример точки в оригинале)
`
GLuint list = glGenLists(1);
glNewList(list, GL_COMPILE);
glPointSize(10.0f);
glBegin(GL_POINTS);
glColor3f(0.0f, 255.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glEnd();
glEndList();
updateScene();`
Выбор точки осуществляется с помощью функции getObejctCoords ниже.
`
void pclView::getObjectCoords(QMouseEvent *event)
GLdouble projection[16];
GLdouble modelView[16];
GLint viewPort[4];
GLdouble obj_coords0, obj_coords1, obj_coords2;
GLdouble pt_coords0, pt_coords1, pt_coords2;
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetDoublev(GL_MODELVIEW_MATRIX, modelView);
glGetIntegerv(GL_VIEWPORT, viewPort);
// Window parameters
winX = event->pos().x();
winY = viewPort[3] - event->pos().y();
// get Window Z
glReadPixels( event->pos().x(), int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
// Unproject 2D click to 3D location
gluUnProject( winX, winY, winZ, modelView, projection, viewPort, &obj_coords0, &obj_coords1, &obj_coords2);
std::cout << "x: " << obj_coords0;
std::cout << " y: " << obj_coords1;
std::cout << " z: " << obj_coords2 << std::endl;
`
В положении камеры (0,0,-50) вращение: (0, 0) (Нажав на точку почти в начале (но в точке), функция выдает следующий вывод
´ x: 0 y: -0.578724 z: -950 `
И фактический результат должен (как я понял) должен быть что-то вроде x: 0 y: -0.578724 z: -0