文章目录
一、基于Qt做OpenGL开发
1、环境准备
确保你已经安装了 Qt 开发环境(包含 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 "Qt Widgets Application" 或 "Qt Quick Application",根据项目需求进行选择。
2、创建OpenGL窗口
在 Qt 中,可以通过继承
QOpenGLWidget
和QOpenGLFunctions_x_x_Core
类来创建一个 OpenGL 窗口。以下是一个简单的示例:
cpp
#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
public:
OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
protected:
// 初始化 OpenGL 上下文
void initializeGL() override {
initializeOpenGLFunctions();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
}
// 绘制 OpenGL 场景
void paintGL() override {
glClear(GL_COLOR_BUFFER_BIT);
}
// 处理窗口大小变化
void resizeGL(int width, int height) override {
glViewport(0, 0, width, height);
}
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
OpenGLWidget w;
w.show();
return a.exec();
}
代码解释
- initializeGL 函数:在这个函数中,我们调用 initializeOpenGLFunctions() 来初始化 OpenGL 函数,然后使用 glClearColor 设置清屏颜色。
- paintGL 函数:这是绘制 OpenGL 场景的主要函数,在这个函数中,我们使用 glClear 函数清除颜色缓冲区。
- resizeGL 函数:当窗口大小发生变化时,这个函数会被调用,我们使用 glViewport 函数设置视口大小。
3、绘制基本图形
下面我们在 paintGL 函数中绘制一个简单的三角形:
cpp
#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
public:
OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
protected:
void initializeGL() override {
initializeOpenGLFunctions();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
}
void paintGL() override {
glClear(GL_COLOR_BUFFER_BIT);
// 启用顶点属性
glEnableClientState(GL_VERTEX_ARRAY);
// 定义三角形的顶点坐标
GLfloat vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
// 设置顶点指针
glVertexPointer(3, GL_FLOAT, 0, vertices);
// 绘制三角形
glDrawArrays(GL_TRIANGLES, 0, 3);
// 禁用顶点属性
glDisableClientState(GL_VERTEX_ARRAY);
}
void resizeGL(int width, int height) override {
glViewport(0, 0, width, height);
}
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
OpenGLWidget w;
w.show();
return a.exec();
}