Как получить правильные координаты точки, используя glReadPixels и gluUnproject? - PullRequest
1 голос
/ 22 мая 2019

Я использую 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

...