GlReadPixels() не может получить правильную информацию о QOpenGLWidgetC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 GlReadPixels() не может получить правильную информацию о QOpenGLWidget

Сообщение Anonymous »


Я работал над приложением отображения, используя 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?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»