以下是一个使用 Qt 的 OpenGLWidget 类加载纹理的示例代码:

void OpenGLWidget::initializeGL()
{
    // 设置清屏颜色
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    // 启用深度测试
    glEnable(GL_DEPTH_TEST);

    // 加载纹理
    loadGLTextures();
}

void OpenGLWidget::loadGLTextures()
{
    // 创建纹理对象
    glGenTextures(1, &textureID);

    // 绑定纹理对象
    glBindTexture(GL_TEXTURE_2D, textureID);

    // 设置纹理参数
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    // 加载纹理图像
    QImage image;
    if (!image.load('texture.jpg')) {
        qWarning('Failed to load texture image.');
        return;
    }

    // 将图像转换为OpenGL可接受的格式
    QImage texture = QGLWidget::convertToGLFormat(image);

    // 生成纹理
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture.width(), texture.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, texture.bits());
}

void OpenGLWidget::paintGL()
{
    // 清空颜色缓冲区和深度缓冲区
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // 绘制场景
    // ...

    // 绑定纹理对象
    glBindTexture(GL_TEXTURE_2D, textureID);

    // 绘制纹理
    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, 0.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, 0.0f);
    glEnd();
}

在上述代码中,loadGLTextures 函数使用 glGenTextures 创建一个纹理对象,并使用 glBindTexture 绑定纹理对象。然后,它使用 glTexParameteri 设置纹理参数,例如纹理过滤器的类型。接下来,它使用 QImage 加载纹理图像,并使用 QGLWidget::convertToGLFormat 将图像转换为 OpenGL 可接受的格式。最后,使用 glTexImage2D 生成纹理。

paintGL 函数中,首先清空颜色缓冲区和深度缓冲区。然后,使用 glBindTexture 绑定纹理对象,并使用 glBeginglVertex3f 绘制一个简单的矩形,同时使用 glTexCoord2f 设置纹理坐标。

Qt OpenGLWidget 加载纹理示例 - 使用 loadGLTextures 函数

原文地址: https://www.cveoy.top/t/topic/pjdg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录