GlReadPixels() не может получить правильную информацию о QOpenGLWidget ⇐ C++
GlReadPixels() не может получить правильную информацию о QOpenGLWidget
Я работал над приложением отображения, используя QOpenGLWidget в среде Qt. Объект, необходимый для рендеринга, определен в классе. В этом классе для конструктора необходим указатель «QOpenGLFunctions_4_5_Core *gl». Примером является CubesContour(resultData &result, float isolevel, int valNo, int colorNums, схема colorScheme, QOpenGLFunctions_4_5_Core *gl); И есть функция, позволяющая использовать указатель для вызова gl-функций для рендеринга. У меня есть разные типы объектов для рендеринга, и я управляю ими, используя разные QMap. Я перезаписываю paintGL(), например
if(model_DisplayMap.size() > 0) { for(auto i: this->model_DisplayMap) { //i->draw(1, this->m_camera); //i->drawLight(1, this->m_camera); я->drawbyFaceNormal(1, this->m_camera); } } если (линейка_DisplayMap.size() > 0) { for(auto i: this->ruler_DisplayMap) { я->draw(1, this->m_camera); } } если (colormap_DisplayMap.size() > 0) { for(auto i: this->colormap_DisplayMap) { я->drawColorMapbyPostion(1, this->m_camera); я->drawText(я->номер пользователя, я->phyName); } } ... И теперь я хочу получить глубину при нажатии левой кнопки курсора. Я перезаписываю mousePressEvent(), например
void myOpenglWid_first::mousePressEvent(QMouseEvent *event) { makeCurrent(); if(event->buttons()&Qt::LeftButton) { float z = getDepthValue(event->pos().x(), event->pos().y()); qDebug() height() - y, 1, 1, GL_RED, GL_FLOAT, &color); } иначе, если (RGB == 1) { glReadPixels(x, this->height() - y, 1, 1, GL_GREEN, GL_FLOAT, &color); } иначе, если (RGB == 2) { glReadPixels(x, this->height() - y, 1, 1, GL_BLUE, GL_FLOAT, &color); } DoneCurrent(); вернуть цвет; } и все их результаты равны нулю. Я думаю, что при использовании указателя для визуализации объекта должна быть какая-то ошибка? Хотя объект может отображаться корректно, контекст перепутан, и при вызове mousePressEvent функции не читают буфер, который должен быть прочитан. Все вышесказанное является моим предположением, потому что при использовании простого примера (непосредственной визуализации поля в paintGL) вывод глубины и цвета правильный. Или могут быть какие-то более эффективные методы для управления типами объектов рендеринга при использовании QOpenGLWidget?
Я работал над приложением отображения, используя QOpenGLWidget в среде Qt. Объект, необходимый для рендеринга, определен в классе. В этом классе для конструктора необходим указатель «QOpenGLFunctions_4_5_Core *gl». Примером является CubesContour(resultData &result, float isolevel, int valNo, int colorNums, схема colorScheme, QOpenGLFunctions_4_5_Core *gl); И есть функция, позволяющая использовать указатель для вызова gl-функций для рендеринга. У меня есть разные типы объектов для рендеринга, и я управляю ими, используя разные QMap. Я перезаписываю paintGL(), например
if(model_DisplayMap.size() > 0) { for(auto i: this->model_DisplayMap) { //i->draw(1, this->m_camera); //i->drawLight(1, this->m_camera); я->drawbyFaceNormal(1, this->m_camera); } } если (линейка_DisplayMap.size() > 0) { for(auto i: this->ruler_DisplayMap) { я->draw(1, this->m_camera); } } если (colormap_DisplayMap.size() > 0) { for(auto i: this->colormap_DisplayMap) { я->drawColorMapbyPostion(1, this->m_camera); я->drawText(я->номер пользователя, я->phyName); } } ... И теперь я хочу получить глубину при нажатии левой кнопки курсора. Я перезаписываю mousePressEvent(), например
void myOpenglWid_first::mousePressEvent(QMouseEvent *event) { makeCurrent(); if(event->buttons()&Qt::LeftButton) { float z = getDepthValue(event->pos().x(), event->pos().y()); qDebug() height() - y, 1, 1, GL_RED, GL_FLOAT, &color); } иначе, если (RGB == 1) { glReadPixels(x, this->height() - y, 1, 1, GL_GREEN, GL_FLOAT, &color); } иначе, если (RGB == 2) { glReadPixels(x, this->height() - y, 1, 1, GL_BLUE, GL_FLOAT, &color); } DoneCurrent(); вернуть цвет; } и все их результаты равны нулю. Я думаю, что при использовании указателя для визуализации объекта должна быть какая-то ошибка? Хотя объект может отображаться корректно, контекст перепутан, и при вызове mousePressEvent функции не читают буфер, который должен быть прочитан. Все вышесказанное является моим предположением, потому что при использовании простого примера (непосредственной визуализации поля в paintGL) вывод глубины и цвета правильный. Или могут быть какие-то более эффективные методы для управления типами объектов рендеринга при использовании QOpenGLWidget?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение