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;
}

运行效果

相关推荐
地衣君1 小时前
RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
linux·ubuntu·risc-v
5:001 小时前
云备份项目
linux·开发语言·c++
码农101号2 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
笨笨马甲2 小时前
Qt Quick模块功能及架构
开发语言·qt
云道轩2 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
是小满满满满吗2 小时前
传输层:udp与tcp协议
linux·服务器·网络
爱学习的小道长2 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb2 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
Xam_d_LM2 小时前
【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
linux·ubuntu·科研·矢量图·drawio
Mintimate3 小时前
云服务器 Linux 手动 DD 安装第三方 Linux 发行版:原理与实战
linux·运维·服务器