一、基于Qt做OpenGL开发
1、情况准备
确保你已经安装了 Qt 开发情况(包罗 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widgets Application” 或 “Qt Quick Application”,根据项目需求进行选择。
2、创建OpenGL窗口
在 Qt 中,可以通过继续 QOpenGLWidget 和 QOpenGLFunctions_x_x_Core 类来创建一个 OpenGL 窗口。以下是一个简朴的示例:
- #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 函数中绘制一个简朴的三角形:
- #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();
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |