Qt OpenGLWidget 加载纹理示例 - 使用 loadGLTextures 函数
以下是一个使用 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 绑定纹理对象,并使用 glBegin 和 glVertex3f 绘制一个简单的矩形,同时使用 glTexCoord2f 设置纹理坐标。
原文地址: https://www.cveoy.top/t/topic/pjdg 著作权归作者所有。请勿转载和采集!