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

运行效果


                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

459. 重复的子字符串(力扣LeetCode)

文章目录 459. 重复的子字符串题目描述暴力移动匹配KMP算法 459. 重复的子字符串 题目描述 给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: …

【Simulink系列】——Simulink子系统子系统封装模块库技术

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 引入 前面对于简单的动态系统仿真&#xff0c;可以直接建立模型&#xff0c;然后仿真。但是对于复杂的系统&#xff0c;直接建立系统会显得杂乱无章&#xff0…

文物预防性保护系统方案的需求分析

没有文物保存环境监测&#xff0c;就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系&#xff0c;一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

创建预留跳过ATP检查增强

1、需求背景 业务要求&#xff0c;当创建预留时&#xff0c;根据工厂和库存地点判断是否要进行ATP校验&#xff0c;而不能从物料维度控制ATP校验&#xff0c;因此需要做增强实现。 本文档将实现通过增强在前台MB21和BAPI&#xff1a;BAPI_RESERVATION_CREATE1创建时&#xff…

【大数据】Flink SQL 语法篇(八):集合、Order By、Limit、TopN

Flink SQL 语法篇&#xff08;八&#xff09;&#xff1a;集合、Order By、Limit、TopN 1.集合操作2.Order By、Limit 子句2.1 Order By 子句2.2 Limit 子句 3.TopN 子句 1.集合操作 集合操作支持 Batch / Streaming 任务。 UNION&#xff1a;将集合合并并且去重。UNION ALL&a…

【算法历练】动态规划副本—路径问题

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;宙でおやすみ 1:02━━━━━━️&#x1f49f;──────── 2:45 &#x1f504; ◀️ ⏸ ▶️ ☰ &#…

秋招上岸大厂,分享一下自己的笔记

秋招上岸大厂&#xff0c;说一说自己的经验 网关项目 很多人读了我的《秋招上岸大厂&#xff0c;分享一下自己的经验》这篇文章&#xff0c;来问我&#xff0c;你面试的时候都用什么项目&#xff1f;你的八股都是从哪里学的&#xff1f;你的项目场景是什么样子的呢&#xff1f;…

计算机网络:路由协议

路由协议简介 路由协议是计算机网络中不可或缺的一部分&#xff0c;它们负责确定数据包从源地址到目的地址的最佳路径。想象一下&#xff0c;如果你是一个数据包&#xff0c;路由协议就像是地图或导航工具&#xff0c;指导你如何到达目的地。 目录 路由协议简介 工作原理简化…

web组态软件

1、强大的画面显示web组态功能 2、良好的开放性。 开放性是指组态软件能与多种通信协议互联&#xff0c;支持多种硬件设备&#xff0c;向上能与管理层通信&#xff0c;实现上位机和下位机的双向通信。 3、丰富的功能模块。 web组态提供丰富的控制功能库&#xff0c;满足用户的测…

配置与管理Samba服务器

配置与管理samba服务器 1&#xff0c;作用&#xff1a;可以使用户在异构网络操作系统之间进行文件系统共享 2&#xff0c;**SMB协议&#xff1a;**主要是作为Microsoft网络的通讯协议&#xff1b;一般端口使用为139&#xff0c;445。 3&#xff0c;功能&#xff1a;1&#x…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的活体人脸检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细讲述了如何利用深度学习构建一个活体人脸检测系统&#xff0c;并且提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并进行了与前代算法YOLOv7、YOLOv6、YOLOv5的细致对比&#xff0c;展示了其在图像、视频、实时视频流和批量文件处…

在from子句中使用子查询

目录 查询每个部门的编号、名称、位置、部门人数、平均工资 多表查询分组统计 子查询分组统计 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 为了解释这种查询的作用&#xff0c;下面做一个简单的查询 查询每个部门的编号、名称、…

Qt中tableView控件的使用

tableView使用注意事项 tableView在使用时&#xff0c;从工具栏拖动到底层页面后&#xff0c;右键进行选择如下图所示&#xff1a; 此处需要注意的是&#xff0c;需要去修改属性&#xff0c;从UI上修改属性如下所示&#xff1a; 也可以通过代码修改属性&#xff1a; //将其设…

存内计算技术大幅提升机器学习算法的性能—挑战与解决方案探讨

一.存内计算技术大幅机器学习算法的性能 1.1背景 人工智能技术的迅速发展使人工智能芯片成为备受关注的关键组成部分。在人工智能的构建中&#xff0c;算力是三个支柱之一&#xff0c;包括数据、算法和算力。目前&#xff0c;人工智能芯片的发展主要集中在两个方向&#xff1…

《App备案入门指南》:拯救备案小白,让您不再担心

各大云接入商ICP代备案管理系统均已正式支持App备案。为便于大家快速学习了解App备案的相关知识&#xff0c;创孵猫通过网上搜集和整理为大家准备了一些基础信息与常见问题。 一、App备案流程 App备案流程包括云接入商初审、工信部短信核验、管局终审和备案成功等关键步骤。在…

腾讯云4核8G的云服务器性能水平?使用场景说明

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…

等保2.0高风险项全解析:判定标准与应对方法

引言 所谓高风险项&#xff0c;就是等保测评时可以一票否决的整改项&#xff0c;如果不改&#xff0c;无论你多少分都会被定为不合格。全文共58页&#xff0c;写得比较细了&#xff0c;但是想到大家基本不会有耐心去仔细看的&#xff08;凭直觉&#xff09;。这几天挑里边相对…

5G网络介绍

目录 一、网络部署模式 二、4/5G基站网元对标 三、4/5G系统架构对比 四、5G核心单元 五、边缘计算 六、轻量化&#xff08;UPF下沉&#xff09; 方案一&#xff1a;UPF下沉 方案二&#xff1a;UPF下沉 方案三&#xff1a;5GC下沉基础模式 方案四&#xff1a;…

K8S之使用Deployment实现滚动更新

滚动更新 滚动更新简介使用Deployment实现滚动更新相关字段介绍测试滚动更新观察滚动更新查看历史版本 自定义滚动更新策略自定义配置建议实践自定义策略通过 RollingUpdateStrategy 字段来设置滚动更新策略使用Recreate更新策略 滚动更新简介 滚动更新是一种自动化程度较高的…