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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Невозможно прочитать правильные значения с помощью glReadPixels() и неожиданные результаты для разных размеров точек.
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Android opengl es glreadpixels () сохраняет черное изображение в галерее, даже если предварительный просмотр в порядке
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Добавление glreadpixels () в функцию
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Добавление glreadpixels () в функцию [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Добавление glreadpixels () в функцию [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

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