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;//防止一条边为0glViewport(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;
}
运行效果

相关文章:
ubuntu+QT+ OpenGL环境搭建和绘图
一,安装OpenGL库 安装OpenGL依赖项:运行sudo apt install libgl1-mesa-glx命令安装OpenGL所需的一些依赖项。 安装OpenGL头文件:运行sudo apt install libgl1-mesa-dev命令来安装OpenGL的头文件。 安装GLUT库:GLUT(Ope…...
Vue实现打印功能(vue-print-nb)
1、安装依赖 npm install vue-print-nb --save2、在main.js中引入 import Print from vue-print-nb Vue.use(Print)3、在组件的打印区域标签上加 id“printArea” <div id"printArea"> 打印区域 </div>4、在组件的打印按钮标签上使用指令 v-print“pr…...
【JSON2WEB】06 JSON2WEB前端框架搭建
【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 前端技术路线太多了,知识点更多&…...
【蓝桥杯单片机入门记录】动态数码管
目录 一、数码管动态显示概述 二、动态数码管原理图 (1)原理图 (2)动态数码管如何与芯片相连 (3)“此器件” ——>锁存器74HC573 三、动态数码管显示例程 (1)例程1…...
12 Redis之Lua脚本
11. Lua脚本 Lua 是一个由标准 C 语言开发的、开源的、可扩展的、轻量级的、弱类型的、解释型脚本语言 常用于Nginx/分布式锁/ 先下载并安装Lua...
网络安全之内容安全
内容安全 攻击可能只是一个点,防御需要全方面进行 IAE引擎 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包(数据包分片,分段需要重组),之后对 数据包的内容进行识别。(应用…...
在CentOS上使用Docker搭建Halo博客并实现远程访问的详细指南
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. Docker部署Halo1.1 检查Docker版本1.2 在Docker中部署Halo 二. Linux安装Cpol…...
数据结构day5
link_stack.c #include "link_stack.h" //申请栈顶指针 top_p create_top() {top_p top (top_p)malloc(sizeof(top_t));if(topNULL){printf("空间申请失败\n");return NULL;}top->len 0;top->ptop NULL; //刚申请栈指针时没有指向元素return to…...
基础!!!吴恩达deeplearning.ai:神经网络中使用softmax
以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai 文章目录 softmax作为输出层的神经网络Tensorflow的实现softmax的改进实现数值舍入误差(Numerical Roundoff Errors)sigmoid修改修改softmax 在上一篇博客中我们了解了有关softmax的原理相关内容…...
mapbox高德地图与相机
mapbox高德地图与相机 本案例使用Mapbox GL JavaScript库创建高德地图。 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapb…...
Eslint在Vscode中使用技巧的相关技巧
ps :该文章会详细结论构建一个脚手架遇到的问题,会持续更新,请定时查看 Eslint相关 在vscode中使用eslint插件 在vscode中用户配置没有开启eslint.enable 在vscode中工作区配置开启eslint.enable settings.json中没有做eslint相关配置 在编写的vue…...
045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件
045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件 #知识点: 1、PHP-MYSQL-SQL注入-二次注入&利用条件 2、PHP-MYSQL-SQL注入-堆叠注入&利用条件 3、PHP-MYSQL-SQL注入-带外注入&利用条件 演示案例:…...
【蓝牙协议栈】【BR/EDR】【AVRCP】蓝牙音视频远程控制协议
1. AVRCP概念 AVRCP(Audio/Video Remote Control Profile):音视频远程控制协议定义了蓝牙设备和 audio/video控制功能通信的特点和过程,另用于远程控制音视频设备,底层传输基于 AVCTP(音视频控制传输协议)。 ➢该 Profile定义了AV/C数字命令控制集。命令和信息通过 AVCT…...
Head First Design Patterns - 单例模式
什么是单例模式 单例模式确保应用中,一个类最多只有一个实例单例模式也提供访问此实例的全局访问点单例模式实现中,使用了一个私有构造器,一个静态方法以及一个静态变量 为什么要用单例模式 java中静态全局变量也能做到被实例化一次 但是…...
Mysql的备份还原
模拟环境准备 创建一个名为school的数据库,创建一个名为Stuent的学生信息表 mysql> create database school; Query OK, 1 row affected (0.00 sec)mysql> use school; Database changed mysql> CREATE TABLE Student (-> Sno int(10) NOT NULL COMME…...
分区表介绍
问题 单表数据量过大,查询的性能通常会变得很低 查询时磁盘的IO次数增加:MySQL的InnoDB引擎使用B树维护索引,一个典型的索引节点大概可以存储60-120个数据记录,一个三层的索引大概可以存储百万条数据。如果订单表增加一个数量级…...
emacs 源码分析(七)
文章目录 emacs源码分析(七)自己动手把emacs的DEFUN宏抠出来 <2024-01-07 周日> emacs源码分析(七) 这DEFUN宏就像胶水一样,它把c代码和emacs-lisp代码给联系起来。但是DEFUN宏看着怪恐怖的有没有!…...
Linux运维-Web服务器的配置与管理(Apache+tomcat)(没成功,最后有失败经验)
Web服务器的配置与管理(Apachetomcat) 项目场景 公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用、移动APP等领域延伸,此时原来开发web服务的php语言已经不适应新的…...
探讨分布式数据库ID生成解决方案
在技术面试中,面试官通常通过挑战应聘者的分布式系统知识来评估其能力。今天,让我们模拟一场面试现场,深入了解关于分布式数据库ID生成的解决方案。 面试官:嘿,小伙子,分布式数据库ID生成解决方案了解吗&a…...
Clickhouse填坑记4:Too many parts问题分析
Clickhouse在进行大数据量同步时,感觉很爽,插入速度非常快,但是,在使用过程中却出现了几次“Too many parts”异常报错,搞得很痛苦,这里记录一下解决过程。 我这边采用的是Flink程序,实时将数据写入ClickHouse,在执行一段时间后,会提示“Too many parts”异常,如下异…...
树莓派4B无头启动后,除了SSH还能怎么玩?Win11网线直连下的文件共享与端口转发实战
树莓派4B无头启动进阶指南:Win11直连下的高效开发环境搭建 当你已经通过网线直连成功SSH登录树莓派时,这仅仅是探索的开始。本文将带你解锁无显示器环境下更强大的工作流——从基础文件共享到专业级服务部署,让树莓派4B真正成为你的便携式开发…...
如何快速掌握Discord隐藏频道查看技巧:ShowHiddenChannels完整指南
如何快速掌握Discord隐藏频道查看技巧:ShowHiddenChannels完整指南 【免费下载链接】return-ShowHiddenChannels A BetterDiscord plugin which displays all hidden channels and allows users to view information about them. 项目地址: https://gitcode.com/g…...
拒绝标题党!真正可用的AI试衣系统源码,带Web界面
温馨提示:文末有资源获取方式最近有不少人在问有没有靠谱的AI试衣方案,网上搜了一圈,发现要么是夸大其词的标题党,要么根本跑不起来。今天就分享一套真正可用的源码,带完整Web界面,实测有效。这套系统能做什…...
浏览器书签管理的革命性解决方案:Neat Bookmarks树状扩展深度解析
浏览器书签管理的革命性解决方案:Neat Bookmarks树状扩展深度解析 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 你是否曾在数百个杂乱书…...
传感器云管理系统架构与物联网应用实践
1. 传感器云管理系统架构解析传感器网络作为物联网的基础设施,其核心价值在于将物理世界的状态转化为可处理的数字信息。传统嵌入式传感器网络存在两大痛点:一是传感器节点通常被封闭在特定网络中,外部应用难以直接访问;二是多应用…...
视觉SLAM实战指南:如何利用EuRoC MAV数据集进行算法验证与调优
1. 初识EuRoC MAV数据集:SLAM开发者的宝藏库 第一次接触EuRoC数据集时,我正为一个无人机项目调试视觉惯性里程计(VIO)算法。当时试过自己采集数据,结果发现标定误差和同步问题让调试过程变成噩梦。直到同事扔给我MH_01…...
如何用 JavaScript 实现单选式盒子颜色切换(点击高亮,其余复原)
本文详解如何使用原生 JavaScript 实现“单选高亮”效果:点击任一 .box 元素时,仅该元素变为指定颜色,其余同组元素自动恢复默认背景色。 本文详解如何使用原生 javascript 实现“单选高亮”效果:点击任一 .box 元素时&#…...
HoRain云--Razor语法:从ClassicASP到现代迁移指南
🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…...
从Wi-Fi到5G:聊聊线性分组码(汉明码)在我们日常网络中的隐身守护
从Wi-Fi到5G:线性分组码如何守护你的每一次网络通信 每次点击视频播放键时,你是否想过为什么在信号不佳的地铁里,画面依然能流畅加载?当你在咖啡馆传输重要文件,数据包如何在干扰频发的2.4GHz频段中保持完整ÿ…...
别再死记硬背了!用一张Excel表搞定PMP挣值管理(PV/EV/AC/SV/CV/SPI/CPI)
项目经理的挣值管理实战手册:用Excel轻松掌握项目健康度 每次项目进度汇报会上,看着团队成员迷茫的眼神和满屏的PV、EV、AC缩写,你是否也经历过那种"公式都懂但就是不会用"的尴尬?作为从业十五年的项目管理顾问…...
