OpenGL(2)基于Qt做OpenGL开发

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

一、基于Qt做OpenGL开发

1、情况准备

   确保你已经安装了 Qt 开发情况(包罗 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widgets Application” 或 “Qt Quick Application”,根据项目需求进行选择。
  2、创建OpenGL窗口

   在 Qt 中,可以通过继续 QOpenGLWidget 和 QOpenGLFunctions_x_x_Core 类来创建一个 OpenGL 窗口。以下是一个简朴的示例:
  1. #include <QApplication>
  2. #include <QOpenGLWidget>
  3. #include <QOpenGLFunctions>
  4. class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
  5. public:
  6.     OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
  7. protected:
  8.     // 初始化 OpenGL 上下文
  9.     void initializeGL() override {
  10.         initializeOpenGLFunctions();
  11.         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  12.     }
  13.     // 绘制 OpenGL 场景
  14.     void paintGL() override {
  15.         glClear(GL_COLOR_BUFFER_BIT);
  16.     }
  17.     // 处理窗口大小变化
  18.     void resizeGL(int width, int height) override {
  19.         glViewport(0, 0, width, height);
  20.     }
  21. };
  22. int main(int argc, char *argv[]) {
  23.     QApplication a(argc, argv);
  24.     OpenGLWidget w;
  25.     w.show();
  26.     return a.exec();
  27. }
复制代码
代码解释


  • initializeGL 函数:在这个函数中,我们调用 initializeOpenGLFunctions() 来初始化 OpenGL 函数,然后使用 glClearColor 设置清屏颜色。
  • paintGL 函数:这是绘制 OpenGL 场景的主要函数,在这个函数中,我们使用 glClear 函数扫除颜色缓冲区。
  • resizeGL 函数:当窗口大小发生变化时,这个函数会被调用,我们使用 glViewport 函数设置视口大小。
3、绘制基本图形

   下面我们在 paintGL 函数中绘制一个简朴的三角形:
  1. #include <QApplication>
  2. #include <QOpenGLWidget>
  3. #include <QOpenGLFunctions>
  4. class OpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Core {
  5. public:
  6.     OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
  7. protected:
  8.     void initializeGL() override {
  9.         initializeOpenGLFunctions();
  10.         glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  11.     }
  12.     void paintGL() override {
  13.         glClear(GL_COLOR_BUFFER_BIT);
  14.         // 启用顶点属性
  15.         glEnableClientState(GL_VERTEX_ARRAY);
  16.         // 定义三角形的顶点坐标
  17.         GLfloat vertices[] = {
  18.             -0.5f, -0.5f, 0.0f,
  19.              0.5f, -0.5f, 0.0f,
  20.              0.0f,  0.5f, 0.0f
  21.         };
  22.         // 设置顶点指针
  23.         glVertexPointer(3, GL_FLOAT, 0, vertices);
  24.         // 绘制三角形
  25.         glDrawArrays(GL_TRIANGLES, 0, 3);
  26.         // 禁用顶点属性
  27.         glDisableClientState(GL_VERTEX_ARRAY);
  28.     }
  29.     void resizeGL(int width, int height) override {
  30.         glViewport(0, 0, width, height);
  31.     }
  32. };
  33. int main(int argc, char *argv[]) {
  34.     QApplication a(argc, argv);
  35.     OpenGLWidget w;
  36.     w.show();
  37.     return a.exec();
  38. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表