qt调用opengl渲染rgb 头文件和源文件和注释
时间: 2023-12-01 10:02:28 浏览: 142
C++中头文件和源文件详细介绍
以下是使用 Qt 调用 OpenGL 渲染 RGB 的头文件和源文件以及注释:
头文件:
```c++
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = nullptr);
protected:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
private:
GLuint m_textureID;
};
#endif // GLWIDGET_H
```
源文件:
```c++
#include "glwidget.h"
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QDebug>
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
void GLWidget::initializeGL()
{
initializeOpenGLFunctions();
glClearColor(0, 0, 0, 1);
// 创建纹理对象
glGenTextures(1, &m_textureID);
glBindTexture(GL_TEXTURE_2D, m_textureID);
// 设置纹理过滤方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
void GLWidget::resizeGL(int w, int h)
{
glViewport(0, 0, w, h);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
// 创建测试用的 RGB 图像数据
const int width = 2;
const int height = 2;
unsigned char pixels[width * height * 3] = {
255, 0, 0, // 红色
0, 255, 0, // 绿色
0, 0, 255, // 蓝色
255, 255, 0 // 黄色
};
// 将 RGB 数据作为纹理贴到三角形上
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
// 绘制三角形
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f( 1, -1);
glTexCoord2f(0.5, 1); glVertex2f( 0, 1);
glEnd();
// 刷新显示
swapBuffers();
}
```
注释:
```c++
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QOpenGLWidget> // 包含 Qt 的 OpenGL 窗口部件类
#include <QOpenGLFunctions> // 包含 Qt 的 OpenGL 函数类
class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = nullptr);
protected:
void initializeGL() override; // OpenGL 初始化函数
void resizeGL(int w, int h) override; // 窗口大小改变事件处理函数
void paintGL() override; // 绘制事件处理函数
private:
GLuint m_textureID; // 纹理 ID
};
#endif // GLWIDGET_H
```
```c++
#include "glwidget.h"
#include <QOpenGLShaderProgram> // 包含 Qt 的 OpenGL 着色器程序类
#include <QOpenGLTexture> // 包含 Qt 的 OpenGL 纹理类
#include <QDebug>
GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent)
{
}
void GLWidget::initializeGL()
{
initializeOpenGLFunctions(); // 初始化 OpenGL 函数
glClearColor(0, 0, 0, 1); // 设置清空颜色为黑色
// 创建纹理对象
glGenTextures(1, &m_textureID); // 生成纹理 ID
glBindTexture(GL_TEXTURE_2D, m_textureID); // 绑定纹理对象
// 设置纹理过滤方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // 设置缩小过滤方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // 设置放大过滤方式
}
void GLWidget::resizeGL(int w, int h)
{
glViewport(0, 0, w, h); // 设置视口大小
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲区
// 创建测试用的 RGB 图像数据
const int width = 2;
const int height = 2;
unsigned char pixels[width * height * 3] = {
255, 0, 0, // 红色
0, 255, 0, // 绿色
0, 0, 255, // 蓝色
255, 255, 0 // 黄色
};
// 将 RGB 数据作为纹理贴到三角形上
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels);
// 绘制三角形
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f( 1, -1);
glTexCoord2f(0.5, 1); glVertex2f( 0, 1);
glEnd();
// 刷新显示
swapBuffers(); // 交换缓冲区
}
```
阅读全文