首页 > 解决方案 > 尝试在 Qt5 中使用 OpenGL 作为纹理显示 QImage

问题描述

我是 OpenGl 的新手,并试图将 QImage 显示为纹理。

这是我的对象代码。但它只是显示一个没有图像的小窗口。

void Window::initializeGL()
{

    initializeOpenGLFunctions();

    QImage img("2.png");

    m_imgSize = img.size();

    img = img.convertToFormat(QImage::Format_RGB32);

    glGenTextures(1, &m_texture);
    glBindTexture(GL_TEXTURE_2D, m_texture);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_imgSize.width(), m_imgSize.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, 0);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}


void Window::paintGL()

{


    glClear(GL_COLOR_BUFFER_BIT);

    glBindTexture(GL_TEXTURE_2D, m_texture);

    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_imgSize.width(), m_imgSize.height(), GL_BGRA, GL_UNSIGNED_BYTE, 0);

    update(); 

}

并将其显示为

int main(int argc, char *argv[])
{

    QApplication app(argc, argv);

    QSurfaceFormat format;
    format.setDepthBufferSize(24);
    format.setStencilBufferSize(8);
    format.setVersion(3, 2);
    format.setProfile(QSurfaceFormat::CoreProfile);
    QSurfaceFormat::setDefaultFormat(format);

    Window objectWindow;
    objectWindow.show();

    return app.exec();
}

标签: qtopengl

解决方案


推荐阅读