ZBLOG

Qt 实现opengl的例子

下面是一个简单的 Qt OpenGL 示例,演示如何创建一个窗口并在其中绘制一个彩色三角形。

1. 创建 Qt 项目

使用 Qt Creator 创建一个新的 Qt Widgets Application 项目,命名为 OpenGLExample 或其他名称。

2. 修改 .pro 文件

打开项目的 .pro 文件,确保加入 OpenGL 模块支持:

QT += core gui opengl

# 如果使用 OpenGL ES,可以添加以下内容:
# QT += opengles2

3. 创建 OpenGL 小部件类

在项目中创建一个新的 C++ 类,例如 MyOpenGLWidget,它继承自 QOpenGLWidget。以下是这个类的基本实现:

MyOpenGLWidget.h

#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions>

class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions {
    Q_OBJECT

public:
    explicit MyOpenGLWidget(QWidget *parent = nullptr);
    ~MyOpenGLWidget();

protected:
    void initializeGL() override;
    void resizeGL(int w, int h) override;
    void paintGL() override;

private:
    GLuint VBO; // 顶点缓冲对象
};

#endif // MYOPENGLWIDGET_H

MyOpenGLWidget.cpp

#include "MyOpenGLWidget.h"
#include <QDebug>

MyOpenGLWidget::MyOpenGLWidget(QWidget *parent)
    : QOpenGLWidget(parent), VBO(0) {}

MyOpenGLWidget::~MyOpenGLWidget() {
    if (VBO) {
        glDeleteBuffers(1, &VBO);
    }
}

void MyOpenGLWidget::initializeGL() {
    initializeOpenGLFunctions();
    
    // 定义三角形的顶点数据(x, y)
    GLfloat vertices[] = {
        0.0f,  0.5f,
       -0.5f, -0.5f,
        0.5f, -0.5f,
    };

    glGenBuffers(1, &VBO); // 生成缓冲对象
    glBindBuffer(GL_ARRAY_BUFFER, VBO); // 将缓冲对象绑定到目标 GL_ARRAY_BUFFER
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // 上传顶点数据
    
    glEnableClientState(GL_VERTEX_ARRAY); // 启用顶点数组功能
}

void MyOpenGLWidget::resizeGL(int w, int h) {
    glViewport(0, 0, w, h);
}

void MyOpenGlWidgdet::paintGl() {
   glClear(GL_COLOR_BUFFER_BIT);

   // 绘制三角形
   glVertexPointer(2, GL_FLOAT, 0, nullptr);
   glDrawArrays(GL_TRIANGLES , 0 ,3); 

   swapBuffers(); 
}

4. 在主窗口中使用小部件

接下来,在你的主窗口中(通常是 MainWindow.cpp),引入 MyOpenglWidgt.h 并实例化这个小部件。

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "MyOpenglWidgt.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
     ui->setupUi(this);
     
     MyOpenglWidgt* openGlWidgt = new MyOpenglWidgt(this);
     setCentralWidget(openGlWidgt); 
}

MainWindow::~MainWindow() {
     delete ui;
}

5. 编译和运行项目

保存所有文件,并编译项目。如果一切配置正确,当你运行应用程序时,会出现一个窗口,其中显示了一个彩色的三角形。

注意事项

  • 确保你的系统已安装适当版本的 OpenSSL 驱动。
  • 上述代码示例采用的是固定管线,如果你想使用更现代的方法(例如着色器),需要进一步学习关于 GLSL 的知识。
  • 可以根据需要对代码进行扩展,例如添加键盘输入、鼠标交互等功能。

这是一个非常基础的示例,但应该能帮助你入门 Qt 中的 Open GL 开发。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=6547

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?