Qt实现opengl显示图片 中文注释以及头文件和源文件
时间: 2024-02-20 20:57:03 浏览: 67
QT和GDAL和OpenGL影像显示,qt使用opengl显示图片,C,C++源码.zip
5星 · 资源好评率100%
以下是Qt实现OpenGL显示图片的头文件和源文件,附有中文注释:
头文件:glwidget.h
```
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
#include <QImage>
#include <QTimer>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = 0);
~GLWidget();
void setImage(QImage image); // 设置要显示的图片
protected:
void initializeGL(); // 初始化OpenGL
void resizeGL(int w, int h); // 视口大小变化时调用
void paintGL(); // 绘制OpenGL场景
private:
GLuint m_textureID; // 纹理ID
QImage m_image; // 要显示的图片
QTimer m_timer; // 定时器,用于定时调用绘制函数
};
#endif // GLWIDGET_H
```
源文件:glwidget.cpp
```
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
// 设置定时器,每隔50ms调用一次绘制函数
connect(&m_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
m_timer.start(50);
}
GLWidget::~GLWidget()
{
// 删除纹理
glDeleteTextures(1, &m_textureID);
}
void GLWidget::setImage(QImage image)
{
m_image = image; // 设置要显示的图片
}
void GLWidget::initializeGL()
{
// 启用2D纹理映射
glEnable(GL_TEXTURE_2D);
// 生成纹理ID
glGenTextures(1, &m_textureID);
// 绑定纹理
glBindTexture(GL_TEXTURE_2D, m_textureID);
// 设置纹理参数
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
// 加载纹理数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_image.width(), m_image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, m_image.bits());
}
void GLWidget::resizeGL(int w, int h)
{
// 设置OpenGL视口
glViewport(0, 0, w, h);
// 设置投影矩阵
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w, 0, h, -1, 1);
// 设置模型视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::paintGL()
{
// 绑定纹理
glBindTexture(GL_TEXTURE_2D, m_textureID);
// 开始绘制
glBegin(GL_QUADS);
// 左上角
glTexCoord2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.0f);
// 右上角
glTexCoord2f(1.0f, 0.0f);
glVertex2f(m_image.width(), 0.0f);
// 右下角
glTexCoord2f(1.0f, 1.0f);
glVertex2f(m_image.width(), m_image.height());
// 左下角
glTexCoord2f(0.0f, 1.0f);
glVertex2f(0.0f, m_image.height());
// 结束绘制
glEnd();
}
```
阅读全文