ubuntu+QT+ OpenGL环境搭建和绘图

一,安装OpenGL库

安装OpenGL依赖项:运行sudo apt install libgl1-mesa-glx命令安装OpenGL所需的一些依赖项。

安装OpenGL头文件:运行sudo apt install libgl1-mesa-dev命令来安装OpenGL的头文件。

安装GLUT库:GLUT(OpenGL Utility Toolkit)是一个方便的库,提供了用于创建OpenGL应用程序的实用工具函数。运行sudo apt install freeglut3-dev命令来安装GLUT库。

安装GLEW库:GLEW(OpenGL Extension Wrangler)是一个库,提供了方便的函数和宏,用于在OpenGL应用程序中访问扩展和函数。运行sudo apt install libglew-dev命令来安装GLEW库。

编译和链接OpenGL程序:写完OpenGL程序,你g++ application.cpp -o application `pkg-config --cflags --libs opengl`使用以下命令来编译和链接。

二,新建qt下openGL工程

需要在.pro文件中添加QT += opengl

glwidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H
#include<QtOpenGL>
#include<QWidget>
namespace Ui{
class GLWidget;
}
class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QGLWidget *parent = 0);
    ~GLWidget();
protected:
    void initializeGL();  //初始化OpenGL窗口部件
    void paintGL();  //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用
    void resizeGL(int width,int height); //处理窗口大小变化事件的,参数是新状态下的宽和高
    void keyPressEvent(QKeyEvent *e);  //鼠标处理函数
protected:
    bool fullscreen;  //判断是否全屏的变量
private:
    Ui::GLWidget *ui;
};
#endif // GLWIDGET_H

glwidget.cpp

#include"glwidget.h"
#include"ui_glwidget.h"
#include<QtGui>
#include<QtCore>
#include<QtOpenGL>



GLWidget::GLWidget(QGLWidget *parent) :QGLWidget(parent),ui(new Ui::GLWidget)
{
    ui->setupUi(this);
    fullscreen = false;
}

//这是对虚函数,这里是重写该函数

void GLWidget::initializeGL()
{

    setGeometry(300, 200, 640,480);//设置窗口初始位置和大小

    glShadeModel(GL_FLAT);//设置阴影平滑模式

    glClearColor(0.0, 0.0,0.0, 0);//改变窗口的背景颜色

    glClearDepth(1.0);//设置深度缓存

    glEnable(GL_DEPTH_TEST);//允许深度测试

    glDepthFunc(GL_LEQUAL);//设置深度测试类型

    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//进行透视校正

}



void GLWidget::paintGL()
{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glLoadIdentity();
    //renderText(10,20,"Hello,My Dear");

    // glColor3f(1.0, 0.0,0.0);
    /*
        glBegin(GL_TRIANGLES);
        glVertex3f(0.0, 1.0,0.0);
        glVertex3f(-1.0, -1.0,0.0);
        glVertex3f(1.0, -1.0,0.0);
        glEnd();*/

    glBegin(GL_TRIANGLES);
    glColor3f(1.0f, 0.0f,0.0f);
    glVertex3f(0.0f,1.0f, 0.0f);
    glColor3f(0.0f, 1.0f,0.0f);
    glVertex3f(-1.0f,-1.0f, 0.0f);
    glColor3f(0.0f, 0.0f,1.0f);
    glVertex3f(1.0f,-1.0f, 0.0f);
    glEnd();
    renderText(20, 100,"Hello Jcy, My first OpenGL app.");
}



//该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时).

void GLWidget::resizeGL(int width, int height)
{
    if(0 == height)
    height = 1;//防止一条边为0
    glViewport(0, 0,(GLint)width, (GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了
    glMatrixMode(GL_PROJECTION);//选择投影矩阵
    glLoadIdentity();//重置选择好的投影矩阵
    // gluPerspective(45.0,(GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透视投影矩阵
    //  glMatirxMode(GL_MODELVIEW);//以下2句和上面出现的解释一样
    glLoadIdentity();
}



void GLWidget::keyPressEvent(QKeyEvent *e)
{
    switch(e->key())
    {
  //F1键为全屏和普通屏显示切换键

    case Qt::Key_F1:
        fullscreen =!fullscreen;
        if(fullscreen)
        showFullScreen();
        else
        {
            setGeometry(300, 150, 640, 480);
            showNormal();
        }

        updateGL();
        break;
        //Ese为退出程序键
    case Qt::Key_Escape:
        close();
    }

}

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

运行效果

相关推荐
热爱嵌入式的小许19 分钟前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
威桑4 小时前
记一次控件提升后,运行却不显示的Bug
qt
韩楚风4 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学4 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO4 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu75 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我5 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、5 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程5 小时前
Linux中环境变量
linux
FL16238631295 小时前
[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪
深度学习·qt·yolo